|
我的程序设计中用T2每秒中断,修改全局变量标志,在主程序中实现数据采集,程序运行几个月没问题,最近突然数据采集不再进行,每次发送的数据都是同一个值,程序中判断如果每次都是同一个数据输出,那么程序执行的就是数据采集没有进行,请高手指点。是否我的全局变量标志定义不对,看过一些介绍,对于中断内使用的全局变量需用volatile进行定义,不知道是该原因造成的,如果定义不对的话,怎么程序能执行好几个月都没问题呢?
unsigned char air;
unsigned char rain;
unsigned char wind;
unsigned char time_ovf;
int Tn;
interrupt [TIM2_OVF] void time2_ovf_isr(void) //Time2 1s Interrupt
{
#asm("sei")
TCNT2=0x0B; //设定T2初值
time_ovf++;
if(time_ovf>3)//1秒定时操作开始
{
time_ovf=0;
Tn++;
if((Tn%60)==38)
{ rain=1;}
wind=1;
if((Tn%10)==1 || (Tn%10)==6)
{ air=1; }
}//1秒定时操作结束
}
windtest()
{ ....
wind=0;
...
}
airtest()
{ ....
air=0;
...
}
raintest()
{ ....
rain=0;
...
}
main{
.....
TCCR2=0x07; //1024分频
TCNT2=0x0B; //设定T2初值11,245次后溢出
TIMSK=0x40; //T2溢出中断使能
air=0;
wind=0;
rain=0;
sleep_enable();
while(1)
{
if(wind)
{
windtest();
}
if(rain)
{ raintest(); }
if(air)
{
airtest();
}
idle();
#asm("sei")
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|