首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

S3C2440.为何小弟我的if判断放在主函数中的死循环就不执行,而放在中断中却可以

2013-10-29 
S3C2440...为何我的if判断放在主函数中的死循环就不执行,而放在中断中却可以。我的程序的目的就是通过Timer

S3C2440...为何我的if判断放在主函数中的死循环就不执行,而放在中断中却可以。
我的程序的目的就是通过Timer0来做1秒钟的定时器中断,通过在中断中改变flag标志来使led灯闪烁。

主函数:
#include"2440addr.h"
#include"led.h"
#include"isrservice.h"
#include"interrupt.h"
#include"timer.h"

void IO_Init(void);
extern unsigned int flag = 0;

int Main()
{

IO_Init();
Led4_On();
while(1)
{
/*if(flag == 1)                //假如被注释的这一段放在定时器中断处理函数中
{                            //则可以使Led2闪烁,但如果把这段放在主函数的
Led2_On();           //的while当中则不行。
}
else
{
Led2_Off();
}*/
}
return 0;
}

void IO_Init(void)
{
Led_Init();
Timer0_Init();
Timer0_Interrupt_Init();
Isr_Init();
}


中断处理函数:
#include"config.h"
#include"isrservice.h"
#include"2440addr.h"
#include"led.h"

extern unsigned int flag;

void Isr_Init(void)
{
pISR_TIMER0 = (unsigned int)Timer0_Isr;
}

void __irq Timer0_Isr(void)
{
if(flag == 1)
{
Led2_On();
}
else
{
Led2_Off();
}
flag = !flag;
rSRCPND |= 1<<10;
rINTPND |= 1<<10;
}



假如在主函数中被注释的这一段放在定时器中断处理函数中
则可以使Led2闪烁,但如果把这段放在主函数的的while当中则不行。
为什么,跪求大神指导!!!谢谢啦!

程序在主函数中不执行,而在中断中可以
[解决办法]
extern unsigned int flag = 0;
改成
extern volatile int flag;
看看,flag的初始化0不应该在这个地方

热点排行