我使用内部时钟周期为200ns的PIC16F88X,并且我希望对TIMER0
进行编程,使其每秒进行4次测量。
根据microchip tutorial on programming timer 0(第10页),我可以使用PS0
,PS1
和PS2
将TMR0 RATE
指定为1:256但这只会让我时钟周期缩放到51,2微秒。
还可以为TMR0
编制初始值,但我认为它不会影响我想要达到的时钟。我失踪的大局上有什么东西吗?
答案 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