郭天祥51学习板中断时间问题求教
时间:10-02
整理:3721RD
点击:
我写了个流水灯的程序,每秒亮下一个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);
- }
- }
我想问一下,这真的是郭天祥大哥的板子例程吗?如果这是的话,你不要跟他学了,定时器0你连配置都没有配置好,你怎么能指望他能正常工作呢?小编是不是你粗心了?你看看例程上人家是怎么写的?看不出来再来问我。
如果晶振是11.0592M,你定时器的初值就计算错了,我觉得新手遇到问题就应该多琢磨,而不是马上发帖子问人.
小编定时器的初值并没有计算错,如果是12M的晶振可以按上述配置,11.0592M的要多加一些机器周期,但也差不多的,又不是弄串口波特率,没大碍,别误导人家,而是定时器0配置不完整而已,请问TMOD寄存器为什么不去配置?我写个你参考一下
TMOD &= 0XF0;
TMOS |= 0X01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
TR0 = 1;
ET0 = 1;
EA = 1;
明白了吗?这个才是完整的配置,
TMOD写错了。
定时器有问题,4#正解,可以试试,最好弄懂再写,多看中断定时器