找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3086|回复: 11
收起左侧

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

[复制链接]
ID:195542 发表于 2017-5-2 13:21 | 显示全部楼层 |阅读模式
新手刚学习51单片机没多久,遇到一个不知道怎么解决的问题,希望各位大神能点拨下,谢谢!如果我在一个中断里将参数a(a是全局变量)给定时器赋初值,比如TH0=(65536-a)/256  TL0=(65536-a)%256这样的。在定时器开始计数了但是还没溢出的这段时间里,如果我a的值发生了改变,那这次定时器的计数工作还能正常进行吗?定时器是按原本的a值继续计数,还是停止工作呢?
回复

使用道具 举报

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
可以设置不同的模式,查一下数据手册

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

使用道具 举报

ID:195706 发表于 2017-5-2 19:11 | 显示全部楼层
这个和单片机也有关
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

ID:192650 发表于 2017-5-3 11:05 | 显示全部楼层
在初始化的时候 他就会按照当前a的那个值计算   这也与定时器的工作方式有关
回复

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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 单片机教程网

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