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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? softserio.c

?? C51單片機(jī)一個(gè)小項(xiàng)目源程序:包含液晶12232驅(qū)動(dòng),AD7705驅(qū)動(dòng),按鍵掃描及單片機(jī)內(nèi)部EEPROM的驅(qū)動(dòng),是一個(gè)比較值得參考的源程序
?? C
字號(hào):
/*************************************************************************
用定時(shí)器 T0 或 T1 模擬串行口程序。
最高波特率(12 clock):
    本程序收、發(fā)波特率相同。

    11.059MHz -- 最高波特率 收: 9600,  最低波特率:300   
    30.000MHz -- 最高波特率 收: 28800  最低波特率:300   
    40.000MHz -- 最高波特率 收: 38400  最低波特率:300   
       ...
使用說明:
    1. 本程序使用一個(gè)定時(shí)器和任意 2 個(gè) I/O 口模擬一個(gè)串行口。
    2. 1位起始位,8位數(shù)據(jù)位,1位停止位。發(fā)數(shù)據(jù)位時(shí)先發(fā)低位。
    3. 支持半雙工通訊。收、發(fā)波特率相同。
    4. 應(yīng)把定時(shí)器中斷優(yōu)先級(jí)設(shè)置為最高級(jí)。
    5. 本程序每接收一個(gè)字節(jié)后就把它放到一個(gè)隊(duì)列緩沖區(qū)中(也可使用環(huán)行緩沖區(qū)),
       待緩沖區(qū)滿后,將緩沖區(qū)中的內(nèi)容原樣發(fā)回。這是為了測試多字節(jié)連續(xù)收發(fā)的
       能力和簡化程序。實(shí)際應(yīng)用中應(yīng)防止緩沖區(qū)溢出。  
    6. 由接收轉(zhuǎn)換到發(fā)送時(shí)要先調(diào)用  soft_send_enable ();
       由發(fā)送轉(zhuǎn)換到接收時(shí)要先調(diào)用  soft_receive_enable ()。
    7. 發(fā)送最后一個(gè)字節(jié)后如果要立刻轉(zhuǎn)為接收,必須等待最后一個(gè)字節(jié)后發(fā)送完畢
           while ( rs_f_TI == 0)  ;  // 等待最后一個(gè)字節(jié)發(fā)送完畢
**************************************************************************
編程說明:
----------------
發(fā)送:
    由接收轉(zhuǎn)換到發(fā)送時(shí)要先調(diào)用 soft_send_enable (), 它為發(fā)送做初始化的工作。
以后就可以調(diào)用 rs_send_byte () 啟動(dòng)發(fā)送一個(gè)字節(jié)的過程。
    發(fā)送口平時(shí)為高電平,rs_send_byte ()函數(shù)使發(fā)送口變?yōu)榈碗娖介_始發(fā)送起始位; 
同時(shí)設(shè)置和啟動(dòng)定時(shí)器,為發(fā)送數(shù)據(jù)位在預(yù)定的時(shí)刻產(chǎn)生定時(shí)器中斷。發(fā)送數(shù)據(jù)位和
停止位都在定時(shí)器的中斷服務(wù)程序中進(jìn)行。
    中斷服務(wù)程序中處理 4 種情況:發(fā)送數(shù)據(jù)位、發(fā)送停止位、發(fā)送完畢、處理錯(cuò)誤。
----------------
接收:
    由發(fā)送轉(zhuǎn)換到接收時(shí)要先調(diào)用 soft_receive_enable (), 它為接收做初始化的工
作。定時(shí)器以 3 到 4 倍波特率的頻率產(chǎn)生中斷(參見 rs_TEST0 的定義)檢測 PC
機(jī)發(fā)送的起始位。一旦檢測到起始位,立刻把定時(shí)器產(chǎn)生中斷的頻率調(diào)整到與波特率
相同,準(zhǔn)備在下一個(gè)定時(shí)器中斷中接收第 1 個(gè)數(shù)據(jù)位。
    中斷服務(wù)程序中處理以下情況:
    1. 收到的是 PC 機(jī)發(fā)送的起始位: 調(diào)整定時(shí)器產(chǎn)生中斷的頻率與波特率相同。
    2. 收到第 8 位數(shù)據(jù)位: 存儲(chǔ)接收到的字節(jié)。
    3. 收到第 1--7 位數(shù)據(jù)位: 存儲(chǔ)到收、發(fā)移位暫存器。
    4. 收到停止位: 調(diào)用 soft_receive_enable(),檢測 PC 機(jī)發(fā)出的下一個(gè)起始位。 
    5. 處理出錯(cuò)的情況。
**************************************************************************/

