请问这个外部中断程序是否写错了?

2019-07-15 16:26发布

实验:要求是开机的时候led1灯点亮闪烁,用杜邦线给P32(外部中断0)接低电平时,led2灯点亮,led1灯熄灭。去除杜邦线P32回到高电平时,led1点亮闪烁,led2灯熄灭。

问题:现在问题是当给P32低电平的时候led2点亮了,但led1没有熄灭,而是闪烁的速度变慢了?P32回到高电平时,led2还是一直亮着?

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
sbit led2=P2^7;                //中断时点亮这LED灯

        sbit led1=P2^0;

void main()

{
EA=1;
EX0=1;

led1=0;                     //点亮LED灯
delay(1000);  //延时

led1=1;                                //熄灭LED灯
delay(1000);        ////延时



}


void exter0() interrupt 0
{
        led2=0;        
}

void delay(uint z)
{
        uint x;
        uchar y;
        for(x=z;x>0;x--)
                for(y=1000;y>0;y--);        
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
七七德德
2019-07-15 21:47
你好,选用外部中断时需要选择是触发方式,你这里用低电平触发,应该在初始化加一句IT0=0;  //为1是高电平触发。
第二点,不管写任何程序都需要写大循环while(1);这里的led1=0; delay,led1=1;delay(1000); 应该写在while(1)里面循环。
第三点,你在外部中断里面只写了点亮led2。并没有写熄灭led1.   暂时只看出这三点,慢慢改吧。

一周热门 更多>