很少用PIC的单片机,这个问题给我的教训很深刻,但我认为PIC本身也有做得不好的地方。
问题现象:MCU复位,应该属于看门狗复位,但程序启动时读STATUS显示为上电复位。若没打开看门狗,现象应该为MCU死机。
查找原因:过程相当艰苦,共花2天X20小时的时间,最后发现,串口中断发生后,一定要读RCREG,否则串口中断标志会一直产生,清了还会产生,造成反反复复进入中断。
造成原因:与写软件习惯有关。我的流程是,收到前一条串口命令,若还没处理完成,再来串口命令时,不处理(不读RCREG),只清串口中断标志。这也造成这现象偶然才会出现。
解决方法:有串口中断,不管三七二十一,退出串口中断前读一下RCREG,再清串口中断标志。
搜索一下百度,发现碰到我这个问题的人应该不少,但都没发现他们能找到原因和解决方法。看PIC的DATASHEET也没有强调RCREG必须读才能清串口中断标志。希望阿莫坛友不要再走弯路了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
接收到所有数据位和停止位之后,立即将RSR 中的字
符传送到EUSART 接收FIFO,且PIR1 寄存器的RCIF
中断标志位置1。通过读RCREG 寄存器,将FIFO 顶
部的字符送出FIFO。
25.1.2.3 接收中断
只要EUSART 接收器使能且接收FIFO 中存在未读字
符, PIR1 寄存器的RCIF 中断标志位就会置1。RCIF
中断标志位是只读位,不能用软件置1 或清零。
哦,那估计我看漏了。
若串口大频繁,忙时不理会也没办法。我用Modebus协议通过485挂在总线上,收到的命令控制交流同步电机和回答同步电机状态。电机动作本身也有延时,特别是正反转。
也有客户反馈,测试我们的控制板,不停扔命令过来,间隔小于20m有时会无命令反馈,我知道应该是前条命令没处理完的问题,但只回复他:我们是控制电机,别用485累坏了CPU。
大师对此现象有何解决办法?我也想每个485命令都能反馈。增加接收命令队列估计行不过了,命令长时近100个bytes。
呵呵,你没看懂我的意思。
问题是中断标志清不了,要读BUFFER才行。
若你用PIC,估计你会碰到我一样的问题。
一周热门 更多>