#include<reg52.h>
extern void display(unsigned char shi,unsigned char ge);
unsigned char num;
unsigned char count_num;
void init()
{
TMOD=0x01;
TH0=0x4c;
TL0=0x00;//50msT0Òç³ö,½øÈëÖжϳÌÐò
EA=1;
ET0=1;
EX1=1;
EX0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
if(num==100)
{
num=0;
}
if(num%5==0&&num!=0)//¼ÆÊý¼Æµ½5µÄ±¶ÊýµÄʱºò½øÈëµôµçģʽ¡£
{
ET0=0;
PCON=0x02;
}
display(num/10,num%10);
}
}
void T0_inter() interrupt 1
{
TH0=0x40;
TL0=0x00;
++count_num;
if(count_num==20)
{
count_num=0;
++num;
}
}
void INT0_inter() interrupt 0
{
PCON=0;
ET0=1;
}
void INT1_inter() interrupt 2
{
PCON=0;
ET0=1;
}
程序的目的就是1s钟num的值+1,2个数码管显示num的数值。然后num是5的倍数的时候单片机进入掉电模式。当有外部中断的时候唤醒单片机,显示的数值继续加1。实际运行的时候,数码管显示4的时候休眠,只有一个数码管显示4.我用导线一端接地,另外一端去触碰INT0或者INT1,用导线触碰INT1的时候没问题正常运行。用导线触碰INT0的时候,数码管会显示5,但是之后数值不再改变了。这个是怎么回事?是硬件问题吗还是别的什么? |