在看郭天祥单片机视频时发现关于中断的一个问题,一直搞不明白,特向大家请教: 80c51的编程,程序如下: #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char uchar temp,aa,num; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uint z); void main() { num=0; aa=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; temp=0xfe; P1=temp; dula=1; P0=table[0]; dula=0; wela=1; P0=0xc0; wela=0; while(1) { delay(1000); temp=_crol_(temp,1); P1=temp; if(aa==40) { aa=0; num++; if(num==16) num=0; dula=1; P0=table[num]; dula=0; } } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; }
本程序实现的功能是流水灯运行的同时,数码管也在不断显示数字。 如果使用上面的程序的话,单独运行流水灯是正确的,单独运行数码管是正确的,可是放在一起确实流水灯正常运行,可是数码管却很长时间才改变一下显示数字。 而如果把主函数中的if语句放入中断函数中,程序就正常运行了。 在此向大家请教一下原因,希望帮忙详细分析一下 |