用C8051F410, 需要从串口接收两个字节,收到后置标志位,程序如下
vvoid comm0_rx(void) interrupt 4
{
m=0;
while(m<2)
{
if(RI0)
{
RI0=0;
recdata[m]=SBUF0;
m++;
}
}
m=0;
while(m<2)
{
SBUF0=recdata[m];
while(!TI0);
TI0=0;
m++;
}
flag0=1;
flag1=1;
ES0=0;
}
程序运行后,接收及发送都没问题,但就是最后置标志位语句不是每次都能执行,偶尔接收一次就能执行,大多数要接收好几次才能置位(次数不定)。开始时接收和发送是在一起,后来分开,甚至置位语句放在接收与发送之间也没用。哪位大侠遇到过这种问题?
xuyaqi 发表于 2019-6-19 08:14
不能把中断处理程序搞得这么复杂,会影响串口接收的,中断里设标志,复杂处理中断外执行。
xuyaqi 发表于 2019-6-19 08:14
不能把中断处理程序搞得这么复杂,会影响串口接收的,中断里设标志,复杂处理中断外执行。
liuzanshui 发表于 2019-6-19 10:26
已经尽力精简了,收到数据后置标志位,然后禁止串口通信,主程序执行完相应的任务后再重开串口
xuyaqi 发表于 2019-6-19 11:07
“收到数据后置标志位,然后禁止串口通信”怎么能禁止串口通信,对方发送你不是漏掉了嘛,你应该在接收中 ...
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |