//我这个程序功能是让数码管和led灯同步跳动,P0是led灯,P2是数码管,但是仿真时发现外部中断0没反应?不知道是哪里的问题?
#include <reg51.h>
void delay(unsigned char c);
char table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };//0,1,2,3,4,5,6,7,8,9
int a,b,d,e,f,g,h,i,m,protect1,protect2,protect3,protect4,protect5;//全局变量
void main()
{
P1=0x00;//数码管位
TMOD=0x01;//t0方式1
EA=1;//开总中断
ET0=1;//定时器0允许
EX0=1;//外部中断0
IT0=1;//下降沿触发
TH0=0x9E;//十六进制的9E58是40536,说明定时器0定时了25000.
TL0=0x58;
for(d=5;d>0;d--)
{
P0=0xf6;
P2=table[d];
delay(2);
}
while(1)
{
for(e=10;e>0;e--)
{P0=0xf3;
P2=table[e-1];
delay(2);
}
for(f=3;f>0;f--)//南北黄灯闪烁3次;0.5秒亮 0.5秒灭 //(3)
{
P2=table[f];
P0=0xf5; //亮
delay(1);
P0=0xf7;//灭
delay(1);
}
for(g=10;g>0;g--) //南北红东西绿
{
P0=0xde;
P2=table[g-1];
delay(2);
}
for(h=3;h>0;h--)//南北红灯、东西黄灯闪烁3次共3秒 //(5)
{
P2=table[h];
P0=0xee;//亮
delay(1);
P0=0xfe;//灭
delay(1);
}
}
}
void delay(unsigned char c) //定时器0.25s
{
for(b=0;b<c;b++)
{
for(a=0;a<20;a++)
{
TH0=0x9E;//十六进制的9E58是40536,说明定时器0定时了25000.
TL0=0x58;
TR0=1;//开定时器0
while(!TF0);//等待溢出
TF0=0;//溢出标志置0
TR0=0;
}
}
}
void int_0() interrupt 0//外部中断0 救护车
{
/*protect1=a;
protect2=b;
protect3=TH0;
protect4=TL0;
protect5=P0;
*/
//for(m=5;m>0;m--)
//{
P0=0x00;
//P2=table[m];
//delay(1);
//}
/*
a=protect1;
b=protect2;
TH0=protect3;
TL0=protect4;
P0=protect5;
*/
} |