📄 main.c
字号:
#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 + -