• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

串口中断就清零超时计数,怎么判断?

huihui163 2019-05-16 浏览量:1124
//检测超时函数 供定时器中断调用-1ms一次
// t为超时时间
__inline void Chk_TimeOut(u8 t)
{
if(!uartRMsg.rcOK && (uartRMsg.rcIndex>=8) && (++uartRMsg.rcS >=t) ) //超时之后,开始重新解码
uartRMsg.rcOK = true;
}
//接收函数, 供USART中断调用
__inline void Recieve_MSG(char ch)
{ 
uartRMsg.rcS = 0; //如果接收到数据,则清除超时检测计数,
if(!uartRMsg.rcOK)	
{	
uartRMsg.Buf.buf[uartRMsg.rcIndex ++] = ch;	//赋值
if(uartRMsg.rcIndex>=8 && uartRMsg.Buf.msg.cmd!=16)//其他条件成立的时候也可进入解码程序<此程序为Modbus应用,可改为接收到结束符等>
uartRMsg.rcOK = true;
}	
}

//供主函数调用
void MSGTransfer(void)
{
if(!uartRMsg.rcOK) return;
//......数据解析部分
}

每次串口中断都清零超时检测计数uartRMsg.rcS,++uartRMsg.rcS >=t)这个还会成立


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这种设计方法的意思就是,那个定时器中断,每1ms会发生一次,如果连续t毫秒还没有收到串口数据,则认为一包已经接收完成

    然后这个计时标志,在每次收到串口数据后就应该清0

    • 发布于 2019-05-17
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:1
  • 你应该在定时中断里面每次加加uartRMsg.rcS,不然永远也不会超时
    • 发布于2019-05-16
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 yhj416606438 :中断里一直在加呢 回复

相关问题

问题达人换一批

串口中断就清零超时计数,怎么判断?