#include <REG51.H> #define uchar unsigned char #define uint unsigned int uchar code SEG7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar ACT[4]={0xfe,0xfd,0xfb,0xf7}; uint ms,i; bit bdata bitflag; /**************************************************/ void delay(uint k) { uint data l,j; for(l=0;l<k;l++) { for(j=0;j<121;j++){;} } } /****************************/ void initial(void) { for(i=0;i<100;i++) { P1=SEG7[ms/1000]; P2=ACT[0]; delay(1); P1=SEG7[(ms%1000)/100]; P2=ACT[1]; delay(1); P1=SEG7[((ms%1000)%100)/10]; P2=ACT[2]; delay(1); P1=SEG7[((ms%1000)%100)%10]; P2=ACT[3]; delay(1); } TMOD=0x02; TH0=0x77; TL0=0x77; IE=0x00; TR0=1; EX0=1; IT0=1; EA=1; bitflag=0; }
/*************************************************/ void main(void) { ms=0; initial(); for(;;) { while(!TF0); ms++; TF0=0; if(ms>9999) { ms=0; } } } /************************************************/ void extern_int0(void) interrupt 0 using 0 { for(;;) { P1=SEG7[ms/1000]; P2=ACT[0]; P1=SEG7[(ms%1000)/100]; P2=ACT[1]; P1=SEG7[((ms%1000)%100)/10]; P2=ACT[2]; P1=SEG7[((ms%1000)%100)%10]; P2=ACT[3]; } }
上面这个小程序,我本意是让它初始化显示个1秒 0000,然后显示0保持不变。 我在INT0脚接了个1K的下拉电阻,平时是低的,一旦外面给了个脉冲,则下降沿有效,进入中断,并且实时显示此时的MS值。 但现在的问题是,一打开就进入中断。。。为什么我知道呢,因为我把中断的那段去掉就可以正常初始化,但一加上中断就无条件进入中断。我测量12脚INT0也是低电平啊,为什么呢。 |