/************************************************************************** **************************************************************************/ #include "Define_Global.h" /************************************************************************** * 函数名称:Init_UserRam * 函数功能:初始化用户寄存器 * 入口参数:无 * 出口参数:无 * 备 注:初始化调用 **************************************************************************/ void Init_UserRam() { #if _MODE_COMM_NO_ B_Comm_No = 1; //无通信模式 #elif _MODE_COMM_HAVE_ B_Comm_Have = 1; //有通信模式 #endif Buzz_Long_One(); //蜂鸣器长鸣1声 B_Adc_Curr = 1; //检测工作电流AD //--------------------------------------------------------------------- //配置缓存初始化: Buf_PPGMin = C_PPGMin; Buf_PPGMax = C_PPGMax; Buf_PPGMax_Steel = C_PPGMax_Steel; Buf_PPGMax_Iron = C_PPGMax_Iron; Buf_Power_CurrerConst = (unsigned int)(C_Vol_Low * C_Currer_Const); Buf_PowerLose_VHigh = C_PowerLose_VHigh; Buf_PowerLose_VLow = C_PowerLose_VLow; Buf_Vol_LowErr_In = C_Vol_LowErr_In - C_Vol_Comp; Buf_Vol_LowErr_Out = C_Vol_LowErr_Out - C_Vol_Comp; Buf_Vol_HighErr_In = C_Vol_HighErr_In - C_Vol_Comp; Buf_Vol_HighErr_Out = C_Vol_HighErr_Out - C_Vol_Comp; Buf_AD_Pan_FanOn = C_AD_Pan_FanOn; Buf_AD_Pan_FanOff = C_AD_Pan_FanOff; Buf_AD_Pan_OverIn = C_AD_Pan_OverIn; Buf_AD_Pan_OverOut = C_AD_Pan_OverOut; Buf_AD_Igbt_FanOn = C_AD_Igbt_FanOn; Buf_AD_Igbt_FanOff = C_AD_Igbt_FanOff; Buf_AD_Igbt_OverIn = C_AD_Igbt_OverIn; Buf_AD_Igbt_OverOut = C_AD_Igbt_OverOut; Buf_AD_Igbt_HighIn = C_AD_Igbt_HighIn; Buf_AD_Igbt_HighOut = C_AD_Igbt_HighOut; //--------------------------------------------------------------------- ValueOPA_Set = 0B00000000; #ifdef _TEST_PGAOUT_ ValuePGA_Set = 0B10000010 | ((C_Times_PGA & 0x03) << 5); #else ValuePGA_Set = 0B10000000 | ((C_Times_PGA & 0x03) << 5); #endif #ifdef _TEST_CMPOUT_ ValueCM_Test = 0x08 | (C_CMOUTEN_Num & 0x07); #else ValueCM_Test = 0; #endif ValuePPG_Single = C_PPGSingle; ValueCnt_HaveNoPan = C_Vaule_HaveNoPan; ValueTime_PPGDly = C_PPGDly; ValueVol_VolSurge = C_Vol_VolSurge; ValueVol_CurrSurge = C_Vol_CurrSurge; ValueVol_OnStep = C_Vol_OnStep; ValueVol_BackPress1 = C_Vol_BackPress1; ValuePPG_BackPress1 = C_PPG_BackPress1; ValueVol_BackPress2 = C_Vol_BackPress2; } /************************************************************************** * 函数名称:Clean_Ram * 函数功能:清通用寄存器 * 入口参数:无 * 出口参数:无 * 备 注:初始化调用 **************************************************************************/ void Clean_Ram() { CLRWDT(); //清看门狗 for(FSR = 0x20; FSR < 0x7F; FSR++) { INDF = 0; } for(FSR = 0xA0; FSR < 0xEF; FSR++) { INDF = 0; } IRP = 1; for(FSR = 0x20; FSR < 0x7F; FSR++) { INDF = 0; } for(FSR = 0xA0; FSR < 0xEF; FSR++) { INDF = 0; } IRP = 0; } /************************************************************************** * 函数名称:Init_System * 函数功能:初始化系统 * 入口参数:无 * 出口参数:无 * 备 注:初始化调用 **************************************************************************/ void Init_System() { NOP(); INTCON = 0; //中断禁止 NOP(); NOP(); NOP(); NOP(); CLRWDT(); //清看门狗 OSCCON = 0x70; //内部振荡频率为32MHz(默认为16MHz) OPTION_REG = 0B00001100; //WDT分频:1/16 PORTA = C_Init_PORTA; PORTB = C_Init_PORTB; //初始化IO电平 PORTC = C_Init_PORTC; #if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_ WPUA = SetWPUX_CommNo(0xA); WPUB = SetWPUX_CommNo(0xB); //初始化IO上拉 WPUC = SetWPUX_CommNo(0xC); TRISA = SetTRISX_CommNo(0xA); TRISB = SetTRISX_CommNo(0xB); //初始化IO方向 TRISC = SetTRISX_CommNo(0xC); #else WPUA = SetWPUX_CommHave(0xA); WPUB = SetWPUX_CommHave(0xB); //初始化IO上拉 WPUC = SetWPUX_CommHave(0xC); TRISA = SetTRISX_CommHave(0xA); TRISB = SetTRISX_CommHave(0xB); //初始化IO方向 TRISC = SetTRISX_CommHave(0xC); #endif PORTA = C_Init_PORTA; PORTB = C_Init_PORTB; //初始化IO电平 PORTC = C_Init_PORTC; INTCON = 0; //中断禁止 INTCON2 = 0; PIR1 = 0; //清中断请求标志 PIR2 = 0; PIR3 = 0; PIE1 = 0; //清中断允许标志 PIE2 = 0; PIE3 = 0; OPTION_REG = 0B00000111; //Timer0分频:1/256 TMR0 = 0; TMR1H = 0; TMR1L = 0; T1CON = 0B00110001; //使能Timer1,预分频=8 PR2 = C_TimeUS_Int * 4; //设置Timer2时间 T2CON = 0B00001100; //使能Timer2,预分频=1,后分频=2 TMR2IE = 1; //Timer2中断使能 INTCON = 0xC0; //中断使能 } /************************************************************************** * 函数名称:Refurbish_IO * 函数功能:刷新IO * 入口参数:无 * 出口参数:无 * 备 注:主循环调用,可增强抗干扰能力 *【注 意】:RB1必须设为推挽输出,RB2必须设为上拉输入(程序默认设置,可不改动) **************************************************************************/ void Refresh_IO() { #if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_ if(B_Comm_No) #endif #if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_ { WPUA = SetWPUX_CommNo(0xA); WPUB = SetWPUX_CommNo(0xB); WPUC = SetWPUX_CommNo(0xC); TRISA = SetTRISX_CommNo(0xA); TRISB = SetTRISX_CommNo(0xB); TRISC = SetTRISX_CommNo(0xC); } #endif #if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_ else #endif #if !_MODE_COMM_NO_ { WPUA = SetWPUX_CommHave(0xA); WPUB = SetWPUX_CommHave(0xB); WPUC = SetWPUX_CommHave(0xC); TRISA = SetTRISX_CommHave(0xA); TRISB = SetTRISX_CommHave(0xB); TRISC = SetTRISX_CommHave(0xC); } #endif } /************************************************************************** * 函数名称:Refurbish_Sfr * 函数功能:刷新特殊功能寄存器 * 入口参数:无 * 出口参数:无 * 备 注:主循环调用,可增强抗干扰能力 **************************************************************************/ void Refresh_Sfr() { PIE1 = 0x02; PIE2 = 0; PIE3 = 0; INTCON = 0xC0; //中断使能 INTCON2 = 0; OPTION_REG = 0B00000111; //Timer0分频:1/256 if(0B00110001 != T1CON) //T1CON值不变就不写 { //写操作会影响计时,在T1CON没有乱的时候不写 T1CON = 0B00110000; T1CON |= 0x01; } PR2 = C_TimeUS_Int * 4; //设置Timer2时间 if(0B00001100 != T2CON) //T2CON值不变就不写 { //写操作会影响计时,在T2CON没有乱的时候不写 T2CON = 0B00001000; T2CON |= 0x04; } } /************************************************************************** -------------------------------- 主循环处理 ------------------------------- **************************************************************************/ void main() @0x0800 { CRCDL--;CRCDH--; Clean_Ram(); //清通用寄存器 Init_System(); //初始化系统 #if !_MODE_IHDEBUG_ && (_MODE_COMM_NO_ || !_MODE_COMM_HAVE_) Init_HMI(); //初始化人机界面 #endif Delay_Xms(200); //上电延时 Init_UserRam(); //初始化用户寄存器 while(1) { if(TMR1IF) { TMR1IF = 0; TMR1L = 0xFFFF - C_TimeMS_Main * 4000; TMR1H = (0xFFFF - C_TimeMS_Main * 4000) >> 8; CLRWDT(); //清看门狗 Refresh_IO(); //刷新IO Refresh_Sfr(); //刷新特殊功能寄存器 Deal_Adc(); //ADC处理 Set_OutPut(); //输出设置 Set_PPGWork(); //PPG工作设置 #if _MODE_IHDEBUG_ REL_IhDebug_Main(); //IH调试处理(主循环) #else #if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_ if(B_Comm_No) #endif #if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_ { Deal_HMI(); //人机界面处理 } #endif #if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_ else #endif #if !_MODE_COMM_NO_ { Deal_CommData(); //通信数据处理 } #endif #endif } } }