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

2020-02-06 10:11发布

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

搜索一下百度,发现碰到我这个问题的人应该不少,但都没发现他们能找到原因和解决方法。看PIC的DATASHEET也没有强调RCREG必须读才能清串口中断标志。希望阿莫坛友不要再走弯路了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
Firman
1楼-- · 2020-02-08 04:07
zhcj66 发表于 2015-8-31 11:22
LZ请问PIC8位MCU用什么编译器  还有仿真下载器用什么,最近打算用PIC的单片机 ...

PIC8没听说过,
有用过PIC16和PIC18系列的.
我用PICKIT3仿真,PICC编译.
Firman
2楼-- · 2020-02-08 04:33
zhcj66 发表于 2015-8-31 11:22
LZ请问PIC8位MCU用什么编译器  还有仿真下载器用什么,最近打算用PIC的单片机 ...

PIC8没听说过,
有用过PIC16和PIC18系列的.
我用PICKIT3仿真,PICC编译.
zhcj66
3楼-- · 2020-02-08 07:09
Firman 发表于 2015-8-31 13:34
PIC8没听说过,
有用过PIC16和PIC18系列的.
我用PICKIT3仿真,PICC编译.

说错了是PIC16F      PICC编译是编译器?
tomhe666
4楼-- · 2020-02-08 12:59
Firman 发表于 2015-8-2 09:25
若串口大频繁,忙时不理会也没办法。我用Modebus协议通过485挂在总线上,收到的命令控制交流同步电机和回 ...

这还是你软件上处理的不好, 若是太忙, 给对方一条忙状态, 相信也是很简单的事, 这样对方可以酌情处理,   你置之不理, 他就怀疑你出了问题也是很正常的事
Firman
5楼-- · 2020-02-08 13:07
 精彩回答 2  元偷偷看……
lmhtz
6楼-- · 2020-02-08 14:24
要结合通讯速率要求来处理忙的问题,通讯数据段落间距导致前后数据冲突及丢失情况,至于在不在中断期间处理要看处理周期是否超出程序周期任务的最小时间要求....

一周热门 更多>