我在89C516RD+上写了一段程序,用来确定,当有按键按下时候,也就是中断源出现的时候,即使没有开启外部中断(EX0=0,EX1=0,EA=0),外部中断标志IE1和IE0依然可以置位,并且即使没有进入中断服务子程序,中断源撤销以后外部中断标志IE1和IE0都可以自动复位
- JNB IE1,$+7//three bytes
- SETB P0.3//two bytes
- SJMP $-5//two bytes
- CLR P0.3//two bytes
- SJMP $-9
复制代码
有按键按下时候,IE1置位,P0.3口连接的灯就熄灭,按键松开以后,IE1自动复位,与P0.3口连接的灯又重新亮起,平时的时候灯一直常亮,结果证明思路是完全正确的。
但是我将程序烧录到STC32G12K128上就无法通过了
没有按键按下时候,灯是亮的,按键按下后灯就熄灭了,并且即使按键松开以后,LED灯依然保持熄灭,就说明STC32G12K128的外部中断标志IE1在置位以后,如果没有进入中断程序,外部中断标志IE1和IE0在
撤销外部中断源之后,也是无法自动复位的
于是我又想到,用定时器1,在IE1置位之后1秒钟自动将IE1清零
- ;*********************利用定时器1中断清除外部中断标志IE1,@24MHZ*****************
- $include (address predefined.h)
-
- EAXFR EQU 0BAH.7
-
- ORG 0FF:0000H
- LJMP START
- ORG 0FF:001BH
- LJMP ISR_TIMER1
- ORG 0FF:0210H
- START:
- MOV SP,#60H
- SETB EAXFR//允许扩展RAM区特殊功能寄存器(XFR)的访问
- ;==============================================================================
- CLR EX0//关闭外部中断
- CLR EX1
复制代码
我是在2023年版的屠龙刀开发板上做验证的,采用的是开发板上的按键P3.2和P3.3还有出厂焊接的P2口的LED灯,但是结果是按键松开后,灯会短暂亮起,然后又熄灭了
我主要使用的是传统的8051 MCU,对现在的STC32G12K128不是很了解,所以我想知道现在的外部中断标志位IE1和IE0在中断源存在和中断源撤销的改变机制到底是怎么样的?
|