#include "mylib.h"
sfr16	DPTR = 0x82;

#define	YES   1
#define	NO    0

//定義使用哪個(gè)定時(shí)器, 只可定義一個(gè)   
//#define TIMER_0
#define TIMER_1

//定義串口收、發(fā)送管腳。  
sbit rs_TXD = P2^1;
sbit rs_RXD = P2^0;

//根據(jù)定時(shí)器確定參數(shù)  
#ifdef TIMER_0
    #define TMOD_AND_WORD   0xF0;
    #define TMOD_TIME_MODE  0x01;
    #define TMOD_COUNT_MODE 0x05;      //設(shè)置計(jì)數(shù)模式位  
    sbit  TCON_ENABLE_TIMER = TCON^4;
    sbit  TCON_TFx = TCON^5;           //中斷標(biāo)志位  
    sbit  IE_ETx = IE^1;               //中斷允許位為 ET0  
    sbit  IP_PTx = IP^1;               //中斷優(yōu)先級(jí)  

    sfr rs_timerL = 0x8A;              //TL0 
    sfr rs_timerH = 0x8C;              //TH0 
#endif

#ifdef TIMER_1
    #define TMOD_AND_WORD   0x0F;
    #define TMOD_TIME_MODE  0x10;
    #define TMOD_COUNT_MODE 0x50;      //設(shè)置計(jì)數(shù)模式位  
    sbit  TCON_ENABLE_TIMER = TCON^6;  //
    sbit  TCON_TFx = TCON^7;           //中斷標(biāo)志位  
    sbit  IE_ETx = IE^3;               //中斷允許位為 ET1   
    sbit  IP_PTx = IP^4;               //中斷優(yōu)先級(jí)  

    sfr rs_timerL = 0x8B;              //TL1
    sfr rs_timerH = 0x8D;              //TH1  
#endif

INT8U  bdata rs_BUF;                  //串行收、發(fā)時(shí)用的移位暫存器。   
sbit	rs_BUF_bit7 = rs_BUF^7;        //移位暫存器的最高位。 
INT8U   rs_shift_count;                //移位計(jì)數(shù)器。  

INT8U	bdata rsFlags;
sbit	rs_f_TI        = rsFlags^0;    //0:正在發(fā)送; 1: 一個(gè)字符完畢  
sbit	rs_f_RI_enable	= rsFlags^1;   //0:禁止接收; 1:允許接收  
sbit	rs_f_TI_enable	= rsFlags^2;   //0:禁止發(fā)送; 1:允許發(fā)送  

//選擇以下一個(gè)晶體頻率
//#define Fosc 6000000                 //6MHz 
#define Fosc 11059200                  //11.059MHz 
//#define Fosc 12000000
//#define Fosc 18432000
//#define Fosc 20000000
//#define Fosc 24000000
//#define Fosc 30000000
//#define Fosc 40000000

//選擇以下一個(gè)波特率:
//#efine Baud 300                      //11.059MHz時(shí),baud 最低為 300   
//#define Baud 1200
//#define Baud 2400
//#define Baud 4800
#define Baud 9600
//#define Baud 14400
//#define Baud 19200
//#define Baud 28800
//#define Baud 38400
//#define Baud 57600

