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

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

?? mega16軟件模擬2個串口程序.c

?? 基于ICCAVR平臺的
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*****************************軟件模擬串口調(diào)試程序*****************************/
//編譯環(huán)境ICCAVR ,MCU:MEGA16@8MHZ                                             
//232端口:PD0--RXD  PD1--TXD     485端口:PD2--RXD  PD3--TXD                   
//模擬串口實現(xiàn)的方法:                                                          
//方法1、使用外部中斷接收+函數(shù)發(fā)送/定時發(fā)送。這個方法適合高波特率通信。         
//方法2、使用定時器定時查詢。適合較低的波特率通信,容易實現(xiàn)全雙工通信。         
//                                                                              
//以下是用方法2實現(xiàn)的,要非常注意的地方是:                                     
//1、優(yōu)先級控制宏,實現(xiàn)串口模擬定時器中斷優(yōu)先級最高,                           
//   防止定時漂移,實現(xiàn)100%正確率。                                             
//2、定時器的精確定時,防止采樣漂移。TIME2中斷TCNT2的取值范圍為:0xd0--0xd4;    
//3、使用宏方便移植                                                             
//                                                                              
//修改:李科  2006/08/12                                                        
//Target : M16                                                                  
//Crystal: 8.0000Mhz    波特率:2400BIT/S                                        

#include<iom16v.h> 
#include<macros.h> 

#define U8    unsigned char   //宏定義char型變量
#define bool  unsigned char   //宏定義bool型變量
#define U16   unsigned int    //宏定義int型變量

/*+++++++++++++++++++++++++++++++++=宏定義=+++++++++++++++++++++++++++++++++++*/ 
/* 宏中斷優(yōu)先級的使用:                                                         
   1、要保存你所使用到的所有中斷的使能位,然后關(guān)閉它們,僅開模擬串口定時器中斷。
   恢復(fù)時,只需恢復(fù)所有中斷的使能位即可。                                       
   2、進(jìn)入其它除了模擬串口定時器中斷時,                                        
      先調(diào)用 IRQ_IP_OPEN() ;然后是你在該中斷處理的代碼  ,                     
      退出該中斷是調(diào)用 IRQ_IP_CLOSE() ;然后退出該中斷。                      */ 

// 中斷優(yōu)先級控制中要保持的變量(volatile表示之后程序中對此變量的賦值肯定執(zhí)行)   
volatile U8 saveUCSRB; // 串口中斷  
volatile U8 saveGICR;  // 外部中斷  
volatile U8 saveTIMSK; // 定時器中斷

// 中斷優(yōu)先級開啟宏定義      屏蔽其它非高優(yōu)先級中斷                 屏蔽INT0-2中斷       屏蔽UART0中斷 */
#define IRQ_IP_OPEN() {saveGICR=GICR;saveTIMSK=TIMSK;saveUCSRB=UCSRB;GICR=0x00;TIMSK=0x40;UCSRB&=0x1F;SEI();}   
		                                                         //屏蔽TIME0-1中斷只開TIMER2中斷模擬串口 
															
																 
// 中斷優(yōu)先級恢復(fù)宏定義  恢復(fù)其它非高優(yōu)先級中斷           恢復(fù)UART0接收、空中斷 
#define IRQ_IP_CLOSE() {CLI();GICR=saveGICR;TIMSK=saveTIMSK;UCSRB=saveUCSRB;} 
                           //恢復(fù)INT0.2中斷 恢復(fù)TIMER0.2中斷                    
							                   
//管腳宏定義 
#define GET_VM232_RX()    (PIND & (1<<PD0))      //端口D的PD0模擬接收 讀PD0值
#define SET_VM232_TX()    {PORTD |= (1<<PD1);}   //端口D的PD1發(fā)送1 
#define CLR_VM232_TX()    {PORTD &= ~(1<<PD1);}  //端口D的PD1發(fā)送0 

#define GET_VM485_RX()    (PIND & (1<<PD2))      //端口D的PD2模擬接收 讀PD2值
#define SET_VM485_TX()    {PORTD |= (1<<PD3);}   //端口D的PD3發(fā)送1 
#define CLR_VM485_TX()    {PORTD &= ~(1<<PD3);}  //端口D的PD3發(fā)送0 

/*++++++++++++++++++++++=系統(tǒng)52US定時器,用于模擬2個串口=+++++++++++++++++++++*/ 
/* 模擬串口的狀態(tài)碼;enum表示枚舉:枚舉是一個被命名的整型常數(shù)的集合             
枚舉是一個被命名的整型常數(shù)的集合, 枚舉在日常生活中很常見。                      
例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY,   
就是一個枚舉。 枚舉的說明與結(jié)構(gòu)和聯(lián)合相似,                                      
其形式為: enum 枚舉名{ 標(biāo)識符[=整型常數(shù)], 標(biāo)識符[=整型常數(shù)], ...} 枚舉變量;     
如果枚舉沒有初始化, 即省掉"=整型常數(shù)"時, 則從第一個標(biāo)識符開始,                  
順次賦給標(biāo)識符0, 1, 2, ...。但當(dāng)枚舉中的某個成員賦值后,                         
其后的成員按依次 加1的規(guī)則確定其值。 例如下列枚舉說明后,                        
x1, x2, x3, x4的值分別為0, 1, 2, 3。 enum string{x1, x2, x3, x4}x;              
當(dāng)定義改變成: enum string { x1, x2=0, x3=50, x4, }x; 則x1=0, x2=0, x3=50, x4=51 
注意: 1. 枚舉中每個成員(標(biāo)識符)結(jié)束符是",", 不是";", 最后一個成員可省略 ","。   
2. 初始化時可以賦負(fù)數(shù), 以后的標(biāo)識符仍依次加1。                                  
3. 枚舉變量只能取枚舉說明結(jié)構(gòu)中的某個標(biāo)識符常量。                               
例如: enum string {x1=5,x2,x3,x4,}; enum strig x=x3; 此時,枚舉變量x實際上是7  */

enum {START,SDATA,STOP}; 

U8 inRS232 = 0;   //模擬232的數(shù)據(jù)接收輸入指針  
U8 outRS232 = 0;  //模擬232的數(shù)據(jù)接收取出指針  
U8 vmRS232Buf[20];//模擬232的數(shù)據(jù)接收緩沖區(qū)    

U8 inRS485 = 0;   //模擬485的數(shù)據(jù)接收輸入指針  
U8 outRS485 = 0;  //模擬485的數(shù)據(jù)接收取出指針  
U8 vmRS485Buf[20];//模擬485的數(shù)據(jù)接收緩沖區(qū)    

void vm_rs232_rx(U8 dataBit) // 模擬232接收函數(shù)
{ 
    static U8 status = START;//static為本地全局變量
    static U8 cnt = 0; 
    static U8 number = 0; 
    static U8 rData; 
    switch(status) 
    { 
        case START: 
            if(dataBit) 
            { 
                cnt = 0; 
            } 
            else 
            { 
                if(++cnt > 2) 
                {                     
                    cnt = 0; 
                    number = 0; 
                    status = SDATA; 
                } 
            } 
            break; 
        case SDATA: 
            if(++cnt > 3) 
            { 
                cnt = 0; 
                if(dataBit) 
                { 
                    rData |= 0x80; 
                } 
                else 
                { 
                    rData &= 0x7F; 
                } 
                 
                if(++number < 8) 
                { 
                    rData >>= 1; 
                } 
                else 
                { 
                    number = 0; 
                    status = STOP; 
                } 
            } 
            break; 
        case STOP: 
            if(++cnt > 3) 
            { 
                cnt = 0; 
                if(dataBit) 
                { 
                    vmRS232Buf[inRS232++] = rData; 
                    if(inRS232 >= 20) // 環(huán)型緩沖區(qū) 
                    { 
                        inRS232 = 0; 
                    } 
                    // 在這模擬的接收中斷,不太實用 
                } 
                status = START; 
            } 
            break; 
        default: 
            cnt = 0; 
            status = START; 
            break; 
    } 
} 

void vm_rs485_rx(U8 dataBit) // 模擬485接收函數(shù) 
{ 
    static U8 status = START; 
    static U8 cnt = 0; 
    static U8 number = 0; 
    static U8 rData; 
    switch(status) 
    { 
        case START: 
            if(dataBit) 
            { 
                cnt = 0; 
            } 
            else 
            { 
                if(++cnt > 2) 
                {                     
                    cnt = 0; 
                    number = 0; 
                    status = SDATA; 
                } 
            } 
            break; 
        case SDATA: 
            if(++cnt > 3) 
            { 
                cnt = 0; 
                if(dataBit) 
                { 
                    rData |= 0x80; 
                } 
                else 
                { 
                    rData &= 0x7F; 
                } 
                 
                if(++number < 8) 
                { 
                    rData >>= 1; 
                } 
                else 
                { 
                    number = 0; 
                    status = STOP; 
                } 
            } 
            break; 
        case STOP: 
            if(++cnt > 3) 
            { 
                cnt = 0; 
                if(dataBit) 
                { 
                    vmRS485Buf[inRS485++] = rData; 
                    if(inRS485 >= 20) // 環(huán)型緩沖區(qū) 
                    { 
                        inRS485 = 0; 
                    } 
                    // 在這模擬的接收中斷,不太實用 
                } 
                status = START; 
            } 
            break; 
        default: 
            cnt = 0; 
            status = START; 
            break; 
    } 
} 

bool flgVmRs232tx = 0; //模擬232是否有數(shù)據(jù)要發(fā)送的標(biāo)志,1有數(shù)據(jù)要發(fā)送,完成清零 
U8 vmRS232SBUF;        //模擬232要發(fā)送的一字節(jié)緩沖                              
bool flgVmRs485tx = 0; //模擬485是否有數(shù)據(jù)要發(fā)送的標(biāo)志,1有數(shù)據(jù)要發(fā)送,完成清零 
U8 vmRS485SBUF;        //模擬485要發(fā)送的一字節(jié)緩沖                              

