终于解决了PIC16串口中断重入问题

2020-02-06 10:11发布

很少用PIC的单片机,这个问题给我的教训很深刻,但我认为PIC本身也有做得不好的地方。
问题现象:MCU复位,应该属于看门狗复位,但程序启动时读STATUS显示为上电复位。若没打开看门狗,现象应该为MCU死机。
查找原因:过程相当艰苦,共花2天X20小时的时间,最后发现,串口中断发生后,一定要读RCREG,否则串口中断标志会一直产生,清了还会产生,造成反反复复进入中断。
造成原因:与写软件习惯有关。我的流程是,收到前一条串口命令,若还没处理完成,再来串口命令时,不处理(不读RCREG),只清串口中断标志。这也造成这现象偶然才会出现。
解决方法:有串口中断,不管三七二十一,退出串口中断前读一下RCREG,再清串口中断标志。

搜索一下百度,发现碰到我这个问题的人应该不少,但都没发现他们能找到原因和解决方法。看PIC的DATASHEET也没有强调RCREG必须读才能清串口中断标志。希望阿莫坛友不要再走弯路了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
huarana
2020-02-07 18:08
用 pic多年还真没遇到过你的问题 - -

手册上明确说了中断标志不能软件清,要读了自动清的。

要不丢数据那就开缓存,要是想丢数据那就在处理数据过程中关中断,处理完了再开。

基本上没发现什么不妥。

ps:用stm32的时候貌似 处理数据的时候关中断,完了再开  这样会造成串口死了还是咋的,当时没解决,直接一直打开着了。

一周热门 更多>