对PIC16F882上的Timer0进行编程,使其值大于最大PRESCALER

时间:2016-04-26 06:31:32

标签: timer microcontroller pic microchip

我使用内部时钟周期为200ns的PIC16F88X,并且我希望对TIMER0进行编程,使其每秒进行4次测量。

根据microchip tutorial on programming timer 0(第10页),我可以使用PS0PS1PS2TMR0 RATE指定为1:256但这只会让我时钟周期缩放到51,2微秒。

还可以为TMR0编制初始值,但我认为它不会影响我想要达到的时钟。我失踪的大局上有什么东西吗?

2 个答案:

答案 0 :(得分:4)

预计定时器预分频器不能覆盖用户可能想要的任何范围。为了获得更大的间隔,您必须在您的定时器中断例程中添加额外的逻辑。基本上你必须添加你必须增加的额外变量/计数器,让我们说50us(你会通过向TMR0添加初始值来将计时器从51,2us调整到50us)。当你的计数器达到5000时,你需要1 / 4s的分辨率。

希望它有所帮助...

答案 1 :(得分:1)

查看规格表(http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf)第76页,我们看到此微控制器上的timer1是16位,并且最多有8个预分频器。我自己的方法是使用带预测器8的timer1。如果不手动设置值,则会给出:

<osc speed>/(4*<prescaller>*2^16)
5MHz/(4*8*2^16) = 2.38Hz

要准确获得4Hz,您可以在每次翻转时将计数器播种到值:

2^16-<osc speed>/(<desired speed>*4*<prescaller>)
2^16-5MHz/(4Hz*4*8) = 26474