【发布时间】:2021-06-22 10:04:11
【问题描述】:
我正在尝试使用计时器模块产生 1 秒的延迟。 定时器寄存器中的值是 61 DEC,它会每 50ms 产生一个中断,这会增加一个名为 value 的变量的值。
在 20 次中断后,大约 1 秒将过去,这将改变 LED 的状态。但这似乎没有按预期工作。振荡器频率为 4MHz,定时器模块的预分频值为 256,目标微控制器为PIC16F72。 代码如下:
char value;
bit state;
void Interrupt(){
if(TMR0IF_bit){
value++;
TMR0 = 61;
TMR0IF_bit = 0;
}
}
void main(){
value = 0;
state = 0;
TRISB.RB0 = 0;
OPTION_REG = 0x87;
TMR0 = 61;
INTCON = 0xA0;
while(1){
if(value == 20){
value=0;
state=~state;
PORTB.RB0=state;
}
}
}
【问题讨论】:
-
什么意思:似乎不起作用?尝试使用调试器。
-
我尝试使用调试器,但它没有进入中断例程。我尝试将调试器工具与秒表一起运行,即使 2 秒后它也没有立即进入中断例程。
-
使用调试器检查计数器寄存器,确认定时器正在运行。
-
如果它没有进入中断处理程序,那么你可能有不同的问题,但不将
value声明为volatile仍然是一个问题。 -
如果您的问题已经解决,请考虑将您的帖子标记为已解决,以便其他人知道。