马老师啊,您一定要帮帮我,帮忙看下我的M8中断问题!
我的程序设计中用T2每秒中断,修改全局变量标志,在主程序中实现数据采集,程序运行几个月没问题,最近突然数据采集不再进行,每次发送的数据都是同一个值,程序中判断如果每次都是同一个数据输出,那么程序执行的就是数据采集没有进行,请高手指点。是否我的全局变量标志定义不对,看过一些介绍,对于中断内使用的全局变量需用volatile进行定义,不知道是该原因造成的,如果定义不对的话,怎么程序能执行好几个月都没问题呢?unsigned char air;
unsigned char rain;
unsigned char wind;
unsigned char time_ovf;
int Tn;
interrupt 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")
}
} 马老师没空赐教啊?真的很困惑的这个问题,还请马老师抽空帮忙解惑,先谢谢了 程序能执行好几个月了,怎么怀疑中断有问题呢?
中断内使用的全局变量需用volatile进行定义,没有道理,至少在ICCAVR和CVAVR中不必这样定义。
页:
[1]