<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

嵌入式系統中串口通信幀的同步方法研究

作者: 時(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];//接收緩沖區

unsigned char g_cmd;

unsigned char g_RecOk;

void main()

{

while(1)

{

if(g_RecOk)

{

g_RecOk=FALSE;

switch(g_cmd)

{//相應處理程序

case: ...

break;

case: ...

break;

...

default:

}

}

}

}

void SerialComm() interrupt 4

{

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

static unsigned char len=0;//已接收的數據長(cháng)度

static unsigned char CheckSum=0;//校驗和

static unsigned char Len_total=0;//包長(chá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)機和消息機制的結構,上述設計思路快速有效地實(shí)現了串口通信的同步,而且程序結構清晰,便于維護,也易于向其他的串口通信協(xié)議移植。另外,串口中斷服務(wù)子程序中需要處理的工作很少,每個(gè)串口接收中斷平均耗時(shí)不超過(guò)20個(gè)機器周期(在單片機AT89C5l中),大大減輕了串口接收中斷服務(wù)程序的壓力,緩解了嵌入式系統有限資源與需求之間的矛盾,提高了嵌入式系統的穩定性。

三、結論

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

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



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

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

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>