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
现在用汇编的越来越少了 你试试把边沿中断改为电平中断看能不能唤醒,疑似手册中提到的IO中断瑕疵问题,请仔细查看一下手册的内容。 晓飛飛 发表于 2024-3-23 16:58
你试试把边沿中断改为电平中断看能不能唤醒,疑似手册中提到的IO中断瑕疵问题,请仔细查看一下手册的内容。 ...
试过了,改为高电平唤醒也不行 汇编代码不太懂,数据手册第686页有例子,stc-isp软件里面也与例程。 yjawei 发表于 2024-3-23 20:14
汇编代码不太懂,数据手册第686页有例子,stc-isp软件里面也与例程。
这些是本身就是带中断唤醒功能的管脚,是可以的,比如P3.2就是可以唤醒的,我现在是用的普通IO口,P1.6,要求高电平或者上升沿唤醒,实现不了 没有哪位老师帮忙看看吗? 普通IO口中断,P16唤醒休眠模式汇编例程,有需要的可参考附件:
页:
[1]