我写了个流水灯的程序,每秒亮下一个LED灯,我看了下晶振,11.0592MHZ,一个机器周期应该约等于1US,我50MS进一次中断,20次灯移动一次亮度。但是运行结果发现大概是0.1s就移动一次,这是为什么呢?
具体程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar temp,count;
- void main()
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- temp=0xfe;
-
- while(1)
- {
- P1=temp;
- }
- }
- void time0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count++;
- if(count==20)
- {
- count=0;
- temp=_crol_(temp,1);
- }
- }
复制代码请高手指点下为什么时间会差10倍,上面的程序大概是每0.1S下一个灯会亮。把COUNT==20改成200才会变成1S
一周热门 更多>