一个O 发表于 2024-5-20 09:56:36

开启INT2外部中断然后进入睡眠,唤不醒,求解决----已解决

本帖最后由 kite 于 2024-5-24 08:59 编辑

说明:电路中BZ接P36引脚--INT2外部中断;
J1是一个传感器,会产生高低电平的信号;
代码思路是开启中断,进入睡眠,当产生电平信号变化就会触发INT2中断进行唤醒;
现在测得的现象是无法唤醒,通过串口打印也显示未触发INT2中断;
但是我用示波器测图中接出线的地方是有电平变化的。
求解决。



你这个 5.6M电阻到地是啥意思

一、更换了电路;
二、复制代码时中断部分出错;




神农鼎 发表于 2024-5-20 10:00:20




你那个 5.6M电阻到地是啥意思

一个O 发表于 2024-5-20 10:11:42

本帖最后由 kite 于 2024-5-20 10:15 编辑

神农鼎 发表于 2024-5-20 10:00
你那个 5.6M电阻到地是啥意思
以前用过另外一个型号的芯片用您说的这个电路不行,然后才改为这样的。

神农鼎 发表于 2024-5-20 10:24:36

电路简化
【I/O 高阻输入,外部 10K 上拉】,接信号输入

用下面程序测试




#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;
    }
}


神农鼎 发表于 2024-5-20 10:29:15


STC8H1K16-36I-LQFP32,TSSOP28, TSSOP20, 只有下降沿中断

乘风飞扬 发表于 2024-5-20 10:29:54

能否提供一个可以正常测试的代码?附件提供的项目根本编译不过。

神农鼎 发表于 2024-5-20 10:30:37





STC8H2K32U-45I-LQFP32, TSSOP28, TSSOP20, 所有I/O都支持外部中断






一个O 发表于 2024-5-20 10:40:04

乘风飞扬 发表于 2024-5-20 10:29
能否提供一个可以正常测试的代码?附件提供的项目根本编译不过。

这个,谢谢

一个O 发表于 2024-5-20 10:44:35

神农鼎 发表于 2024-5-20 10:30
STC8H2K32U-45I-LQFP32, TSSOP28, TSSOP20, 所有I/O都支持外部中断

我用的是8h1k28那个系列

乘风飞扬 发表于 2024-5-20 10:49:09

你是用这个项目进行测试的吗?还是编译通不过。
像这些函数、参数(ENABLE、DISABLE)在项目里面都找不到。
页: [1] 2
查看完整版本: 开启INT2外部中断然后进入睡眠,唤不醒,求解决----已解决