//收、發(fā)一位所需定時(shí)器計(jì)數(shù)   
#define rs_FULL_BIT0 ((Fosc/12) / Baud)
#define rs_FULL_BIT (65536 - rs_FULL_BIT0)
#define rs_FULL_BIT_H rs_FULL_BIT >> 8        //收、發(fā)一位所需定時(shí)器計(jì)數(shù)高位   
#define rs_FULL_BIT_L (rs_FULL_BIT & 0x00FF)  //收、發(fā)一位所需定時(shí)器計(jì)數(shù)低位   

//檢測起始位的時(shí)間間隔所需定時(shí)器計(jì)數(shù)    
#define rs_TEST0 rs_FULL_BIT0 / 4             //波特率較低時(shí)可以除以 3 或除以 2    
#define rs_TEST ((~rs_TEST0))
#define rs_TEST_H rs_TEST >> 8                //高位  
#define rs_TEST_L rs_TEST & 0x00FF            //低位  

//發(fā)送起始位所需定時(shí)器總計(jì)數(shù)   
#define rs_START_BIT 0xFFFF - (Fosc/12/Baud) + 0x28
#define rs_START_BIT_H rs_START_BIT >> 8      //發(fā)送起始位所需定時(shí)器計(jì)數(shù)高位    
#define rs_START_BIT_L rs_START_BIT & 0x00FF  //發(fā)送起始位所需定時(shí)器計(jì)數(shù)低位   

#define rs_RECEIVE_MAX   128                  //最大接收長度  
INT8U	 rs232buffer[rs_RECEIVE_MAX];      //收、發(fā)緩沖區(qū)
INT16U	ReceivePoint;	                      //接收數(shù)據(jù)存儲(chǔ)指針  

void soft_rs232_interrupt( void );

#ifdef TIMER_0
    void timer0 (void) interrupt 1 using 3
    {
        if (rs_RXD == 0 | rs_shift_count > 0)
        { soft_rs232_interrupt(); }
        else
        {
            rs_timerH = rs_TEST_H;
            rs_timerL = rs_TEST_L;
        }
    }
#endif

#ifdef TIMER_1
    void timer1 (void) interrupt 3 using 3
    {
        if (rs_RXD == 0 | rs_shift_count > 0)
        { soft_rs232_interrupt(); }
        else
        {
            rs_timerH = rs_TEST_H;
            rs_timerL = rs_TEST_L;
        }
    }
#endif
/***************************************/

void soft_rs232_init (void)            //串口初始化  
{
    TCON_ENABLE_TIMER = 0;             //停止定時(shí)器  
    TMOD &= TMOD_AND_WORD;
    TMOD |= TMOD_TIME_MODE;
    rs_RXD = 1;                        //接收腳置成高電平  
    rs_TXD = 1;                        //發(fā)射腳置成高電平  
    IP_PTx = 1;                        //置中斷優(yōu)先級(jí)為高  
    IE_ETx = 1;                        //允許定時(shí)器中斷    
}

void soft_receive_init()               //監(jiān)測起始位  
{
    TCON_ENABLE_TIMER = 0;             //停止定時(shí)器  
    rs_timerH = rs_TEST_H;
    rs_timerL = rs_TEST_L;
    rs_shift_count = 0;
    TCON_ENABLE_TIMER = 1;             //啟動(dòng)定時(shí)器  
}


void soft_receive_enable()             //允許接收  
{
    rs_f_RI_enable = 1;                //允許接收  
    rs_f_TI_enable = 0;                //禁止發(fā)送   
    soft_receive_init();               //監(jiān)測起始位, RXD 下降沿觸發(fā)接收字節(jié)過程.     
}

void soft_send_enable (void)	       //允許發(fā)送  
{
    TCON_ENABLE_TIMER = 0;             //停止定時(shí)器  
    rs_f_TI_enable = 1;                //允許發(fā)送  
    rs_f_RI_enable = 0;                //禁止接收  

    rs_shift_count = 0;                //清移位計(jì)數(shù)器  
    rs_f_TI   = 1;                     //發(fā)送一個(gè)字符完畢標(biāo)志  
    TCON_ENABLE_TIMER = 1;             //啟動(dòng)定時(shí)器
}

