红树林 发表于 2026-6-22 13:15:11

AI8G1K08A外部中断INT2问题

AI8G1K08A-8脚,P54(INT2)用于外部唤醒和外部中断。

单片机不进掉电PD模式,INT2反复多次中断都没问题。

进PD模式后INT2可以唤醒CPU,但是唤醒之后就不再进INT2中断了!

确保INT2中断没关,即使唤醒后立即加上以下代码:
P5M1 = 0xEF;
P5M0 = 0x00;                //P54双向口,其余高阻
INTCLKO |= 0x10;        //使能INT2中断

也没用。反正就是PD模式唤醒之后INT2就不再产生中断了。

请大佬赐教!

C_wolf 发表于 2026-6-22 13:54:06

#include "reg51.h"
#include "intrins.h"

sfr   INTCLKO   =   0x8f;
#define EX2             0x10
#define EX3             0x20
#define EX4             0x40
                  
sbit    P10         =   P1^0;
sbit    P11         =   P1^1;
                  
sfr   P0M1      =   0x93;
sfr   P0M0      =   0x94;
sfr   P1M1      =   0x91;
sfr   P1M0      =   0x92;
sfr   P2M1      =   0x95;
sfr   P2M0      =   0x96;
sfr   P3M1      =   0xb1;
sfr   P3M0      =   0xb2;
sfr   P4M1      =   0xb3;
sfr   P4M0      =   0xb4;
sfr   P5M1      =   0xc9;
sfr   P5M0      =   0xca;

void INT0_Isr() interrupt 0
{
    P10 = !P10;                                 //测试端口
}

void INT1_Isr() interrupt 2
{
    P10 = !P10;                                 //测试端口
}

void INT2_Isr() interrupt 10
{
    P10 = !P10;                                 //测试端口
}

void INT3_Isr() interrupt 11
{
    P10 = !P10;                                 //测试端口
}

void INT4_Isr() interrupt 16
{
    P10 = !P10;                                 //测试端口
}

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    IT0 = 0;                                    //使能INT0上升沿和下降沿中断
//IT0 = 1;                                    //使能INT0下降沿中断
    EX0 = 1;                                    //使能INT0中断
                                                
    IT1 = 0;                                    //使能INT1上升沿和下降沿中断
//IT1 = 1;                                    //使能INT1下降沿中断
    EX1 = 1;                                    //使能INT1中断
                                                
    INTCLKO = EX2;                              //使能INT2下降沿中断
    INTCLKO |= EX3;                           //使能INT3下降沿中断
    INTCLKO |= EX4;                           //使能INT4下降沿中断

    EA = 1;

    PCON = 0x02;                              //MCU进入掉电模式
    _nop_();                                    //掉电模式被唤醒后,MCU首先会执行此语句
                                                //然后再进入中断服务程序
    _nop_();
    _nop_();
    _nop_();

    while (1)
    {
      P11 = ~P11;
    }
}

神农鼎 发表于 2026-6-22 14:37:16








页: [1]
查看完整版本: AI8G1K08A外部中断INT2问题