IO中断标志位会不会被错误清除掉
io中断的标志位寄存器不能位读写,只能字节读写。假如现在P10, P11都使用了IO中断,作了以下处理
if (P1INTF & 0x01)//p10
{
P1INTF &= ~0x01;
//
}
if (P1INTF & 0x02)//p11
{
P1INTF &= ~0x02;
//
}
有如下汇编代码。
79: if (P1INTF & 0x01)//p10
C:0x0034 90FD11 MOV DPTR,#0xFD11
C:0x0037 E0 MOVX A,@DPTR
C:0x0038 30E004 JNB 0xE0.0,C:003F
80: {
81: P1INTF &= ~0x01;
82: //
C:0x003B E0 MOVX A,@DPTR
C:0x003C 54FE ANL A,#0xFE
C:0x003E F0 MOVX @DPTR,A
83: }
如果运行到C:0x003C 54FE ANL A,#0xFE时P11的中断标志位刚好更新到 P1INTF, 运行完 C:0x003E F0 MOVX @DPTR,A P11的中断标记位会被清除掉。
上面的情况会不会发生。
STC8H 的【普通I/O都支持的外部中断】参考程序
不是传统的 INT0/INT1/INT2/INT3/INT4
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=304&pid=1273
先判断为1再清除的方法是不会误清除的。 如果使能了中断,显然只有标志位为1时才能进入中断服务程序,在中断服务程序中对其清零就可以了,不存在误清零的可能性吧
页:
[1]