我可以问一下,当设置Timer0值时,为什么在某些情况下人们必须使用减法来表示预设的Timer0,而不是直接使用它的结果(在这种情况下,是175 )?在这种情况下,UL后缀的目的是什么?
可检验:
X=255 Ul-80;
无效中断ISR(无效)
{
(T0IF)
{
中转站、中转站;
中转站、中转站;
(B).=
}
}
..。
发布于 2022-04-17 05:15:07
微芯片文档描述了TIMER0模块的工作方式。
它没有很好地描述如何使用这个计数器/定时器模块的方法。
与当今任何现代嵌入式控制器相比,TIMER0模块的基本架构是非常原始的。还不清楚为什么微芯片坚持在新的8位PIC控制器中包括这个计数器/定时器模块。要明白,35年前,最大限度地利用最少数量的晶体管实现功能最大化是一项挑战,以便每个控制器芯片尽可能小,并且每个晶片产生最多的芯片。
TIMER0的工作方式是up计数器。当第一次实现时,控制器根本不支持中断。参见基线控制器(如PIC12F508 )。中程控制器(如PIC16F877 )增加了对中断的支持,TIMER0获得了当8位计数寄存器从0xFF转到0x00时请求中断的功能。当TIMER0计数寄存器从0x00开始时,TIMER0需要256个计数才能断言中断请求。当需要在一定数量的计数之后断言中断时,将计数寄存器设置为256-(Specific_Number_Of_Counts)值,然后清除TIMER0中断请求。
开发人员使用此特性使TIMER0中断请求在特定数量的计数后断言。
在你的问题中的例子中有一个“一对一”的错误:
X=255 Ul-80;
由于TIMER0计数寄存器的值在80次计数后将为0xFF,而TIMER0中断请求将在81次计数后设置。
问题中的示例代码“暗示”您希望在TIMER0被计时80次之后调用"abc()“函数。在TIMER0被计时81次之后,这个函数实际上将被调用。
还要注意的是,TIMER0的仿真模型没有循环精确的实现,因此不能准确地模拟实际情况。这种模拟缺陷存在于8位PIC控制器的所有MPLABX版本中.请注意,模拟器不会提供与现实世界硬件相匹配的周期计数。
https://stackoverflow.com/questions/71857194
复制相似问题