此帖出自微控制器 MCU论坛
最新回复
引用:
请问我如果不在中断中处理串口接收和发送,而在主程序中做.我知道如果判断串口是否收到单个字节如0x55可以用如下语句:
if(URCTL0 & RXWAKE)
{
if(RXBUF0==0x55)
............................
现在如果我想判断串口是否连续收到四个字节,如,0xFE 0xFF,0x55,0x00,该如何写程序,万分感谢!
对于一个完整的通讯帧协议来说,必然有一个用于固定识别的帧头特征字符串,正如你所说的“0xFE、0xFF、0x55、0x00”。接收这类通通讯帧,通常采用的办法为:
由于430通讯中断是逐个字符中断接收的,为了识别这个“帧头特征字符串”,就是在接收到每一个字符时逐一判断是否就是帧头特征字符串的第一个字符,如果是的话则保留在一个数组变量中,否则放弃。然后接收紧接下来的第二个字符是否符合规定,如果是的话则继续保留,否则放弃并清除前面接收的内容,重新开始。如此继续进行,直到全部“帧头特征字符串”连续接收到时设置数据通讯帧接收开始标志,进行无判别的后续接收。
如果通讯帧是固定长度的,则按照事先约定的长度进行接收,完成全部内容的接收。
若通讯帧是变动长度的,在通讯协议中某一个固定位置一定包括了本数据帧的长度信息。在收到该长度信息后,则计算出后续数据的长度。从而完成整个数据帧的接收工作。
详情
回复
发表于 2006-3-6 12:25
| ||
|
||
| |
|
|
| |
|
|
| |
|
|
| |
|
|
此帖出自微控制器 MCU论坛
| ||||
|
||||
EEWorld Datasheet 技术支持