我的意图是定时器产生1MS的中断,然后用变量key_delaytime记数,然后在主函数里面判断其值,再产生相应的动作.
主函数在文件main.c
定时器中断服务函数在timer.c.
我在main.c中main函数外定义了一个 volatile unsigned char key_delaytime全局变量,然后在timer.c的头文件作了以下引用:
extern volatile unsigned char key_delaytime;
中断服务函数如下:
;//省略头文件及其它;
void Timer0IntHandler(void)
{
TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);
IntMasterDisable();
GPIOPinWrite(LED_BASE,LED4,~GPIOPinRead(LED_BASE,LED4));
key_delaytime++;
IntMasterEnable();
}
编译完成后我用J-LINK仿真,发现key_delaytime这个变量按正常的规律在变化,来一个中断加1,但是在main()函数里面判断其值变化产生动作的语句根本不动作.
;
;//省略头文件及其它;
volatile unsigned char key_delaytime;
;//省略其它变量定义及函数
while(1)
{
// Led_Test();
UARTCharPut(UART0_BASE,'\n');
Delay_10ms(10);
UARTCharPut(UART0_BASE,'B');
UARTCharPut(UART0_BASE,'\n');
Delay_10ms(10);
UARTPutString(Buf,UART0_BASE);
TimerEnable(TIMER0_BASE,TIMER_A);
if(key_delaytime==100) {
GPIOPinWrite(LED_BASE,LED1,~GPIOPinRead(LED_BASE,LED1));
key_delaytime=0;
}