51单片机的外部中断是有两种触发方式的,如外部中断0: IT0(TCON0) ,外部中断 0触发方式控制位。 当IT0=0时,为电平触发方式。 当IT0=1时,为边沿触发方式(下降沿有效)。 51单片机中断系统初始化: 开相应中断源的中断; (IE) 设定中断优先级;(IP) 若为外部中断,设定外部中断的触发方式。 void Outside_Init(void) { EX0 = 1; //开外部中断0 IT0 = 1; //负边沿触发 EA = 1; //开总中断 } void Outside_Int(void) interrupt 0 //外部0中断函数 { EX0 = 0; //关中断 这里写要实现的功能 EX0 = 1; //开中断 }
你好,你可以在退出中断时不要打开外部中断使能,在主循环程序里加一条判断就像判断按键一样恢复高电平以后再使能外部中断允许就可以克服这个问题了,还有就是选择边沿触发(上升沿或下降沿)也不会有次问题
电平触发就是说只有这个信号为低电平的时候,才会发出有效信号,而边沿触发(下降沿有效)的意思是只有在发生由高电平向低电平变化的时候,此时发出的才是有效信号。假如说,你的51单片机的p32和33分别外接两个可调节高低电平的开关A和B,32是边沿触发,33是电平触发。按下A键的那一刹那,就是还没有按到底,这个过程发出的是有效信号。按下B的时候,只有按到最底部,就是实实在在的低电平的时候,才会发出有效信号。
不会,IE0的置位与否与IT0有关,当IT0=1时,下降沿触发也就是说当INT0由高到低时IE0将被硬件置1,执行完中断,遇到RETI自动清0,但不影响INT0的状态。当IT0=0时,当CPU检测到连续两个周期的INT0低电平时IE0置1,中断结束时遇到RETI自动将IE0清0,之后如果INT0仍然为低电平,且长度超过两个机器周期,那么将重新将IE0置1申请中断。
#include<reg51h>
#define uchar unsigned char
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
uchar kdn=0,cnt=0;
void ext0() interrupt 0
{
kdn++;
TR0=1;
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>20)
{
TR0=0;
if(kdn==2)LED1=~LED1;
if(kdn==3)LED2=~LED2;
if(kdn==4)LED3=~LED3;
kdn=0;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
EX0=1;
IT0=1;
while(1);
}
以上就是关于51单片机中设置外部中断0为下降沿触发的语句怎么写啊全部的内容,包括:51单片机中设置外部中断0为下降沿触发的语句怎么写啊、51单片机当中断IT0置0,为低电平有效,那么中断程序运行完之后,电平还是保持低电平、当IT0=0时,为电平触发方式。当IT0=1时,为边沿触发方式(下降沿有效)。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)