8031的串口故障

背景介绍:

     系统中有两个模块需要使用串口进行通信,定时收发联络协议(2s一次),提供本模块的一些状态信息。模块的CPU使用8031,watchDog硬件设计为300ms内发送一个不少于50ms的高脉冲。

    因为联络协议数据长度比较短(10字节左右),为编码简单,在发送时就没有采用状态迁移处理,而是同步的发送,也就是调用发送函数就会一直等到所有数据都发送完毕才会返回。

故障现象:

    代码运行后,发现运行灯不是定时闪烁,而是固定在一个状态不变。

原因及解决:

    经过检查发现,是因为程序频繁进入串口中断,即使没有数据需要发送,也会进入串口中断处理程序,导致大量的CPU时间被占用,watchDog没有在规定的时间内被清除,所以导致此故障。

    进一步分析为什么会频繁进入串口中断处理程序,发现在中断处理程序内部没有清除中断标志TI,而是放在了中断外面的发送函数内清除,将代码修改为在中断程序内清除中断标志TI,在发送函数内判断TI是否为0,以确定当前字符是否发送完毕,则故障解决。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值