微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 定时器是不是必须与中断程序一起使用?

定时器是不是必须与中断程序一起使用?

时间:10-02 整理:3721RD 点击:
大家好,之前数码管动态扫描,设置每一个数码管的持续时间的时候是用的delay()的延时函数来操作的。但是老师说定时器才是最精确的计时方式,今天就试着写了一个用定时器的短程序,但不知道为什么在不加delay()函数的时候,led是全部点亮的,只有加了delay()延时函数以后才能看到流水灯。不知道是不是我定时器的使用方法错了啊,请大神指正一下吧谢谢啦~晶振频率是11.0592MHZ的,定时器是不是必须与中断程序一起使用啊~~!


中断只是定时器使用的一种常用的方式而已,也可以使用查询法判断定时器是否溢出来定时,也是很准确的。你的程序没什么问题的,是定时时间太短了的原因,把定时频率调低一点就行了。

先谢谢你啦,只是这个程序 延时时间好像是用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语句有问题。缺少个大括号。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top