Timer PIC16F882上大于最大预分频器值的编程定时器0

Timer PIC16F882上大于最大预分频器值的编程定时器0,timer,microcontroller,pic,microchip,Timer,Microcontroller,Pic,Microchip,我使用的是内部时钟周期为200ns的,我想编程定时器0每秒进行4次测量 根据(第10页),我可以使用PS0、PS1和PS2将TMR0速率分配到1:256,但这只会使我的时钟周期缩放到51,2微秒 也可以为TMR0编程初始值,但我认为这不会影响我想要达到的时钟。大画面上有什么我遗漏的吗?预计定时器预分频器不能覆盖用户可能想要的任何范围。为了获得更大的间隔,您必须在定时器中断例程中添加额外的逻辑。基本上,您必须添加额外的变量/计数器,您必须增加这些变量/计数器,比如在50us上(您将通过向TMR0添

我使用的是内部时钟周期为200ns的,我想编程
定时器0
每秒进行4次测量

根据(第10页),我可以使用
PS0
PS1
PS2
TMR0速率分配到1:256,但这只会使我的时钟周期缩放到51,2微秒


也可以为
TMR0
编程初始值,但我认为这不会影响我想要达到的时钟。大画面上有什么我遗漏的吗?

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


希望它有帮助…

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


希望对您有所帮助……

查看规格表()第76页,我们看到此微控制器上可用的计时器1为16位,最多有8个预定标器。我自己的方法是使用timer1和8的预调谐器。在不手动设定值种子的情况下,这将提供:

<osc speed>/(4*<prescaller>*2^16)
5MHz/(4*8*2^16) = 2.38Hz
/(4**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
2^16-/(*4*)
2^16-5MHz/(4Hz*4*8)=26474

查看规格表()第76页,我们发现该微控制器上可用的定时器1为16位,最多有8个预定标器。我自己的方法是使用timer1和8的预调谐器。在不手动设定值种子的情况下,这将提供:

<osc speed>/(4*<prescaller>*2^16)
5MHz/(4*8*2^16) = 2.38Hz
/(4**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
2^16-/(*4*)
2^16-5MHz/(4Hz*4*8)=26474

我忘了指定
TMR0
是一个8位计数器,所以它只升到256位。那么,在溢出256*51,2us之前,它可以计算的最长时间是多少?准确地说。如Timer0模块中所述,是一个8位计时器/计数器,具有以下功能:•8位计时器/计数器寄存器(TMR0)•8位预分频器,这意味着您的计算是正确的,您必须为
TMR0
和预分频器选择值,然后才能在ISR中实现您自己的代码。我忘记指定
TMR0
是一个8位计数器,因此它最多只能达到256位。那么,在溢出256*51,2us之前,它可以计算的最长时间是多少?准确地说。如Timer0模块中所述,8位定时器/计数器具有以下功能:•8位定时器/计数器寄存器(TMR0)•8位预分频器,这意味着您的计算是正确的,您必须为
TMR0
和预分频器选择值,然后在ISR中实现您自己的代码。