📄 rs-232.txt
字号:
uchar rxbuf[4][16];
uchar w_ptr; //初始化为0
uchar r_ptr; //初始化为0
uchar frame_ptr; //初始化为0
SIGNAL(SIG_USART0_RECV)
{
uchar c=UDR0;
switch(c)
{
case 0xff: frame_ptr=1;
break;
case 0xaa: if (frame_ptr==5)
{
frame_ptr==0;
w_ptr ++;
w_ptr &= 0xf;
if (w_ptr==r_ptr) {//出现超越}
}
break;
default: if (frame_ptr<6)
{
rxbuf[frame_ptr-1][w_ptr]=c;
frame_ptr++;
} else{//接收6字节结构错误}
}
}
rxbuf是接受缓冲,r_ptr是主程序的处理指针
这个环,按照上面的,最大只有16个数据帧缓冲
主程序处理缓冲,直到r_ptr==w_ptr为止,只要不等,意味着还有数据需要处理
如果在数据流里面,0xff和0xaa的功能不是唯一的话,会出问题
主程序跑完后,r_ptr++;r_ptr &=0xf;只要r_ptr<>w_ptr,继续处理[r_ptr]
主程序在检查if (r_ptr<>w_ptr) {//处理}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -