前几天使用Proteus(ver7.7)仿真,芯片为PIC16F1828
发现无法清除电平变化中断的标志位,尽管程序代码将IOCBF清零,但INCOT,BIT0(IOCIF)一直无法清零
导致一退出中断,又立即进入中断,陷入死循环,导致看门狗动作
后来产品更改需要,第2版样机更改为PIC16F1936,故障依旧
发现电平中断仿真出错的具体位置是,无法清零IOCIF(INTCON,0)
数据手册上说这个标志位是"只读"的,只要将IOCBF全部清零,这个标志位自动清零
IOCIF 标志位是只读位,在IOCBF 寄存器中所有电平变化中断标志都由软件清零后,该位被清零。
在Proteus中仿真,即便清除了IOCBF,也无法清零IOCIF
上面两种型号的单片机,在MPLAB IDE SIM环境下,正常
可以清晰看到,只要将IOCBF清零,这IOCIF自动清零 |