返回信息流任务:在51单片机的串口中断处理函数中检查接收到的消息,如果符合规定的格式则存入消息缓存。
消息格式为:定长10个字节,前四个字节为FF。
以下是消息缓存和缓存长度的变量定义,以及我写的中断处理函数,编译没有问题,可实际调试时死活不对,折腾了一晚上终于找到了原因,你能一眼看出问题所在吗?
char msg_buffer[10] = {0};
unsigned int msg_buffer_len = 0;
void s2_int(void) interrupt 8
{
char buffer;
S2ConByte = S2CON;
if(RI2 == 1)
{
RI2 = 0;
buffer = S2BUF;
if(msg_buffer_len >= 10)
msg_buffer_len = 0;
if( ((msg_buffer_len<=3) && (buffer==0xff)) || (msg_buffer_len>3) )
msg_buffer[msg_buffer_len++] = buffer;
else
msg_buffer_len = 0;
}
else
TI2 = 0;
S2CON = S2ConByte;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #72058同步于 2013/6/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
又犯了一个低级错误……
erabbit
2013/6/23镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
【 在 erabbit 的大作中提到: 】
: 任务:在51单片机的串口中断处理函数中检查接收到的消息,如果符合规定的格式则存入消息缓存。
: 消息格式为:定长10个字节,前四个字节为FF。
: 以下是消息缓存和缓存长度的变量定义,以及我写的中断处理函数,编译没有问题,可实际调试时死活不对,折腾了一晚上终于找到了原因,你能一眼看出问题所在吗?
: ...................
我猜的:
interrupt 8这里的中断号8可能是其他数?中断开错了?
RI2 = 0;位置错了? 检测到接收后马上关闭接收,导致没接收到。
改为TI2 = 1;
(buffer==0xff)?我很好奇,buffer不是字符么?怎么。。。。难道我混乱了?
我再想不出哪里还莫名其妙了。
班门弄斧,见谅。。
问题就出在”buffer==0xff“这里,buffer被声明为char类型,即使它在内存中的内容真的是全1,buffer==0xff也不会成立,因为buffer此时是一个负数(-1),而0xff是255。
解决方法,要么将buffer声明为unsigned char类型,要么定义另一个变量,将0xff赋给它,让buffer与这个变量比较:
char header = 0xff;
……
...buffer==header...
【 在 W1039766642 的大作中提到: 】
: (buffer==0xff)?我很好奇,buffer不是字符么?怎么。。。。难道我混乱了?