亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? iofor232.c

?? c51bus 51單片機的各種接口總線程序包
?? C
字號:
//----------------------------------------------------------------------------------------------------------------
// UART.C
// 通用模擬串口程序
// 資源需求:一個硬件計數器,兩個I/O口
// 硬件計數器的計數時間設定為三倍波特率
// 定義的兩個I/O口,用于發送和接收,分別用在receive()和transmit(char)中
// 設立了專門的接收緩沖區,用于存儲接收數據
// 注意:必需根據波特率來設定定時器;
//        每次通信開始必須調用初始化函數init_uart()
//----------------------------------------------------------------------------------------------------------------
//----------------------------------管腳定義、庫函數聲明-------------------------------------------------
#include <reg51.h>
#include <stdio.h>
//端口定義
sbit RXD3=P1^0;
sbit TXD3=P1^1;
//-----------------------------------------------變量聲明-----------------------------------------------------
#define IN_BUF_SIZE 10           //輸入緩沖區長度定義
#define TRUE 1
#define FALSE 0
static unsigned char inbuf[IN_BUF_SIZE];  //輸入緩沖區
static unsigned char qin = 0;
static unsigned char qout = 0;
static char flag_rx_waiting_for_stop_bit;
static char flag_rx_off;
static char rx_mask;
static char flag_rx_ready;
static char flag_tx_ready;
static char timer_rx_ctr;
static char timer_tx_ctr;
static char bits_left_in_rx;
static char bits_left_in_tx;
static char rx_num_of_bits;
static char tx_num_of_bits;
static char internal_rx_buffer;
static char internal_tx_buffer;
static char user_tx_buffer;
//----------------------------------與硬件有關的函數聲明------------------------------------------------
bit get_rx_pin_status();                       //1.返回接收管腳返回的值(0或1)
void set_tx_pin_high(void);                    //2. 發送管腳置高,輸出1
void set_tx_pin_low();                        //3.發送管腳置低,輸出0
void timer_set();                             //4. 設置定時器的值為波特率的三倍
void set_timer_interrupt();                     //5. 使能定時器中斷
void  idle();                                //6.等待端口輸入時,執行,根據具體應用進行修改
//-----------------------------------聲明與硬件無關的函數-------------------------------------------
void flush_input_buffer( void );                  // 清空接收緩存區
char kbhit( void );                             // 判斷數據是否正常接收
char get_char( void );                          // 從接收緩存區讀出一個數據
void turn_rx_on( void );                        // 啟動接收函數
void turn_rx_off( void );                        // 結束接收函數
extern void put_char( char );                     // 向發送端發送一個數據.
void timer_isr(void);						  //中斷處理函數
//-------------------------------------------------------------------------------------------------------
//  函數名稱:set_tx_pin_high 
//  功能說明: 置串口發送端口為高,與硬件有關 
//--------------------------------------------------------------------------------------------------------
void  set_tx_pin_high( void)
 	 {
	 TXD3=1;
	 }
//-------------------------------------------------------------------------------------------------------
//  函數名稱: set_tx_pin_low 
//  功能說明: 置串口發送端口為低,與硬件有關
//--------------------------------------------------------------------------------------------------------
void set_tx_pin_low( void)
 	 {
	 TXD3=0;
	 }
//-------------------------------------------------------------------------------------------------------
//  函數名稱:get_rx_pin_status 
//  功能說明: 返回接收端口的狀態,高為1,低為0,與硬件有關
//--------------------------------------------------------------------------------------------------------
bit get_rx_pin_status()
     {
	 return(RXD3);
	 }
//-------------------------------------------------------------------------------------------------------
//  函數名稱: timer_set 
//  功能說明: 設置定時器工作狀態,與硬件有關
//--------------------------------------------------------------------------------------------------------
void timer_set()
     {
	  TMOD=0x22;  //定時器1為工作模式2(8位自動重裝),0為模式2(8位自動重裝) 
       PCON=0x00;
	   TR0=0;        //在發送或接收才開始使用
       TF0=0; 
       TH0=(256-96);  //9600bps 就是 1000000/9600=104.167微秒 執行的timer是
	                 //104.167*11.0592/12= 96 
       TL0=TH0;
       ET0=1;
	  }
