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