问题描述
我正在尝试使用计时器模块生成 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;
}
}
}
解决方法
ISR 的声明是错误的
开关:
void Interrupt(){
到:
void interrupt(){
不要忘记 volatile
volatile char value;