开启INT2外部中断然后进入睡眠,唤不醒,求解决----已解决
本帖最后由 kite 于 2024-5-24 08:59 编辑说明:电路中BZ接P36引脚--INT2外部中断;
J1是一个传感器,会产生高低电平的信号;
代码思路是开启中断,进入睡眠,当产生电平信号变化就会触发INT2中断进行唤醒;
现在测得的现象是无法唤醒,通过串口打印也显示未触发INT2中断;
但是我用示波器测图中接出线的地方是有电平变化的。
求解决。
你这个 5.6M电阻到地是啥意思
一、更换了电路;
二、复制代码时中断部分出错;
你那个 5.6M电阻到地是啥意思
本帖最后由 kite 于 2024-5-20 10:15 编辑
神农鼎 发表于 2024-5-20 10:00
你那个 5.6M电阻到地是啥意思
以前用过另外一个型号的芯片用您说的这个电路不行,然后才改为这样的。 电路简化
【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;
}
}
STC8H1K16-36I-LQFP32,TSSOP28, TSSOP20, 只有下降沿中断
能否提供一个可以正常测试的代码?附件提供的项目根本编译不过。
STC8H2K32U-45I-LQFP32, TSSOP28, TSSOP20, 所有I/O都支持外部中断
乘风飞扬 发表于 2024-5-20 10:29
能否提供一个可以正常测试的代码?附件提供的项目根本编译不过。
这个,谢谢
神农鼎 发表于 2024-5-20 10:30
STC8H2K32U-45I-LQFP32, TSSOP28, TSSOP20, 所有I/O都支持外部中断
我用的是8h1k28那个系列 你是用这个项目进行测试的吗?还是编译通不过。
像这些函数、参数(ENABLE、DISABLE)在项目里面都找不到。
页:
[1]
2