新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2014-12-4
- 在线时间
- 0 小时
|
5金钱
第12章的定时器中断实验,书上P134页,定时器中断服务程序如下:
void TIM3_IRQHander(void)
{
if(TIM3->SR &0X0001) LED1=!LED1 ; //溢出中断
TIM3->SR =~(1<<0); //清除中断标志
}
这是书上的标准程序,我改成下面的程序:
void TIM3_IRQHander(void)
{
if(TIM3->SR &0X0001) {;} //溢出中断
LED1=!LED1 ;
TIM3->SR =~(1<<0); //清除中断标志
}
然后就发现LED1=!LED1没有被执行,程序烧进去后LED1灯没有变化,然后我发现在LED1=!LED1这条语句前面或者后面再加一条任意语句就可以被执行,我尝试了下面几种方式,LED1都可以被点亮进行闪烁:
情况一:
void TIM3_IRQHander(void)
{
if(TIM3->SR &0X0001) {;} //溢出中断
delay_us(1);
LED1=!LED1 ;
TIM3->SR =~(1<<0); //清除中断标志
}
情况二:
void TIM3_IRQHander(void)
{
if(TIM3->SR &0X0001) {;} //溢出中断
LED1=!LED1 ;
delay_us(1);
TIM3->SR =~(1<<0); //清除中断标志
}
情况三:
void TIM3_IRQHander(void)
{
if(TIM3->SR &0X0001) {;} //溢出中断
printf( "OK \r\n" );
LED1=!LED1 ;
TIM3->SR =~(1<<0); //清除中断标志
}
情况四:
void TIM3_IRQHander(void)
{
if(TIM3->SR &0X0001) {;} //溢出中断
LED1=!LED1 ;
printf( "OK \r\n" );
TIM3->SR =~(1<<0); //清除中断标志
}
对于这个情况我不理解,按照顺序结构,当if执行完毕后就应该执行下面的语句,那么将LED1=!LED1从if语句中移除,if执行空操作后再执行这条语句为什么实际上并没有 被执行,而我在这条语句上下随便加了一条语句为什么又被执行了,对于这个问题想请教下大家,谢谢! |
|