//-------------------------------------------------------------------------------------------------------
//  函數名稱: set_timer_interrupt
//  功能說明: 打開定時器中斷允許,與硬件有關
//--------------------------------------------------------------------------------------------------------
void set_timer_interrupt()
      {
	   EA=1;
	  }
//-------------------------------------------------------------------------------------------------------
//  函數名稱: IntTimer0
//  功能說明: 定時器中斷函數,與硬件有關,但不做處理,直接調用通用中斷處理函數
//--------------------------------------------------------------------------------------------------------
void IntTimer0() interrupt 1
{
  timer_isr();              //調用中斷處理函數
}
//-------------------------------------------------------------------------------------------------------
//  函數名稱: idle
//  功能說明: 等待定時器中斷時的執行程序,與具體應用有關
//--------------------------------------------------------------------------------------------------------
void idle()
      {

	  }
//-------------------------------------------------------------------------------------------------------
//  函數名稱: timer_isr
//  功能說明: 中斷處理函數,與硬件無關,通用函數
//--------------------------------------------------------------------------------------------------------
void timer_isr(void)        /*中斷服務程序*/
{
char mask, start_bit, flag_in;
//發送程序
if ( flag_tx_ready )
{
if ( --timer_tx_ctr<=0 )
{
mask = internal_tx_buffer&1;
internal_tx_buffer >>= 1;
if ( mask )
{
set_tx_pin_high();
}
else
{
set_tx_pin_low();
}
timer_tx_ctr = 3;
if ( --bits_left_in_tx<=0 )
{
flag_tx_ready = FALSE;
}
}
}
// 接收程序
if ( flag_rx_off==FALSE )
{
if ( flag_rx_waiting_for_stop_bit )
{
if ( --timer_rx_ctr<=0 )
{
flag_rx_waiting_for_stop_bit = FALSE;
flag_rx_ready = FALSE;
internal_rx_buffer &= 0xFF;
if ( internal_rx_buffer!=0xC2 )
{
inbuf[qin] = internal_rx_buffer;
if ( ++qin>=IN_BUF_SIZE )
{
qin = 0;
}
}
}
}
else                            // rx_test_busy接收忙
{
if ( flag_rx_ready==FALSE )
{
start_bit = get_rx_pin_status();
// 判斷起始位
if ( start_bit==0 )
{
flag_rx_ready = TRUE;
internal_rx_buffer = 0;
timer_rx_ctr = 4;
bits_left_in_rx = 
rx_num_of_bits;
rx_mask = 1;
}
}
else 
{
if ( --timer_rx_ctr<=0 )
{ 
timer_rx_ctr = 3;
flag_in = 
get_rx_pin_status();
if ( flag_in )
{
internal_rx_buffer |= rx_mask;
}
rx_mask <<= 1;
if ( --bits_left_in_rx<=0 )
{
flag_rx_waiting_for_stop_bit = TRUE;
}
}
}
}
}
}
//-------------------------------------------------------------------------------------------------------
//  函數名稱: init_uart
//  功能說明: 初始化異步串口,與硬件無關,通用函數
//--------------------------------------------------------------------------------------------------------
void init_uart( void )
{
flag_tx_ready = FALSE;
flag_rx_ready = FALSE;
flag_rx_waiting_for_stop_bit = FALSE;
flag_rx_off = FALSE;
rx_num_of_bits = 10;
tx_num_of_bits = 10;
set_tx_pin_low();
timer_set();
set_timer_interrupt();               // 使能計時器中斷
}
//-------------------------------------------------------------------------------------------------------
//  函數名稱: get_char
//  輸入參數: 無
//  輸出參數: ch,接收數據
//  功能說明: 接收一個字節,與硬件無關,通用函數
//--------------------------------------------------------------------------------------------------------
char get_char( void )
{
char ch;
do
{
while ( qout==qin )
{
idle();
}
ch = inbuf[qout] & 0xFF;
if ( ++qout>=IN_BUF_SIZE )
{
qout = 0;
}
}
while ( ch==0x0A || ch==0xC2 );
return( ch );
}
//-------------------------------------------------------------------------------------------------------
//  函數名稱: put_char
//  功能說明: 接收一個字節,與硬件無關,通用函數
//--------------------------------------------------------------------------------------------------------
void put_char( char ch )
{
while ( flag_tx_ready );
user_tx_buffer = ch;
// 喚醒串口
timer_tx_ctr = 3;
bits_left_in_tx = tx_num_of_bits;
internal_tx_buffer = (user_tx_buffer<<1) | 0x200;
flag_tx_ready = TRUE;
}
//-------------------------------------------------------------------------------------------------------
//  函數名稱: flush_input_buffer
//  功能說明:初始化緩沖區,與硬件無關,通用函數
//--------------------------------------------------------------------------------------------------------
void flush_input_buffer( void )
{
qin = 0;
qout = 0;
}
//-------------------------------------------------------------------------------------------------------
//  函數名稱: kbhit
//  功能說明: 判斷接收指針與發送指針是否相等,與硬件無關,通用函數
//--------------------------------------------------------------------------------------------------------
char kbhit( void )
{
return( qin!=qout );
}
//-------------------------------------------------------------------------------------------------------
//  函數名稱: turn_rx_on
//  功能說明: 開始接收,與硬件無關,通用函數
//--------------------------------------------------------------------------------------------------------
void turn_rx_on( void )
{
flag_rx_off = FALSE;
}
//-------------------------------------------------------------------------------------------------------
//  函數名稱: turn_rx_off
//  功能說明: 停止接收,與硬件無關,通用函數
//--------------------------------------------------------------------------------------------------------
void turn_rx_off( void )
{
flag_rx_off = TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产久精国产| 国产一区二区毛片| 精品亚洲成a人在线观看 | 国产精品天干天干在观线| 夜夜精品视频一区二区| 日韩av电影天堂| 一本久道中文字幕精品亚洲嫩| 欧美电影免费观看高清完整版在线观看| 国产调教视频一区| 蜜桃视频在线观看一区| av电影一区二区| 精品国精品自拍自在线| 亚洲va天堂va国产va久| 成人黄色a**站在线观看| 精品久久一二三区| 亚洲成人www| 在线中文字幕一区| 国产精品少妇自拍| 韩国午夜理伦三级不卡影院| 91麻豆精品国产91| 一二三区精品视频| 91老司机福利 在线| 国产精品久久久一本精品| 激情丁香综合五月| 欧美高清视频在线高清观看mv色露露十八 | 亚洲精品高清在线观看| 成人高清免费观看| 国产精品视频yy9299一区| 国产乱码精品1区2区3区| 666欧美在线视频| 亚洲午夜电影网| 欧美视频完全免费看| 一区二区三区中文字幕| 色综合久久久久| 亚洲欧美色图小说| 色婷婷综合在线| 一区二区三区精品视频| 91片在线免费观看| 亚洲狠狠丁香婷婷综合久久久| 97久久超碰精品国产| 最新国产精品久久精品| 成人av集中营| 亚洲精品亚洲人成人网| 色综合色狠狠综合色| 一区二区三区在线视频观看58| 欧洲精品一区二区| 亚洲大片一区二区三区| 欧美日韩国产美女| 麻豆freexxxx性91精品| 国产亚洲欧美中文| 91麻豆精品在线观看| 一区二区免费看| 制服.丝袜.亚洲.中文.综合| 蜜桃久久av一区| 国产日韩欧美精品在线| 97久久超碰精品国产| 一区二区三区在线视频免费| 欧美一区二区日韩一区二区| 国内成+人亚洲+欧美+综合在线| 亚洲国产精品黑人久久久| 日韩一区二区三区四区五区六区| 婷婷中文字幕一区三区| 久久视频一区二区| 成人福利视频在线看| 亚洲一区二区三区三| 精品国产露脸精彩对白| 不卡的av电影在线观看| 亚洲第一搞黄网站| 久久久久久**毛片大全| 色爱区综合激月婷婷| 免费高清视频精品| 亚洲人吸女人奶水| 欧美mv日韩mv国产网站| 91在线云播放| 激情综合网激情| 亚洲精品中文在线观看| 精品对白一区国产伦| 在线亚洲精品福利网址导航| 精品在线你懂的| 亚洲色图欧美激情| 精品国产免费一区二区三区四区| 99久久精品国产麻豆演员表| 美国三级日本三级久久99| 亚洲欧洲av在线| 精品久久久久久久久久久久久久久| 99综合影院在线| 看电影不卡的网站| 亚洲曰韩产成在线| 国产精品国产三级国产aⅴ中文| 欧美日韩美少妇| 91麻豆福利精品推荐| 国产精品996| 蜜臀av在线播放一区二区三区| 综合电影一区二区三区| 久久香蕉国产线看观看99| 欧美色视频在线观看| 成人午夜视频在线| 激情综合五月天| 日本成人在线不卡视频| 亚洲在线视频网站| 专区另类欧美日韩| 国产亚洲短视频| 日韩免费看的电影| 制服丝袜中文字幕一区| av亚洲精华国产精华精华| 国产精品自拍av| 久久精品999| 免费的成人av| 首页国产欧美久久| 亚洲精品成人天堂一二三| 国产精品三级av| 国产情人综合久久777777| 精品国产免费久久| 日韩欧美国产一区二区在线播放| 91精品国产综合久久久蜜臀图片| 日本精品免费观看高清观看| 99久久99久久精品国产片果冻 | 日韩激情一二三区| 五月天国产精品| 无码av免费一区二区三区试看| 尤物视频一区二区| 亚洲一区在线观看免费 | 在线日韩国产精品| 欧美性大战xxxxx久久久| 欧美中文字幕亚洲一区二区va在线| 99久久精品费精品国产一区二区| 91在线你懂得| 在线视频国产一区| 91精品国产aⅴ一区二区| 日韩欧美中文字幕公布| 久久久青草青青国产亚洲免观| 中文字幕欧美激情一区| 中文字幕日本乱码精品影院| 亚洲免费av网站| 亚洲va欧美va人人爽| 日韩vs国产vs欧美| 国产一区二区调教| a级精品国产片在线观看| 91蜜桃免费观看视频| 欧美午夜在线观看| 日韩一区二区三区视频| 久久久777精品电影网影网 | 色乱码一区二区三区88| 欧美日韩中文字幕精品| 欧美大胆人体bbbb| 中文字幕在线一区免费| 亚洲国产乱码最新视频| 精品一区二区综合| 99国产精品久久久久| 欧美精品欧美精品系列| 久久看人人爽人人| 亚洲国产另类av| 国产91丝袜在线播放| 欧美亚洲日本国产| 亚洲国产精品精华液ab| 日韩av中文在线观看| 波多野结衣精品在线| 4438x亚洲最大成人网| 国产精品美女久久久久久久| 丝袜脚交一区二区| 成人h动漫精品| 欧美一区三区二区| 国产精品超碰97尤物18| 国内精品视频一区二区三区八戒| 91一区一区三区| 久久香蕉国产线看观看99| 亚洲成年人网站在线观看| 国产精品888| 91麻豆精品国产| 一区二区三区成人| 成人午夜视频网站| 精品久久久网站| 香港成人在线视频| 国产盗摄女厕一区二区三区| 91精品婷婷国产综合久久性色| 中文字幕永久在线不卡| 精品在线视频一区| 欧美日韩aaaaaa| 一区二区三区中文免费| 国产成人在线视频播放| 欧美精品一区男女天堂| 免费观看91视频大全| 欧美精品少妇一区二区三区| 亚洲色图视频网站| 国产成人在线电影| 精品国产乱码久久久久久牛牛| 亚洲成a人片在线不卡一二三区| jlzzjlzz国产精品久久| 久久亚洲综合色| 精品亚洲porn| 日韩三级电影网址| 香蕉成人啪国产精品视频综合网| 91免费看`日韩一区二区| 国产精品卡一卡二| 粉嫩13p一区二区三区| 久久久99精品免费观看不卡| 国产老妇另类xxxxx| 久久久三级国产网站| 国产精品99久久久| 欧美韩国日本一区|