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

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条回答
a410670107
1楼-- · 2019-07-15 20:01
中断触发方式勒   寄存器都没配置全
七七德德
2楼-- · 2019-07-15 21:47
你好,选用外部中断时需要选择是触发方式,你这里用低电平触发,应该在初始化加一句IT0=0;  //为1是高电平触发。
第二点,不管写任何程序都需要写大循环while(1);这里的led1=0; delay,led1=1;delay(1000); 应该写在while(1)里面循环。
第三点,你在外部中断里面只写了点亮led2。并没有写熄灭led1.   暂时只看出这三点,慢慢改吧。
七七德德
3楼-- · 2019-07-16 01:29
上面说错了,为1是下降沿触发。
赤焰火狐
4楼-- · 2019-07-16 06:07
 精彩回答 2  元偷偷看……
赤焰火狐
5楼-- · 2019-07-16 11:31
还需在while(1)大循环中加入led2=1;这样退出中断后就可以将led2熄灭
@曲终人散@
6楼-- · 2019-07-16 13:22
                二楼说的对

一周热门 更多>