rs-232.txt
来自「设计很好的一个单片机232处理程序」· 文本 代码 · 共 35 行
TXT
35 行
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 + =
减小字号Ctrl + -
显示快捷键?