打印
[51单片机]

问一个很原始的问题。TR0关闭的时候,计数是什么状态?

[复制链接]
1622|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianqi911|  楼主 | 2018-9-25 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
xyz549040622| | 2018-9-25 16:37 | 只看该作者
这个问题,真心赞,确实没考虑到这个问题。因为我一般定时器不会关闭,即使关闭,也不会在意这点时间误差,所以从来没考虑到。
----------
但是我猜测,应该是不同的MCU,处理机制是不一样的。

使用特权

评论回复
评论
tianqi911 2018-9-26 13:45 回复TA
不是用来定时的,是做__无极变速__用的,就是_无级别调PWM_。 
板凳
ayb_ice| | 2018-9-25 16:39 | 只看该作者
不会清零的,只会暂停在停止前的状态

使用特权

评论回复
地板
mcu5i51| | 2018-9-25 17:03 | 只看该作者
有些会清零,多数是暂停,芯片手册上没有说清零的就是暂停了;

使用特权

评论回复
5
airwill| | 2018-9-26 07:12 | 只看该作者
不应该清零, 暂停才是合理的.
不过软件中尽量不要关闭定时器, 那会导致没有办法保证系统时间基准的

使用特权

评论回复
6
ningling_21| | 2018-9-26 09:55 | 只看该作者
保持原来的数值,可以读取定时器的寄存器

使用特权

评论回复
7
tianqi911|  楼主 | 2018-9-26 13:43 | 只看该作者
这个问题的起因是,1T51,_无极调节PWM_的问题。          看到程序就是利用TR0的开和关实现的。计数是暂停的,再次打开,就是从暂停的地方继续计数的。         越来越感觉,写程序真的是只有想不到,没有做不到。  感谢楼上的各位高手。

使用特权

评论回复
8
coody| | 2018-9-26 14:27 | 只看该作者
TR0=0,定时器停止计数,原有计数值保持。

使用特权

评论回复
9
linqing171| | 2018-9-27 22:02 | 只看该作者
到目前为止,用了这么多单片机了,还没有见过暂停后会自动清零的。
因为你写入的pwm_high的值不会立即生效,需要溢出的瞬间生效,也就是硬件上有双缓冲同步,所以你不需要软件上做防止脉宽过窄等的处理。

很久前做CPLD的时候,没有加双缓冲。   计数器从0 ++ 到255,计数值和你设置的High=47相等的时候翻转输出为低,溢出变为0的时候翻转输出为高。当计数到45的时候,你填写了43进去,则 计数值=High 这个拍就不会出现,就一个整周期都无法发生低电平。导通角过大,马达监控逻辑报警。

使用特权

评论回复
10
tianqi911|  楼主 | 2018-9-28 09:16 | 只看该作者
linqing171 发表于 2018-9-27 22:02
到目前为止,用了这么多单片机了,还没有见过暂停后会自动清零的。
因为你写入的pwm_high的值不会立即生效 ...

啥叫“硬件上的双缓冲”?是类似51上面那个UART的缓存吗?

使用特权

评论回复
11
linqing171| | 2018-9-28 15:53 | 只看该作者
tianqi911 发表于 2018-9-28 09:16
啥叫“硬件上的双缓冲”?是类似51上面那个UART的缓存吗?

软件能看到的寄存器,和硬件比较真正用的寄存器,不是同一个。
硬件的在溢出的瞬间,把软件写入的那个复制到硬件里面,同时生效。
硬件的寄存器就和软件的寄存器的影子一样。

双字节定时器值的读也是,读一个,高低字节同时锁存了。读的另一个其实是锁存值,确保这两个读出来是一套的。而不是定时器内部当前计数的实际值。



使用特权

评论回复
评论
tianqi911 2018-9-28 17:23 回复TA
虽然不懂,但是我会去再查找下。感谢高人。 
12
gx_huang| | 2018-9-28 15:59 | 只看该作者
只要多看看数据手册,看看定时器的硬件框图,或者凭第六感觉,就知道了,TR0=0,停止给定时器提供时钟或者脉冲,暂停了,所有状态冻结了。

使用特权

评论回复
评论
tianqi911 2018-9-28 17:22 回复TA
哈哈。高人,灵异第6感。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

235

帖子

2

粉丝