⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 此源代码为电力系统中的RTU终端反馈!具有GPRS通讯功能!
💻 C
📖 第 1 页 / 共 2 页
字号:

#include "main.h"
#include "static.h"
#include "yx_key.h"

 
#if __VER__<200
interrupt [NMI_VECTOR] void NMI_Hand(void)   //非屏蔽中断处理
#else
#pragma vector = NMI_VECTOR
__interrupt void NMI_Hand (void)
#endif
{  
 while(1)
 {
 _NOP();
 }
}

#if __VER__<200
interrupt [COMPARATORA_VECTOR] void Comparatora(void)   //非屏蔽中断处理
#else
#pragma vector = COMPARATORA_VECTOR
__interrupt void Comparatora (void)
#endif
{  
 while(1)
 {
 _NOP();
 }
}

#if __VER__<200
interrupt [TIMERB1_VECTOR] void Timer_B1(void)   
#else
#pragma vector = TIMERB1_VECTOR
__interrupt void Timer_B1 (void)
#endif
{
 while(1)
 {
 _NOP();
 }
}

#if __VER__<200
interrupt [WDT_VECTOR] void Watchdog(void)   
#else
#pragma vector = WDT_VECTOR
__interrupt void Watchdog(void)
#endif
{
 while(1)
 {
 _NOP();
 }
}

#if __VER__<200
interrupt [TIMERA1_VECTOR] void Timer_A1(void)   //定时器A中主要完成数据的采集
#else
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1 (void)
#endif
{  
 while(1)
 {
 _NOP();
 }
}

#if __VER__<200
interrupt void Port2(void)
#else
#pragma vector=PORT2_VECTOR
__interrupt void Port2(void)
#endif
{     
 while(1)
 {
 _NOP();
 } 
}
 
#if __VER__<200
interrupt void Usart1_rxInt(void)     //与主机通讯 接收 记数
#else
#pragma vector=UART1RX_VECTOR
__interrupt void Usart1_rxInt(void)
#endif
{ 
  unsigned  char c=RXBUF1;
  if( TTU_RunParam.TTU_Control_Param & BIT2 ) TXBUF0=c;       //转发                  
  if(nRecData==0 )
  {  
  if(!((c==0x68)||(c==0x10)))
    return;
  }
  
  if(nRecData>RDATARECVLENG-1)
  {
   nRecData = 0;
  }
  RCommCode[nRecData++] = c;
  nticks1 = 3;
}

#if __VER__<200
interrupt void Usart1_txInt(void)//与主机通讯  发送中断发送记数
#else
#pragma vector = UART1TX_VECTOR
__interrupt  void Usart1_txInt(void)
#endif
{  
   TXBUF1 = TCommCode[CommDataLen ++];
   SpecialFlag.nIdleTime=TxGap; 
   Delay485=3;
   if( CommDataLen < m_EnCur )  
      return ;          
   IE2 &= ~UTXIE1;         //关发送中断        
   CommDataLen = 0;        //发送完成,长度清零
 }


#if __VER__<200
interrupt [UART1RX_VECTOR] void Usart0_rxInt(void)//与主机通讯 接收 记数
#else
#pragma vector=UART0RX_VECTOR
__interrupt void Usart0_rxInt(void)
#endif
{ 
    if( TTU_RunParam.TTU_Control_Param & BIT2 ) TXBUF1=RXBUF0;                                 //转发
}


#if __VER__<200
interrupt [TIMERA0_VECTOR] void Timer_A(void)   //定时器A中主要完成数据的采集
#else
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
#endif
{  
 static int num=0; 
   if( DeviceState.Capture )   //捕获
   {
    CapDelay=0; 
     if(num == 1)       
        Count1 = CCR0>>2;       
     if(num == 5)
     {  
       Count3 = CCR0>>2;           
       
       //num = 0;  
       if(Count3 < Count1)         
           Count4 = 0x7FFF - Count1 + Count3 ;          
       else         
           Count4 =0x3FFF+ Count3 - Count1;         
          DeviceState.In_phase=1;
       
     } 
    if( num > 40)
     {
      num = 0;  
       CCTL0 &= ~CCIE;
       TimerInit1();//切换 为AD采集准备
     }    
     num++;          
   }   
   else         //计数
   {
     if (Sam_Counter >= 32) 
      {
       CCTL0 &=~CCIE;              //关Timera中断   

       DeviceState.Cal_FFT=1;
       DeviceState.DoGetData=0; 
       Sam_Counter = 0;
       TimerInitCap();  //测频
      }
     if(DeviceState.Cal_FFT ==0)
      {         
       ADC12CTL0 |= ENC + ADC12SC;   //开始新一轮转换
      }   
   }     
}

#if __VER__<200
interrupt [TIMERB0_VECTOR] void Timer_B(void)   //定时器B中主要遥脉计数
#else
#pragma vector = TIMERB0_VECTOR
__interrupt void Timer_B (void)
#endif
{
  if(WriteDelay) WriteDelay--;
  if(YmState  == (P1IN & YMBIT) ) return;
  if(((YmState & BIT1)==BIT1 )  && ((P1IN & BIT1)==0 )  )
  {
     AddedYM[0] ++;
  }
  if(((YmState & BIT2)==BIT2 )  &&((P1IN &BIT2)==0 )  )
  {
     AddedYM[1] ++;     
  } 
  YmState  = (P1IN &YMBIT);
  
}

