#include "reg52.h" void timerms(); void main() { TMOD = 0x01; TL0 = 0xf0; TH0 = 0xd8; ET0 = 1; EA = 1; timerms(); } void timerms() { TR0 = 1; //定时器/计数器0启动 while(TF0!=1) {} TF0 = 0; TL0 = 0xf0; TH0 = 0xd8; }
请教 这段程序有什么问题 为什么不能正常启动定时器呢
需要TL0、TH0计满数,TF才置1,你可以全速运行观察一下TF值的变化,或者写个简单的程序下载到板子上验证
我粗心了,当时着急抢着回帖。
看图,我的确实屏蔽了中断! 中断后,TF0被复位,但是TL0和TH0满值,而这时候分频器没有被断开,于是再次溢出? 但是哈!TF1不是这样的,在模式2中,同时触发TF2和复位TL0!于是不用非要进中断。同时,你可以尝试一下定时2,他比定时器0和1更加灵活。具体参考Proteus板块里面,我出的一个开发板。 嗨,纠正错误的同时也不能忘了给自己的板块做广告啊!
如果用STC的单片机如果只能MAIN();不断的初始化会有问题,修改成试试
#include "reg52.h" void timerms(); void main() { TMOD = 0x01; TL0 = 0xf0; TH0 = 0xd8; ET0 = 1; EA = 1;
while(1){ timerms();} } void timerms() { TR0 = 1; //定时器/计数器0启动 while(TF0!=1) {} TF0 = 0; TL0 = 0xf0; TH0 = 0xd8; }