void soft_rs232_interrupt( void )
{
    /************************ 接收 ****************************/
    if (rs_f_RI_enable == 1)
    {
        if (rs_shift_count == 0)        //移位計(jì)數(shù)器==0, 表示檢測到起始位的起點(diǎn)   
        {
            if ( rs_RXD == 1 )
            {
                soft_receive_enable (); //起始位錯(cuò), 從新開始   
            }
            else
            {
                //下次中斷在數(shù)據(jù)位或停止位中的某時(shí)刻發(fā)生    
                rs_timerL += rs_FULL_BIT_L + 0x10; 
                rs_timerH = rs_FULL_BIT_H;
                rs_shift_count++;              
                rs_BUF = 0;             //清移位緩沖變量   
            }
        }
        else
        {
            rs_timerL += rs_FULL_BIT_L; //下次中斷在數(shù)據(jù)位或停止位中發(fā)生    
            rs_timerH = rs_FULL_BIT_H;
                                       
            rs_shift_count++;           //2--9:數(shù)據(jù)位 10:停止位 
                                       
            if ( rs_shift_count == 9)
            {
                rs_BUF = rs_BUF >> 1;   //接收第8位   
                rs_BUF_bit7 = rs_RXD;
                if( ReceivePoint < rs_RECEIVE_MAX)
                {                       //保存收到的字節(jié)    
                    rs232buffer[ReceivePoint++] = rs_BUF;
                }
                else
                {
                    rs_f_RI_enable = 0; //緩沖區(qū)滿, 禁止接收   
                }
            }
            else
            {
                if (rs_shift_count < 9 ) //收到的是數(shù)據(jù)位 1 -- 7  
                {
                    rs_BUF = rs_BUF >> 1;
                    rs_BUF_bit7 = rs_RXD;
                }
                else
                {   //收到停止位,繼續(xù)檢測 PC 機(jī)發(fā)出的下一個(gè)起始位    
                    soft_receive_init(); 
                }
            }
        }
        TCON_TFx = 0;                  //清定時(shí)器中斷標(biāo)志   
    }
    else
    {
        /************************ 發(fā)送 ****************************/  
        if (rs_f_TI_enable == 1)
        {
            rs_timerL += rs_FULL_BIT_L;//下次中斷在數(shù)據(jù)位的末尾時(shí)刻   
            rs_timerH = rs_FULL_BIT_H;

            rs_shift_count--;          //0:停止位末尾時(shí)刻到  
                                       //1:發(fā)送停止位  
                                       //2--9:發(fā)送數(shù)據(jù)位  
            if (rs_shift_count > 9)    //錯(cuò)誤狀態(tài)  
            {
                rs_shift_count = 9;
                rs_BUF = 0xFF;
            }

            if (rs_shift_count > 1)    //2--9:發(fā)送數(shù)據(jù)位  
            {
                ACC = rs_BUF;
                ACC = ACC >> 1;
                rs_TXD = CY;
                rs_BUF = ACC;
            }
            else
            {
                if (rs_shift_count == 0) //0:停止位末尾時(shí)刻到  
                {
                    rs_TXD = 1;
                    rs_f_TI = 1;       //已發(fā)送完畢一個(gè)字節(jié)  
                }
                else
                {
                    rs_TXD = 1;        //1:發(fā)送停止位  
                }
            }
        }
    }
}

//由收轉(zhuǎn)到發(fā)時(shí),要先調(diào)用 soft_send_enable ()  
void rs_send_byte(INT8U SendByte)      //發(fā)送一個(gè)字節(jié)  
{
    while ( rs_f_TI == 0);             //等待發(fā)送完畢前一個(gè)字節(jié)  
    rs_TXD = 1;
    rs_timerL = rs_START_BIT_L;        //下次中斷在起始位的末尾時(shí)刻   
    rs_timerH = rs_START_BIT_H;
    rs_BUF = SendByte;
    rs_shift_count = 10;
    rs_TXD = 0;                        //發(fā)送起始位  
    rs_f_TI = 0;                       //清已發(fā)送完畢一個(gè)字節(jié)的標(biāo)志   
}

