打印
[技术问答]

新手上路,求教关于定时器操作

[复制链接]
1008|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 pankration 于 2015-11-21 09:55 编辑

前一段时间做了使一个LED闪烁的实验,不过用的是自己写的粗略延时函数,想着用定时器来实现精确延时,顺便学习定时器的使用。

看到了这个函数,觉得使用起来应该会很方便,就做了个小实验,


使一个LED闪烁,间隔1秒,


但是下载之后LED一直在亮,就单步调试一下,发现其实是在闪烁,只不过频率很快,


这是用逻辑分析仪采的信号。

所以想请教各位,这种问题如何解决,谢谢。

NUC220
KEIL MDK511

沙发
pankration|  楼主 | 2015-11-21 10:44 | 只看该作者
这个问题已经搞定,原因是没有对Timer进行初始化

使用特权

评论回复
板凳
稳稳の幸福| | 2015-11-21 15:47 | 只看该作者
跟你写的时间,应该是设置单片机的主频在1MHz,才可以的,这样就是刚好一秒 了。

使用特权

评论回复
地板
pankration|  楼主 | 2015-11-21 16:38 | 只看该作者
稳稳の幸福 发表于 2015-11-21 15:47
跟你写的时间,应该是设置单片机的主频在1MHz,才可以的,这样就是刚好一秒 了。 ...

很感谢你的回复,这个问题是由于忘记设置Timer的时钟源引起的

使用特权

评论回复
5
C洛达尔多| | 2015-11-21 17:11 | 只看该作者
pankration 发表于 2015-11-21 10:44
这个问题已经搞定,原因是没有对Timer进行初始化

楼主把系统加上吧,定时比较准确

使用特权

评论回复
6
pankration|  楼主 | 2015-11-23 07:43 | 只看该作者
C洛达尔多 发表于 2015-11-21 17:11
楼主把系统加上吧,定时比较准确

是操作系统吗?

使用特权

评论回复
7
稳稳の幸福| | 2015-11-23 21:22 | 只看该作者
延时函数没有跟上,延时太短暂了,或许是主频太高了。

使用特权

评论回复
8
pankration|  楼主 | 2015-11-24 07:59 | 只看该作者
稳稳の幸福 发表于 2015-11-23 21:22
延时函数没有跟上,延时太短暂了,或许是主频太高了。

主频用了12M外晶振。如果是延时问题的话,那我只是在系统初始化的时候初始化了定时器的时钟,就可以正常工作了,这样是不是应该说明由于没有初始化定时器的时钟源,所以导致定时器工作异常,而与延时无关呢?

使用特权

评论回复
9
玛尼玛尼哄| | 2015-11-24 10:52 | 只看该作者
看出来你的问题 了,你那个参数是一百万?你要知道你那个参数的类似是什么,就是传递过去后给的变量类型,是整形吗?整形只能是
int数据的范围分两种:
一是有符号整数,即 int 范围是-32768~32767
二是无符号整数,即 unsigned int 范围是0~65535

使用特权

评论回复
10
玛尼玛尼哄| | 2015-11-24 10:53 | 只看该作者
一般延时函数都是用的无符号 ,也就是二是无符号整数,即 unsigned int 范围是0~65535
因此你的超过了这个界限,所以不对,请下次注意。

使用特权

评论回复
11
pankration|  楼主 | 2015-11-24 11:07 | 只看该作者
玛尼玛尼哄 发表于 2015-11-24 10:53
一般延时函数都是用的无符号 ,也就是二是无符号整数,即 unsigned int 范围是0~65535
因此你的超过了这个 ...

该函数的第二个参数应该是一个32位的无符号整数,应该不会超过的,一楼那个是官方提供的库函数。

这是在加完4楼代码之后执行的效果,TIMER_Delay(TIMER0, 1000000);用的这个函数。



使用特权

评论回复
12
玛尼玛尼哄| | 2015-11-24 11:36 | 只看该作者
默认的时钟源是什么呢?4楼你说忘记了设置时钟源,那么既然工作了,肯定是在运行。

使用特权

评论回复
13
pankration|  楼主 | 2015-11-24 13:26 | 只看该作者
玛尼玛尼哄 发表于 2015-11-24 11:36
默认的时钟源是什么呢?4楼你说忘记了设置时钟源,那么既然工作了,肯定是在运行。 ...

嗯。。。这个我再仔细看下资料,谢谢您的回复

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

29

帖子

0

粉丝