alanma 发表于 2024-3-23 15:09:19

STC8H4K64的IO中断不能唤醒

有没有老师指导下,用IO做中断唤醒不成功,项目中用P3.2=KEY1,P1.6=DC-IN,两个IO做唤醒,其中KEY1为按键,低电平有效,DC_IN为充电输入检测,高电平有效,中断唤醒配置到主程序初始化或者睡眠子程序里面中都试过,P3.2可以唤醒,但是P1.6不行,不知道问题出在哪里,代码如下:

;休眠子程序



SLEEP:

                DJNZ    SleepDelay, SLEEP_END ;10秒未到, 循环显示秒计数
                MOV   SleepDelay, #0FFH

                JNB   KEY1, SLEEP_END   ;高电平时才进入睡眠
                JB DC_IN ,SLEEP_END   ;DC_IN低电平才进入睡眠
                LCALL   DELAY10MS
                JNB   KEY1, SLEEP_END   ;高电平时才进入睡眠
                JB DC_IN ,SLEEP_END   ;DC_IN低电平才进入睡眠
                MOV POWER_DATA,#0H
                CLR TR0    ;


                MOV A,#40H ;P1.6上升沿中断
                MOV DPTR,#P1IM0
                MOVX @DPTR,A;
                MOV A,#00H;
                    MOV DPTR,#P1IM1
                MOVX @DPTR,A; P1.6上升沿中断

                MOV A,#40H    ;P1.6允许中断唤醒
                MOV DPTR,#P1WKUE
                MOVX @DPTR,A;

                MOV A,#40H;使能P1.6中断       
                MOV DPTR,#P1INTE
                MOVX @DPTR,A ;

                SETB    EX0   ;INT0 Enable
                SETB    IT0   ;INT0 下降沿中断      

                MOV   PCON, #02H   ;Sleep
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
               
L_cnt1000_NotZero:
                LJMP    Loop;唤醒后,进入主程序
SLEEP_END:


            RET

;P1中断子程序,在中断中关闭中断,和标志清零
P1INT_Interrupt: ;DC_IN输入中断

                PUSH PSW
                PUSH ACC
                PUSH DPL
                PUSH DPH
               
               
                MOV A,#00H;关闭能P1.6中断       
                MOV DPTR,#P1INTE
                MOVX @DPTR,A ;
               
                MOV A,#0H;中断标志位清零
                MOV DPTR,#P1INTF
                MOVX @DPTR,A
               
                POP DPH
                POP DPL
                POP ACC
                POP PSW
                RETI


lzl1okOK 发表于 2024-3-23 16:14:14

现在用汇编的越来越少了

晓飛飛 发表于 2024-3-23 16:58:06

你试试把边沿中断改为电平中断看能不能唤醒,疑似手册中提到的IO中断瑕疵问题,请仔细查看一下手册的内容。

alanma 发表于 2024-3-23 17:03:45

晓飛飛 发表于 2024-3-23 16:58
你试试把边沿中断改为电平中断看能不能唤醒,疑似手册中提到的IO中断瑕疵问题,请仔细查看一下手册的内容。 ...

试过了,改为高电平唤醒也不行

yjawei 发表于 2024-3-23 20:14:19

汇编代码不太懂,数据手册第686页有例子,stc-isp软件里面也与例程。

alanma 发表于 2024-3-23 22:35:22

yjawei 发表于 2024-3-23 20:14
汇编代码不太懂,数据手册第686页有例子,stc-isp软件里面也与例程。

这些是本身就是带中断唤醒功能的管脚,是可以的,比如P3.2就是可以唤醒的,我现在是用的普通IO口,P1.6,要求高电平或者上升沿唤醒,实现不了

alanma 发表于 2024-3-25 16:54:25

没有哪位老师帮忙看看吗?

乘风飞扬 发表于 2024-3-25 18:19:36

普通IO口中断,P16唤醒休眠模式汇编例程,有需要的可参考附件:
页: [1]
查看完整版本: STC8H4K64的IO中断不能唤醒