xpz127 发表于 2023-10-6 18:03:54

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的中断标记位会被清除掉。
上面的情况会不会发生。

神农鼎 发表于 2023-10-6 18:44:08


神农鼎 发表于 2023-10-6 18:49:24

STC8H 的【普通I/O都支持的外部中断】参考程序
不是传统的 INT0/INT1/INT2/INT3/INT4

https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=304&pid=1273



梁工 发表于 2023-10-23 15:50:23

先判断为1再清除的方法是不会误清除的。

清风迎明月 发表于 2023-10-27 09:09:39

如果使能了中断,显然只有标志位为1时才能进入中断服务程序,在中断服务程序中对其清零就可以了,不存在误清零的可能性吧
页: [1]
查看完整版本: IO中断标志位会不会被错误清除掉