定时器是不是必须与中断程序一起使用?
中断只是定时器使用的一种常用的方式而已,也可以使用查询法判断定时器是否溢出来定时,也是很准确的。你的程序没什么问题的,是定时时间太短了的原因,把定时频率调低一点就行了。
先谢谢你啦,只是这个程序 延时时间好像是用delay()延时函数来实现的,好像定时器在整个过程中没起作用呢,我删掉delay()这个延时函数之后,LED就是全部点亮的,修改sec==50(设置初值为20ms,所以我想50次不就是1s了嘛) 改成sec==500,也还是那样~~!,所以我想问下:
我设置的定时器的50ms是不是没起作用 ,为什么啊?
这里的延时程序既有delay(),又有定时器,那单片机到底是用谁来定时的啊?(现在看来是用delay()延时的)为什么呢?
我想精确延时,只用定时器的话,这个程序应该怎么修改呢?谢谢你啦
我的意思是把delay去掉的话。51单片机很久没用了,定时器初始化这一块我不知道你是不是初始化对了,你先用软件仿真试试能不能进入定时器中断程序。
假设你的定时器都是正常的,可以中断我简单的帮你算了一下,51单片机的定时器是向上增长的吧,所以溢出时间为
0xFFFF - 0xB800 = 18431,周期是18431 / 11059200,50次的话就是 50 * 18431 / 11059200 = 0.0833288秒,这个时间间隔太短了吧,sec改成uint类型然后复制500试试吧。
谢谢你啦~程序我终于终于改好咯~ 好像是我写的不太清楚,还是很谢谢你~~
那个~请问 你看我这个程序是什么时候进入中断程序的啊?我大概 就剩这一个问题了,,,谢啦
这个是可以软件仿真的,上边也有时间的,你可在想要停止的地方设置一个断点,这样你就知道什么时候进入的这个程序了
定时器溢出就会进入中断,中断标志位被置位,可以通过程序循环判断中断标志位是否置位来判断定时器是否溢出。
差点忘了这回事了,,谢啦
学习了 非常好的求助帖
不一定
贴主问题搞定了没
if语句有问题。缺少个大括号。