51单片机外部中断问题,高手进。。。

来源:百度知道 编辑:UC知道 时间:2024/05/22 07:57:19
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar num;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
void delay(uint z);
void main()
{
P3=0x00;//通电
EA=1;IT0=1;
EX0=1;

while(1)
{
for(num=0;num<10;num++)
{
P0=table[num];
delay(1000);
}
}
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}void extero(void)interrupt 0 using 1
{
beep=0;
}
这个程序本来要实现中断时蜂鸣器响,结果一运行蜂鸣器就响,不知道什么问题?高手拜托了!
外围电路?我是网购的开发板,电路图我这里有,我怎么给你呢?你QQ?

你程序里有每个问题,第一P3口的初始化应该设定为0XFF,因为你是要读引脚的信号。
第二,你的P2^3引脚置零后蜂鸣器就响,你又没置1,所以你的蜂鸣器会一直响。我临时写了个小程序,也没运行,但应该没问题,希望读你有帮助。注意:中断时间间隔最好是大于延时时间。
#include<reg52.h>
sbit Beep=P2^3
bit Beep_flg
void delay(void) //延时
{
unsigned char i,j;
for(i=3;i>0;i--)
for(i=100;i>0;i--);
}
void main()
{
P3=0xff;//P3口初始化
EA=1;//全局中断开
EX0=1;//外部中断0开
IT0=1;//边沿触发
while(1)
{
if(Beep_flg) //是否中断
{
Beep=0; //打开蜂鸣器
delay(); // 延时
Beep_flg=0;
}
Beep=1; //关蜂鸣器
}
}

void it0(void) interrupt 0 using 1
{
Beep_flg=1;
}

P3=0x00;//通电.把这句注释就可以了
P3口作为输入时,是要向它写1的,使输入引脚处于高阻状态。
这样子才能实现真正的读引脚.虽然是做第二功能端口。

你的外围电路怎么接的?