#if __VER__<200                
interrupt [BASICTIMER_VECTOR] void basic_timer(void)    //基本定时器主要是对通讯控制和FFT控制   62.5ms      
#else                                                   //以及时钟的更新
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer(void)
#endif
{ 
  static int Timer_counter = 0,SysTimeCount=0;
  Timer_counter++;
  SysTimeCount++;
  stDateTime.MillSecond=(SysTimeCount<<6) -SysTimeCount-(SysTimeCount>>1);//转换成ms 
  if(SysTimeCount>960)
     {
      SysTimeCount=0;
      DeviceState.Minutef0 = 1;        //置分钟标志
       DeviceState.Minutef1=1;
     }
     
  if((P3IN & KEYBIT)  !=keyold) KeyHand();

 if((DeviceState.Cal_FFT==0) && (DeviceState.Capture==0)  ) 
           CCTL0 |= CCIE;  //启动AD
  if(Timer_counter >= 16)
  {
     if(CommState.DoSendLubo==0) 
     {   
         DeviceState.DoGetData=1;          
     }
         Timer_counter = 0;
         DeviceState.Secondf = 1; 
         P2OUT ^= BIT7;
         //PulseTime ++;                         //脉冲记数时间
         RefreshData();
        /* if(PulseTime >= 10)
         {             
            DeviceState.TenSecf = 1; 
            PulseTime = 0;
         } */
       
  }
   if(TTU_RunParam.TTU_Control_Param & BIT0)
     YxNew= (~P1IN) & YXBIT0;
   else 
     YxNew= (~P1IN) & YXBIT1;
   if(YxNew != YxOld )
     YxHand() ;  
 ////////////////////////////============================================================
   if(nticks1)
   {
     nticks1--;
     if(nticks1==0)
      {   
        nRecData = 0;  
        CommState.U0REnd=1;   
      }
   }
   if(SpecialFlag.nIdleTime)    
   { 
      SpecialFlag.nIdleTime--;
      if(SpecialFlag.nIdleTime==0)
       { 
         CommState.TxWait=0;         
       }
    }  
    
    if(Delay485)
    {
      Delay485--;    
     if(Delay485==0) CS485ReceiveEnable;       //485接收使能     
    }   
   if(delayselect>0)
   {
      delayselect--;
      if(delayselect == 0)
      {
        YKselect = 0;
      }
   }
     if( delayoperate >0)
        delayoperate --;          

  if(DeviceState.Capture)
  { CapDelay++;
    if(CapDelay>8)  
    {
     CapDelay=0;
   // CCR0 =  625; 
      TimerInit1();        //TimerA  Counter mode       
      CCTL0 |= CCIE;
      DeviceState.In_phase=0;
  }
  }
    
}


#if __VER__<200
interrupt void ADC(void)
#else
#pragma vector = ADC_VECTOR
__interrupt  void ADC(void)
#endif
{
      int I0_temp;
      DeviceState.In_phase = 0;
      ADC12CTL0 &= ~ENC;                               //停止重复转换
      Ua_Data[Sam_Counter] =  ADC12MEM1-ADC12MEM0;     //将A/D值存入数组
      Ia_Data[Sam_Counter] =  ADC12MEM2-ADC12MEM0; 
      Ub_Data[Sam_Counter] =  ADC12MEM3-ADC12MEM0; 
      Ib_Data[Sam_Counter] =  ADC12MEM4-ADC12MEM0; 
      Uc_Data[Sam_Counter] =  ADC12MEM5-ADC12MEM0;  
      Ic_Data[Sam_Counter] =  ADC12MEM6-ADC12MEM0;
      
      I0_temp = (ADC12MEM7-ADC12MEM0 );
      if (I0_temp < 0)
       {
        I0_temp = -I0_temp;
        _NOP();
       }
      I0 += I0_temp;    
    
      Sam_Counter ++; 
      Temp = ADC12MEM8 ;

}

#if __VER__<200
interrupt void Port1(void)
#else
#pragma vector=PORT1_VECTOR
__interrupt void Port1(void)
#endif      
{
  if ((P1IFG & BIT0)== BIT0)
  {
       P1IFG &= ~BIT0; 
       if(DeviceState.In_phase == 1)
           CCTL0 |= CCIE;       
  } 
}



void MainDo()
{ 
 long t;      
 while(1)
 { 
   if(CommState.U0REnd==1 ) 
     { 
        HandleData(RCommCode);
        CommState.U0REnd=0;   
     }   
      
  if((P3IN&BIT3) == BIT3 )               //参数地址从0X80开始
    {    
      if((MCUState & BIT4) == BIT4) 
       { 
          MCUState  &= ~BIT4;                                                   
          TTU_RunParam.AddrOfTTU=1;                           //默认参数设置
          TTU_RunParam.Bauds0=4 ;
            TTU_RunParam.Bauds1=4 ;             
            TTU_RunParam.PWM_SET=3;
            TTU_RunParam.TTU_Control_Param=0;
           // TTU_RunParam.VersionOfSoft=0;            
           CopyParam(0);
           CopyParam(505);
           SetCOM0BT(2400);     
       }               
    }
  else 
       MCUState  |= BIT4;
     
  if(DeviceState.doSavePowerOff)
   {                
    // SavePower();   //保存电量
    // GetStaticRecord();    
     DeviceState.doSavePowerOff=0;
   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -