在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式系統(tǒng)中串口通信幀的同步方法研究

            嵌入式系統(tǒng)中串口通信幀的同步方法研究

            作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏

            下面給出該方法在Keil C5l中的示例程序:

            #include“regx52.h”

            #define HEAD1 0x00

            #define HEAD2 0x01

            #define LEN 0x02

            #define TYPE 0x03

            #define DATA 0x04

            #define CHECK 0x05

            unsigned char g_DatRev[BUFLEN];//接收緩沖區(qū)

            unsigned char g_cmd;

            unsigned char g_RecOk;

            void main()

            {

            while(1)

            {

            if(g_RecOk)

            {

            g_RecOk=FALSE;

            switch(g_cmd)

            {//相應(yīng)處理程序

            case: ...

            break;

            case: ...

            break;

            ...

            default:

            }

            }

            }

            }

            void SerialComm() interrupt 4

            {

            static unsigned char RecState=HEAD1;//接收狀態(tài)

            static unsigned char len=0;//已接收的數(shù)據(jù)長(zhǎng)度

            static unsigned char CheckSum=0;//校驗(yàn)和

            static unsigned char Len_total=0;//包長(zhǎng)

            if(RI)

            {

            RI=0;

            swich(RecState)

            {

            case HEAD1:

            if(SBUF==0xAA)

            {

            RecState=HEAD2;

            }

            break;

            case HEAD2:

            if(SBUF==0x55)

            {

            RecState=LEN;

            }

            else if(SBUF==0xAA)

            {

            RecState=HEAD2;

            }

            break;

            case LEN:

            RecState=TYPE;

            Len_total=SBUF;

            CheckSum=0xAA^0x55;

            break;

            case TYPE:

            RecState=DATA;

            g_cmd=SBUF;

            CheckSum=CheckSum^SBUF;

            len=0;

            break;

            case DATA:

            g_DatRev[len]=SBUF;

            CheckSum=CheckSum^SBUF;

            len++;

            if(len>=Len_total)

            {

            RecState=CHECK;

            }

            break;

            case CHECK:

            if(CheckSum==SBUF)

            {

            g_RecOk=TRUE;

            }

            RecState=HEAD1;

            break;

            default:

            RecState=HEAD1;

            break;

            }

            }

            }

            由于采用了狀態(tài)機(jī)和消息機(jī)制的結(jié)構(gòu),上述設(shè)計(jì)思路快速有效地實(shí)現(xiàn)了串口通信的同步,而且程序結(jié)構(gòu)清晰,便于維護(hù),也易于向其他的串口通信協(xié)議移植。另外,串口中斷服務(wù)子程序中需要處理的工作很少,每個(gè)串口接收中斷平均耗時(shí)不超過(guò)20個(gè)機(jī)器周期(在單片機(jī)AT89C5l中),大大減輕了串口接收中斷服務(wù)程序的壓力,緩解了嵌入式系統(tǒng)有限資源與需求之間的矛盾,提高了嵌入式系統(tǒng)的穩(wěn)定性。

            三、結(jié)論

            從上面的分析和測(cè)試可以看出,基于有限狀態(tài)機(jī)的串口通信幀同步方法是本文中提出的3種幀方法中最優(yōu)的,結(jié)構(gòu)清晰且系統(tǒng)資源利用率高。

            對(duì)一個(gè)有著完整通信協(xié)議的串口中斷來(lái)說(shuō),因?yàn)橐容^命令頭、完成校驗(yàn)、解析數(shù)據(jù)等需要耗費(fèi)大量的機(jī)器周期,所以嵌入式系統(tǒng)中的串口中斷服務(wù)程序設(shè)計(jì)顯得更為重要。在實(shí)際的串口通信程序中,可采用狀態(tài)機(jī)和消息機(jī)制相結(jié)合的方法,僅在中斷服務(wù)程序中設(shè)置一個(gè)標(biāo)志,而在主程序中根據(jù)相應(yīng)標(biāo)志來(lái)作處理,這樣就回避了某些中斷可能需要較長(zhǎng)處理時(shí)間的問(wèn)題。在程序結(jié)構(gòu)上,由于采用狀態(tài)機(jī)的結(jié)構(gòu),既提高了可讀性。同時(shí)又提高了運(yùn)行速度,因而該方法不僅是一種很好的幀同步方法,還是一種很不錯(cuò)的串口通信程序設(shè)計(jì)方法。



            上一頁(yè) 1 2 下一頁(yè)

            關(guān)鍵詞: 嵌入式系統(tǒng)串口通信幀同步方

            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