zhai123456 发表于 2007-9-21 14:14:09

马老师啊,您一定要帮帮我,帮忙看下我的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")   
      }   

zhai123456 发表于 2007-9-23 13:46:50

马老师没空赐教啊?真的很困惑的这个问题,还请马老师抽空帮忙解惑,先谢谢了

machao 发表于 2007-9-23 23:27:09

程序能执行好几个月了,怎么怀疑中断有问题呢?

   
中断内使用的全局变量需用volatile进行定义,没有道理,至少在ICCAVR和CVAVR中不必这样定义。
页: [1]
查看完整版本: 马老师啊,您一定要帮帮我,帮忙看下我的M8中断问题!