找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2605|回复: 11
打印 上一主题 下一主题
收起左侧

小白求教关于51单片机定时器的问题

[复制链接]
跳转到指定楼层
楼主
ID:195542 发表于 2017-5-2 13:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新手刚学习51单片机没多久,遇到一个不知道怎么解决的问题,希望各位大神能点拨下,谢谢!如果我在一个中断里将参数a(a是全局变量)给定时器赋初值,比如TH0=(65536-a)/256  TL0=(65536-a)%256这样的。在定时器开始计数了但是还没溢出的这段时间里,如果我a的值发生了改变,那这次定时器的计数工作还能正常进行吗?定时器是按原本的a值继续计数,还是停止工作呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:195542 发表于 2017-5-2 18:31 | 只看该作者
新人自顶!!求大神帮忙啊!
回复

使用道具 举报

板凳
ID:195693 发表于 2017-5-2 18:37 | 只看该作者
可以设置不同的模式,查一下数据手册
回复

使用道具 举报

地板
ID:195542 发表于 2017-5-2 18:46 | 只看该作者
爱羊仔 发表于 2017-5-2 18:37
可以设置不同的模式,查一下数据手册

朋友,你没有明白我的意思。
回复

使用道具 举报

5#
ID:195706 发表于 2017-5-2 19:11 | 只看该作者
这个和单片机也有关
回复

使用道具 举报

6#
ID:142402 发表于 2017-5-2 19:30 | 只看该作者
你可以写个程序试一下,比如让灯闪,在主程序里改变a的值(要注意语句执行是需要时间的,所以你的定时不能太快,要慢一点,也就是a取值不要太小)
回复

使用道具 举报

7#
ID:195690 发表于 2017-5-2 20:17 | 只看该作者
如果是51的话,使用keil可以使用软件调试,即"Debug",在你a值改变的地方和中断程序处,设置断点,然后全速运行至断点处,通过变量窗口可以查看到变量值是否发生改变,看看改变a值,溢出的时间会不会发生变化。如果不明白,回头给你截图
回复

使用道具 举报

8#
ID:123289 发表于 2017-5-3 01:56 | 只看该作者
TH0与TL0构成一个16位的计数器,能改动其中的值只有以下三个方法:
1、向里送数(含重置)。
2、计数器的CLK被接通,每个CLK将其-1。
3、单片机复位动作将其复成0。
楼主的A参数,与之风马牛不相及。只有做将A参数送至TH0或TL0的动作时(你所谓的初始化,就是向里送数)才能使之变化。
回复

使用道具 举报

9#
ID:192650 发表于 2017-5-3 11:05 | 只看该作者
在初始化的时候 他就会按照当前a的那个值计算   这也与定时器的工作方式有关
回复

使用道具 举报

10#
ID:195542 发表于 2017-5-3 13:12 | 只看该作者
lzhlzh 发表于 2017-5-2 19:30
你可以写个程序试一下,比如让灯闪,在主程序里改变a的值(要注意语句执行是需要时间的,所以你的定时不能 ...

非常感谢!试了下,看来a的值变化是不会影响到定时器工作。
回复

使用道具 举报

11#
ID:195542 发表于 2017-5-3 13:15 | 只看该作者
yzwzfyz 发表于 2017-5-3 01:56
TH0与TL0构成一个16位的计数器,能改动其中的值只有以下三个方法:
1、向里送数(含重置)。
2、计数器的 ...

谢谢!也就是说定时器里的初值只可能是确定的数,不会是个不确定的参数是吗?
回复

使用道具 举报

12#
ID:195542 发表于 2017-5-3 13:22 | 只看该作者
学习电子知识 发表于 2017-5-2 20:17
如果是51的话,使用keil可以使用软件调试,即"Debug",在你a值改变的地方和中断程序处,设置断点,然后全速 ...

谢谢您的帮助,改变a的值后溢出时间没有发生变化,让我又学会一种分析问题的办法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表