项目场景:
提示:这里简述项目相关背景:
51单片机串口通信与定时器中断一起使用时,定时器不生效的问题,这个问题其实是串口接收数据时被打断了,
1是:可以在串口接受数据是关闭所有中断,然后把EA=1放在Data=SBUF后面
2是:把串口中断设置为最高优先级
还有一些小问题是可能发送和接受比特率不匹配导致乱码
void Uart_Routine() interrupt 4 //INT0->T0->INT1->T1->UART
{
static unsigned char utest=0,utest1=0; //串口数据接收
while(RI==1) //接收到停止位自动置1,中断后软件置0
{
//EA=0;
utest=SBUF; //更新Data
EA=1;
RI=0; //恢复
}
}
END
2022年5月10日
原因分析:
提示:这里填写问题的分析:
例如:Handler
发送消息有两种方式,分别是 Handler.obtainMessage()
和 Handler.sendMessage()
,其中 obtainMessage
方式当数据量过大时,由于 MessageQuene
大小也有限,所以当 message
处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。
解决方案:
提示:这里填写该问题的具体解决方案:
例如:新建一个 Message
对象,并将读取到的数据存入 Message
,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
换成 mHandler.sendMessage()
。