void initiate_MCU (void)               //系統(tǒng)初始化  
{
    soft_rs232_init();                 //串口初始化  
    EA = 1;                            //開中斷  
}

/*void main (void)
{
//首先發(fā)送 128 個(gè)字節(jié) 00H--7FH, 然后等待 PC 機(jī)發(fā)送的數(shù)據(jù)。當(dāng)收到 128
//個(gè)字節(jié)后,立刻將收到的 128 個(gè)數(shù)據(jù)回發(fā)送給 PC 機(jī),然后繼續(xù)等待下一個(gè)
//數(shù)據(jù)塊。
  
    INT8U i;
    initiate_MCU();                    //系統(tǒng)初始化  

    soft_send_enable ();               //允許發(fā)送,禁止接收  
    for (i=0; i < rs_RECEIVE_MAX; i++ )
    {
        rs_send_byte(i);
    }
    while ( rs_f_TI == 0)  ;           // 等待最后一個(gè)字節(jié)發(fā)送完畢   

    while(1)
    {
        soft_receive_enable ();        //啟動(dòng)并開始接收,禁止發(fā)送  
        while (ReceivePoint < rs_RECEIVE_MAX); // 等待接收緩沖區(qū)滿  

        soft_send_enable ();           //允許發(fā)送,禁止接收  
        for (i=0; i < rs_RECEIVE_MAX; i++ )
        {
            rs_send_byte(rs232buffer[i]);
        }
        while ( rs_f_TI == 0)  ;       //等待最后一個(gè)字節(jié)發(fā)送完畢
        ReceivePoint = 0;
    }
}  */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
最新高清无码专区| 国产经典欧美精品| 亚洲一区二区三区四区五区中文 | 91精品国模一区二区三区| 在线不卡一区二区| 国产亚洲欧洲一区高清在线观看| 中文字幕在线不卡| 久久精品国产在热久久| av在线一区二区三区| 欧美日韩国产综合一区二区| 欧美激情一区二区三区不卡| 亚洲精品高清在线观看| 黄一区二区三区| 欧美影院一区二区三区| 久久欧美一区二区| 五月婷婷久久综合| aaa亚洲精品| 亚洲国产欧美日韩另类综合 | 欧美精选在线播放| 久久99久久精品欧美| 99麻豆久久久国产精品免费优播| 中文字幕中文字幕中文字幕亚洲无线| 久久99国产精品免费网站| 国产亚洲欧美日韩在线一区| 91片黄在线观看| 久久精品免费在线观看| 成人黄色777网| 国产午夜精品久久久久久久| 99re视频精品| 中文字幕中文字幕中文字幕亚洲无线| 欧美中文字幕亚洲一区二区va在线| 国产亚洲美州欧州综合国| 91丝袜美腿高跟国产极品老师 | 久久久精品影视| 欧美亚洲综合一区| 国产九色sp调教91| 国产日韩欧美麻豆| 国产成人精品综合在线观看 | 美国毛片一区二区| 欧美高清激情brazzers| 国产成人精品免费看| 亚洲五码中文字幕| 久久久久久电影| 欧美男男青年gay1069videost| 国产电影精品久久禁18| 天天影视涩香欲综合网| 中文字幕欧美一区| 精品剧情在线观看| 久久不见久久见免费视频7| 一区二区三区四区av| 欧美日韩国产免费| 91在线一区二区| 国产在线精品一区二区三区不卡 | 欧美日韩第一区日日骚| 福利电影一区二区| 国产精品美女久久久久久| av中文字幕亚洲| 国产精品91一区二区| 日韩高清中文字幕一区| 日韩欧美亚洲另类制服综合在线| 蜜臀久久久久久久| 欧美sm极限捆绑bd| 欧美日韩激情一区二区三区| 色综合激情五月| 午夜av一区二区| 亚洲人成精品久久久久久| 91成人在线免费观看| 日韩一区精品字幕| 欧美白人最猛性xxxxx69交| 欧美在线|欧美| 在线观看日韩av先锋影音电影院| 99久久伊人网影院| 国产999精品久久久久久绿帽| 久久电影网站中文字幕| 美女免费视频一区二区| 日韩电影在线观看网站| 亚洲成精国产精品女| 2023国产一二三区日本精品2022| 成人激情视频网站| 国产精品一卡二| 国产精品77777竹菊影视小说| 精品一区精品二区高清| 国产精品自拍在线| 国产福利一区在线| 国产成人精品在线看| 丁香六月综合激情| 五月天激情综合网| 丝袜美腿亚洲色图| 99re成人精品视频| 国产传媒欧美日韩成人| 国产一区二区三区在线观看精品 | 精品视频一区二区不卡| 久久综合色鬼综合色| 欧美一级在线视频| 色视频成人在线观看免| 在线观看www91| 国产成人精品免费| 91色porny蝌蚪| 777奇米成人网| 欧美成人午夜电影| 欧美国产成人精品| 亚洲综合一二三区| 另类人妖一区二区av| 国产精品一区二区在线观看网站| 成人黄色网址在线观看| 欧美日韩亚洲国产综合| 国产不卡视频一区| 欧美日韩一级黄| 26uuu亚洲综合色| 中文字幕一区二区不卡| 图片区小说区国产精品视频| 自拍偷拍亚洲欧美日韩| 久久亚洲影视婷婷| 亚洲制服丝袜av| 亚洲三级在线观看| 美腿丝袜亚洲综合| av一二三不卡影片| a亚洲天堂av| 成人精品高清在线| 4438成人网| 成人欧美一区二区三区黑人麻豆| 国产午夜精品一区二区三区嫩草| 精品久久久久久综合日本欧美 | 国产成人免费高清| 蜜臀va亚洲va欧美va天堂 | 成人av中文字幕| 3atv一区二区三区| 日韩理论片在线| 激情综合网天天干| 日本福利一区二区| 99久久国产综合精品女不卡| 欧美电视剧免费观看| 亚洲日穴在线视频| 国产精品自产自拍| 欧美一区二区三区在线观看视频| 3atv在线一区二区三区| 精品国产乱码久久久久久影片| 日韩视频中午一区| 精品国产亚洲一区二区三区在线观看| 日韩欧美一区在线观看| 伊人性伊人情综合网| 成人一区二区视频| 欧美成人国产一区二区| 亚洲一区二区四区蜜桃| av不卡在线播放| 久久先锋影音av鲁色资源网| 中文字幕的久久| 亚洲国产精品人人做人人爽| 三级亚洲高清视频| 91电影在线观看| 欧美大片在线观看一区| 国产精品免费视频网站| 狠狠狠色丁香婷婷综合激情| 成a人片国产精品| 欧美午夜视频网站| 亚洲综合视频在线| 日韩不卡一区二区三区| 欧美麻豆精品久久久久久| 免费成人结看片| 午夜视频在线观看一区二区| 26uuuu精品一区二区| 久久久久久亚洲综合| 亚洲成人动漫一区| 亚洲成年人网站在线观看| 亚洲午夜精品在线| 亚洲bt欧美bt精品| 成人黄动漫网站免费app| 欧美一区二区网站| 一区二区三区在线免费| 亚洲永久免费av| 亚洲愉拍自拍另类高清精品| 午夜在线电影亚洲一区| 成人av影院在线| 欧美大度的电影原声| 亚洲动漫第一页| 精品一区二区三区欧美| 国产精品一级片| 91原创在线视频| 欧美国产日本韩| 国产乱子伦视频一区二区三区| 欧美色图免费看| 一区二区三区国产精华| 成人激情动漫在线观看| 亚洲精品在线观| 久久国产福利国产秒拍| 欧美日韩国产天堂| 亚洲成av人片在线| 国精产品一区一区三区mba桃花| 激情偷乱视频一区二区三区| 成人h动漫精品一区二| 在线观看www91| 久久天天做天天爱综合色| 人人爽香蕉精品| 日韩一区二区三区高清免费看看| 午夜在线成人av| 99re视频精品| 亚洲精品高清在线观看| 99麻豆久久久国产精品免费优播| 国产精品久久一卡二卡| 性做久久久久久免费观看|