标题:
51单片机开两个外部中断怎么有一个失效了?
[打印本页]
作者:
7780000
时间:
2019-5-2 11:53
标题:
51单片机开两个外部中断怎么有一个失效了?
#include <reg52.h>
#include <intrins.h>
#define STC_Y1 97560U // 89C/LEXX、90C/LEXX
#define STC_Y3 14050U // 10F/Lxx、11F/Lxx 、12C/LExx、15F104E/L104E(A版)、15F204E/L204EA(A版)
#define STC_Y5 13043U // 15F/L/Wxx(Y3内核个别型号除外)
//#define Fosc 12000000UL
#define Fosc 11059200UL
#define Core STC_Y1
sbit LED1 = P3^0; //tx
sbit LED2 = P3^1; //rx
sbit PIN_INT0 = P3^2;
sbit PIN_INT1 = P3^3;
unsigned char Is_Power_Down = 0;
/**
* 功能:延时t毫秒
* 入参:1~65535
*/
void delay_ms(unsigned int t)
{
unsigned int i;
do{
i = Fosc / Core;
while(--i);
}while(--t);
}
void INT0_interrupt() interrupt 0
{
if(Is_Power_Down==1 && INT0==1)
{
Is_Power_Down=0;
EA=0;
LED1 = 0;
while(PIN_INT0==1); //按键A是否一直按着,
delay_ms(100);
LED1 = 1;
}
}
void INT1_interrupt() interrupt 2
{
if(Is_Power_Down==1 && INT1==1)
{
Is_Power_Down=0;
EA=0;
LED2 = 0;
while(PIN_INT1==1); //按键C是否一直按着,
delay_ms(100);
LED2 = 1;
}
}
void main()
{
LED1=1;
LED2=1;
IT0=0;
EX0=1;
IT1=0;
EX1=1;
while(1)
{
EA=1;
Is_Power_Down=1;
PCON=0x2;
_nop_();
_nop_();
_nop_();
}
}
用的pt2272模块,芯片stc89c52rc,情况是两个中断只有中断0有效中断1没反应, 屏蔽EX0=1;的话中断1就能用了,这是怎么回事??接线没问题
作者:
7780000
时间:
2019-5-2 22:37
自己搞定了,改IT0=1 IT1=1就行了。之前的中断方式导致INT0不停的中断而优先级又比INT1高,导致INT1失效了!!不过搞不懂按下按键时候是上升沿啊,为什么下降沿中断方式会触发?
作者:
51go
时间:
2019-5-3 14:41
你搞反了,不按键是高电平,按下是低电平,所以按下按键的过程是高电平变为低电平,即下降沿。你可以去看一下独立按键的电路原理图
作者:
7780000
时间:
2019-5-4 21:31
51go 发表于 2019-5-3 14:41
你搞反了,不按键是高电平,按下是低电平,所以按下按键的过程是高电平变为低电平,即下降沿。你可以去看一 ...
我不是用的独立按键,用的PT2272四路无线模块,遥控器不按的时候模块输出低电平的,遥控器按下是高电平
作者:
shuisheng60
时间:
2019-5-5 01:02
建议你去看看这个:中断嵌套编程的应用(Proteus仿真+程序)
http://www.51hei.com/bbs/dpj-145685-1.html
作者:
188610329
时间:
2021-8-26 04:29
IT0 的设定,不同单片机作用不同,相同的是 IT0 = 1 , 都是下降沿触发, IT0 = 0,STC15系列,是上升沿下降沿都可以触发, 而 STC11系列,好像是仅上升沿触发,而 89C51 则是低电平触发,根据你的描述,我觉得你用的单片机应该是 89C51, 所以当 IT0 = 0, 那么在低电平状态,就会反复触发,而纵观你的中断程序,你会判断是否处于高电平,直到低电平才会退出中断,那么,其实反过来理解,当产生了高电平,又变成了低电平这个时候触发中断,是不是对系统而言更经济?那么针对你的需求,其实下降沿中断才是更合理的,毕竟你这个中断,就算最慢的89c51跑一下也就几微秒,等电平重新下降了在中断运行完全没有影响。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1