#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值的变化,或者写个简单的程序下载到板子上验证
有启动定时器,但是没有写定时器中断服务程序。可以改成这样
#include "reg52.h" void main() { TMOD = 0x01; TL0 = 0xf0; TH0 = 0xd8; ET0 = 1; EA = 1; TR0 = 1; //定时器/计数器0启动 } void timerms() interrup 1 { TL0 = 0xf0; TH0 = 0xd8; if(....) { //......... } }
这不是咋拉客啊!但是我强烈建议你,来我们Proteus板块
//www.icxbk.com/group-show-id-19.html
不敢说能实时的去解决工程问题,但也许,类似51,avr,pic,430,arm7之类的问题,能得到快速响应。
心动了吗?心动了就来呗!
他手动清除标记,也可以,如果在这个程序上改的话,可以加个循环。
“驴”哥,您觉得呢?
那就是TF = 1了呗。
那为什么等于了1呢。
定时时间到了!
我的不是TF!=1 时循环吗 TF=1时不就跳出循环了 应该继续往下了吗
可是我这一直执行不到TF=0啊
嗯,看他工艺吧,有什么具体要求呗。
突然我感觉你叫“驴”哥,不咋上口呢。
叫 “阿驴”吧,怎么样!
对啊,等待定时溢出,然后跳出循环!
你可以产看TH0和TL0的值,如跳出后,值应该是0xff,0xff。
不知道我说明白没。
额哦!是用keil软仿真?