void vm_rs232_tx(void) //模擬232發(fā)送函數(shù)
{ 
    static U8 status = START; 
    static U8 cnt = 0; 
    static U8 number = 0; 
    if(flgVmRs232tx) 
    { 
        switch(status) 
        { 
            case START: 
                CLR_VM232_TX(); 
                if(++cnt > 3) 
                { 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人网在线免费视频| 国产女主播视频一区二区| 久久精品亚洲国产奇米99| 日韩理论片中文av| 精品无码三级在线观看视频| 色婷婷av一区二区三区软件| 欧美成人精品福利| 亚洲一区二区精品3399| 成人免费视频免费观看| 日韩三级在线免费观看| 一区二区成人在线观看| 成人一区二区三区在线观看| 日韩精品一区二区三区四区| 天天色图综合网| 欧美视频三区在线播放| 综合久久国产九一剧情麻豆| 国产成人av一区二区三区在线 | 欧美激情在线一区二区| 蜜桃精品视频在线观看| 欧美日韩一区中文字幕| 亚洲人成小说网站色在线| www.亚洲色图.com| 国产精品欧美综合在线| 国产精品一区二区在线观看网站| 日韩欧美国产系列| 日韩中文字幕亚洲一区二区va在线 | 成年人午夜久久久| 国产亚洲精品精华液| 国产一区二区在线观看视频| 欧美一级免费大片| 日韩电影在线观看网站| 欧美在线视频日韩| 亚洲mv大片欧洲mv大片精品| 欧洲一区二区三区免费视频| 亚洲欧美日韩中文字幕一区二区三区| 成人永久看片免费视频天堂| 中文字幕在线视频一区| 91亚洲精品久久久蜜桃| 亚洲精品日产精品乱码不卡| 欧美午夜宅男影院| 无码av免费一区二区三区试看 | 福利电影一区二区三区| 久久久久久免费毛片精品| 粉嫩13p一区二区三区| 国产精品网曝门| 色婷婷av一区二区三区软件| 亚洲国产中文字幕| 日韩视频免费直播| 国产一区在线观看视频| 中文字幕国产一区| 91视频.com| 午夜精品成人在线视频| 日韩欧美一区二区久久婷婷| 国产精品一卡二| 亚洲老司机在线| 欧美日韩国产综合视频在线观看| 人人精品人人爱| 亚洲一本大道在线| 欧美一三区三区四区免费在线看 | 蜜桃视频在线观看一区| 久久久久国产精品厨房| 91日韩一区二区三区| 日本欧美一区二区在线观看| 久久精品视频一区| 欧美视频一区在线| 国产精品一二一区| 性做久久久久久免费观看| 久久奇米777| 在线精品国精品国产尤物884a| 美洲天堂一区二卡三卡四卡视频| 国产日韩欧美a| 欧美日韩不卡一区二区| 成人一级视频在线观看| 免费久久99精品国产| 国产精品另类一区| 欧美精品日韩精品| 99久久精品国产一区二区三区| 日韩电影一区二区三区四区| 国产精品美女一区二区| 欧美一级高清片| 色婷婷综合久久久久中文一区二区 | 成人激情免费电影网址| 亚洲国产一区二区在线播放| 国产日韩欧美精品电影三级在线| 欧美三级电影在线观看| 风间由美一区二区三区在线观看 | 亚洲男人的天堂一区二区| 精品国产免费视频| 欧美日高清视频| 99国产精品久久久久久久久久久 | 久久精品国产亚洲5555| 一级中文字幕一区二区| 中文在线一区二区| 久久先锋影音av| 91麻豆精品国产91久久久久| 色婷婷av一区| 91丨国产丨九色丨pron| 成人免费av资源| 成人亚洲精品久久久久软件| 国内久久婷婷综合| 免费在线看成人av| 日韩电影在线观看电影| 调教+趴+乳夹+国产+精品| 亚洲午夜久久久久久久久电影院| 国产精品国产自产拍在线| 久久久777精品电影网影网 | 亚洲欧美另类小说视频| 欧美国产一区在线| 国产亚洲欧美一区在线观看| 精品国产电影一区二区| 精品日韩99亚洲| 欧美成人精品二区三区99精品| 欧美精品视频www在线观看| 欧美日韩国产中文| 欧美疯狂做受xxxx富婆| 欧美精品日日鲁夜夜添| 91精品国产乱码久久蜜臀| 欧美一区二区三区四区五区| 日韩亚洲欧美成人一区| 欧美大片顶级少妇| 国产亚洲自拍一区| 国产欧美中文在线| 中文字幕五月欧美| 亚洲视频一区在线| 亚洲综合色自拍一区| 日韩国产高清在线| 毛片av一区二区三区| 国产制服丝袜一区| 懂色av中文一区二区三区| 不卡的av电影| 欧美视频在线一区| 日韩美女在线视频| 国产日韩av一区| 亚洲伊人色欲综合网| 美女在线视频一区| 国产99久久久精品| 欧美伊人久久大香线蕉综合69 | 久久激五月天综合精品| 国产999精品久久| 91久久精品一区二区三区| 欧美日韩国产精品成人| 精品国产sm最大网站免费看| 亚洲国产成人午夜在线一区| 艳妇臀荡乳欲伦亚洲一区| 日本少妇一区二区| 欧美亚洲高清一区二区三区不卡| 欧美日韩一区二区三区视频 | 综合婷婷亚洲小说| 青青草原综合久久大伊人精品| 美腿丝袜在线亚洲一区| 91在线你懂得| 欧美精品一区二区三区蜜桃| 综合电影一区二区三区 | 日本成人在线不卡视频| 丁香啪啪综合成人亚洲小说| 欧美人动与zoxxxx乱| 亚洲国产精品ⅴa在线观看| 亚洲一区二区三区视频在线| 国产一区二区不卡老阿姨| 色爱区综合激月婷婷| 精品国产精品网麻豆系列| 一个色在线综合| 国产成人精品www牛牛影视| 91精品国产入口| 亚洲精品高清视频在线观看| 国产一区二区精品久久91| 欧美日韩精品一区二区在线播放| 欧美国产精品中文字幕| 久久99精品久久久久婷婷| 在线亚洲欧美专区二区| 国产精品日产欧美久久久久| 久久成人羞羞网站| 欧美又粗又大又爽| 一区在线播放视频| 丁香激情综合国产| 欧美成人女星排行榜| 午夜电影久久久| 欧美自拍偷拍一区| 亚洲欧美国产高清| 成人高清视频免费观看| 国产婷婷一区二区| 九九**精品视频免费播放| 欧美影院精品一区| 依依成人精品视频| 91在线一区二区| 1区2区3区精品视频| 盗摄精品av一区二区三区| 久久精品视频一区二区| 国产一区二区三区黄视频| 日韩女优电影在线观看| 美女脱光内衣内裤视频久久影院| 欧美日韩亚洲综合| 石原莉奈在线亚洲二区| 欧美亚洲高清一区| 亚洲国产精品人人做人人爽| 欧美综合色免费| 亚洲成人精品一区| 91精品国产综合久久久久| 热久久免费视频| 日韩一区二区免费在线电影|