打印

PIC timer0运用疑惑请各位大虾指点

[复制链接]
2797|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
e-man|  楼主 | 2013-4-26 20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
指导手册提到:
当预分频器分配给Timer0 模块时,对TMR0 寄存器执行的所有指令写入操作( 如CLRF TMR0,
MOVWF TMR0, BSF TMR0,x.... 等) 都将对预分频器清零。当预分频器分配给WDT 时, 执行
CLRWDT 指令将同时将预分频器和WDT 清零。预分频器是不可读写的。
——————————————————————————————————————————————
但是我在porteus的一段程序:
PS2:PS0=111 256分之一分频
void interrupt IRS(void)
                   {
                         if(TMR0IE & TMR0IF)
                         {
                                 Times++;
                                 TMR0 = Count;
                                 TMR0IF = 0;
                     }
                                 
                  }
对重装TMR0进行了操作,观察PS2:PS0却没有变化。这是为什么???应该如何理解另外一版下面一段文字的意思??
Note: Writing to TMR0 when the prescaler is
assigned to Timer0 will clear the prescaler
count, but will not change the prescaler
assignment.
请各位给予解释一下,谢谢。
沙发
flowerbear| | 2013-4-26 22:39 | 只看该作者
虽然这样用定时器不会有问题,但是我和楼主有一样的疑惑,望高手指点迷津

使用特权

评论回复
板凳
huangxz| | 2013-4-26 23:08 | 只看该作者
只是清空预分频器的计数值,不会情况分频比
比如:1:8->
计数值:1.2.3.4.5 TMR0写 计数值就变成了0
但是1:8还是不变

使用特权

评论回复
地板
e-man|  楼主 | 2013-4-27 16:55 | 只看该作者
再问一下:计数值是指什么?具体有没有指向某一寄存器?我查了网上有人给我一下例程,有人建议一旦是使用预分频就不要对TMR0写操作,是否需要遵循此规则呢?

使用特权

评论回复
5
huangxz| | 2013-4-27 17:17 | 只看该作者
计数值是内部的,对PIC18系列好像是没有操作寄存器,有些芯片(如NXP的arm,cortex可以直接看到),
对TMR的操作是必须的,不知楼主挺谁的建议不要写操作,(我认为这个建议是完全错误的,欢迎持不同意此意见的拍砖:lol)很多定时器是根据溢出来产生事件,有些定时器甚至唯一的事件就是溢出事件,这样只有通过改变TMR来改变定时长度。

使用特权

评论回复
6
兰天白云| | 2013-5-4 15:54 | 只看该作者
LZ对手册理解有误
“对TMR0 寄存器执行的所有指令写入操作( 如CLRF TMR0,
MOVWF TMR0, BSF TMR0,x.... 等) 都将对预分频器清零”

这里有两个概念,一个是设置的预分频值,另一个是预分频器的计数值(预分频器)
预分频值是你在代码里写好的,是不变的,除非你在代码里又对其赋值
预分频器的计数值是变化的,如你设的预分频是8,那么预分频器就从1开始,然后2,3,4,5,6,7,再然后复位到0,当复位到0时,另一个计数器才加1
手册里说的预分频器清零指的是未数到7时就被清零,例如,当预分频器计数到3时,你写T0,那么预分频器就直接从3复位到0,而不是往下数到4,

不知道这样解释明白吗?

使用特权

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

本版积分规则

1

主题

3

帖子

1

粉丝