51单片机 外部中断INT0问题

主程序数码管从0到F静态显示,熄灭LED。中断程序点亮LED。当选用电平触发方式的时候,用杜邦线连到P3.2口和GND,数码管仍然在走,LED亮。当选用跳变沿触发方式的时候则不会出现这种问题。电平触发的时候是不是和机器周期有关

那说明p3.2的电平是没变化的 所以当选用电平触发方式的时候,用杜邦线连到P3.2口和GND,数码管仍然在走,LED亮。
相反 如果选用跳变沿触发方式的时候 就不会啦 因为电平没有跳变追问

=.=我那个程序是试验跳变沿触发会不会发生电平触发的问题。IT0=0时,把INT0和GND一直接在一起出现的情况想不明白

追答

你看看图片 如果IT0=0时 中断响应后要置高电平 否则会重复中断的

追问

用电平触发,我就一直用杜邦线连着INT0和地。应该是一直在执行中断程序,但是数码管为什么还会走。不过走的速度比原先的慢

追答

void main()
{
EA=1; //开总中断
EX0=1; //开外部中断0
IT0=1; //跳沿触发方式,或者直接对寄存器操作:TCON=0x01;
wela=1; //位选
P0=0xea;
wela=0;

while(1)
{
if(led_flag==0)
{
for(num=0;num<16;num++)
{
dula=1; //段选
P0=table[num];
dula=0;
delay(4000);
led1=1;
}
}
}
}
void exter0() interrupt 0 //中断程序
{
led_flag=1;
led1=0;
// delay(40000);
}

}
加全局变量 来判断

追问

刚开始学...能加下QQ么?

追答

116996928

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-09
恩,我怎么觉得你不管用电平触发,还是用下降沿触发,显示效果都一样额,都是数码管走,LED点亮。。。。其实这两种方式区别就是,低电平触发的话,只要外部检测到低电平就触发,所以你用杜邦线拉低的话,会一直重复的进中断,下降沿的话只识别下降沿,你用杜邦线连接的话只会出现一个下降沿,所以只会进去一次中断~追问

不触发中断的话数码管走的快,用电平触发方式LED会一直亮但是数码管走的慢。

追答

恩,因为他一直在进中断啊~~所以会出现数码管闪烁~

第2个回答  2012-06-09
我记得好像是每一个机器周期检查一次中断追问

是不是和这句话有关。虽然一直给低电平信号,由于我的程序用不了一个机器周期,所以运行完中断程序之后再执行主程序,当到了S5P2的时候再转去执行中断,实际LED是闪烁的,只不过闪的快肉眼分辨不出来吧。速度很快就看到数码管走的慢了。

追答

由于我的程序用不了一个机器周期,这是不可能的,机器周期就是执行指令的最小时间.
不过你的追问倒是让我知道我也少想了些了,实际LED是闪烁的,只不过闪的快肉眼分辨不出来吧。速度很快就看到数码管走的慢了。这句话倒是可能的.
用低电平触发,中断条件一直都满足,所以如果你的中断程序只是写了让LED亮的功能的话,那么它就是一直亮的,可以说几乎谈不上是闪烁了.但是你的数码管竟然在led亮的时候也在走,走得是不是快到自己分辨不出是什么?你的中断服务程序是不是也有数码管的部分的?

追问

void main()
{
EA=1; //开总中断
EX0=1; //开外部中断0
IT0=1; //跳沿触发方式,或者直接对寄存器操作:TCON=0x01;
wela=1; //位选
P0=0xea;
wela=0;
while(1)
{
for(num=0;num<16;num++)
{
dula=1; //段选
P0=table[num];
dula=0;
delay(4000);
led1=1;
}
}
}
void exter0() interrupt 0 //中断程序
{
led1=0;
// delay(40000);
}
两个函数

本回答被网友采纳