diff --git a/app_code/main.c b/app_code/main.c index 3fb0dad..8e537f9 100644 --- a/app_code/main.c +++ b/app_code/main.c @@ -1,68 +1,68 @@ #include "STC8.H" #include -/*************** 宏定义 **************/ -#define FOSC 11059200UL //MCU工作频率为11.0592MHz -#define BRT (65536 - FOSC / 115200 / 4) //串口通信波特率为115200 +/*************** 瀹忓畾涔 **************/ +#define FOSC 11059200UL // MCU宸ヤ綔棰戠巼涓11.0592MHz +#define BRT (65536 - FOSC / 115200 / 4) // 涓插彛閫氫俊娉㈢壒鐜囦负115200 -#define IAP_ADDRESS 0x0000 +#define IAP_ADDRESS 0x0000 -#define LED_ON P00 = 0 -#define LED_OFF P00 = 1 +#define LED_ON P00 = 0 +#define LED_OFF P00 = 1 -#define WT_30M 0x80 -#define WT_24M 0x81 -#define WT_20M 0x82 -#define WT_12M 0x83 -#define WT_6M 0x84 -#define WT_3M 0x85 -#define WT_2M 0x86 -#define WT_1M 0x87 +#define WT_30M 0x80 +#define WT_24M 0x81 +#define WT_20M 0x82 +#define WT_12M 0x83 +#define WT_6M 0x84 +#define WT_3M 0x85 +#define WT_2M 0x86 +#define WT_1M 0x87 -#define ISP_STANDBY() ISP_CMD = 0 /* ISP空闲命令(禁止)*/ -#define ISP_READ() ISP_CMD = 1 /* ISP读出命令 */ -#define ISP_WRITE() ISP_CMD = 2 /* ISP写入命令 */ -#define ISP_ERASE() ISP_CMD = 3 /* ISP擦除命令 */ +#define ISP_STANDBY() ISP_CMD = 0 /* ISP绌洪棽鍛戒护锛堢姝級*/ +#define ISP_READ() ISP_CMD = 1 /* ISP璇诲嚭鍛戒护 */ +#define ISP_WRITE() ISP_CMD = 2 /* ISP鍐欏叆鍛戒护 */ +#define ISP_ERASE() ISP_CMD = 3 /* ISP鎿﹂櫎鍛戒护 */ -//sfr ISP_TRIG = 0xC6; -#define ISP_TRIG() ISP_TRIG = 0x5A, ISP_TRIG = 0xA5 /* ISP触发命令 */ +// sfr ISP_TRIG = 0xC6; +#define ISP_TRIG() ISP_TRIG = 0x5A, ISP_TRIG = 0xA5 /* ISP瑙﹀彂鍛戒护 */ // 7 6 5 4 3 2 1 0 Reset Value -//sfr ISP_CONTR = 0xC7; ISPEN SWBS SWRST CFAIL - WT2 WT1 WT0 0000,x000 //ISP Control Register -#define ISP_EN (1<<7) -#define ISP_SWBS (1<<6) -#define ISP_SWRST (1<<5) -#define ISP_CMD_FAIL (1<<4) -#define ISP_WAIT_1MHZ 7 -#define ISP_WAIT_2MHZ 6 -#define ISP_WAIT_3MHZ 5 -#define ISP_WAIT_6MHZ 4 -#define ISP_WAIT_12MHZ 3 -#define ISP_WAIT_20MHZ 2 -#define ISP_WAIT_24MHZ 1 -#define ISP_WAIT_30MHZ 0 +// sfr ISP_CONTR = 0xC7; ISPEN SWBS SWRST CFAIL - WT2 WT1 WT0 0000,x000 //ISP Control Register +#define ISP_EN (1 << 7) +#define ISP_SWBS (1 << 6) +#define ISP_SWRST (1 << 5) +#define ISP_CMD_FAIL (1 << 4) +#define ISP_WAIT_1MHZ 7 +#define ISP_WAIT_2MHZ 6 +#define ISP_WAIT_3MHZ 5 +#define ISP_WAIT_6MHZ 4 +#define ISP_WAIT_12MHZ 3 +#define ISP_WAIT_20MHZ 2 +#define ISP_WAIT_24MHZ 1 +#define ISP_WAIT_30MHZ 0 #if (FOSC >= 24000000L) - #define ISP_WAIT_FREQUENCY ISP_WAIT_30MHZ +#define ISP_WAIT_FREQUENCY ISP_WAIT_30MHZ #elif (FOSC >= 20000000L) - #define ISP_WAIT_FREQUENCY ISP_WAIT_24MHZ +#define ISP_WAIT_FREQUENCY ISP_WAIT_24MHZ #elif (FOSC >= 12000000L) - #define ISP_WAIT_FREQUENCY ISP_WAIT_20MHZ +#define ISP_WAIT_FREQUENCY ISP_WAIT_20MHZ #elif (FOSC >= 6000000L) - #define ISP_WAIT_FREQUENCY ISP_WAIT_12MHZ +#define ISP_WAIT_FREQUENCY ISP_WAIT_12MHZ #elif (FOSC >= 3000000L) - #define ISP_WAIT_FREQUENCY ISP_WAIT_6MHZ +#define ISP_WAIT_FREQUENCY ISP_WAIT_6MHZ #elif (FOSC >= 2000000L) - #define ISP_WAIT_FREQUENCY ISP_WAIT_3MHZ +#define ISP_WAIT_FREQUENCY ISP_WAIT_3MHZ #elif (FOSC >= 1000000L) - #define ISP_WAIT_FREQUENCY ISP_WAIT_2MHZ +#define ISP_WAIT_FREQUENCY ISP_WAIT_2MHZ #else - #define ISP_WAIT_FREQUENCY ISP_WAIT_1MHZ +#define ISP_WAIT_FREQUENCY ISP_WAIT_1MHZ #endif -/***************函数声明**************/ +/***************鍑芥暟澹版槑**************/ void PWM_Init(); -void PWM_TO_DAC(unsigned int PowerVol,unsigned int OutVol); +void PWM_TO_DAC(unsigned int PowerVol, unsigned int OutVol); void Timer0_Init(); void UART1_Init(); void ADC_Init(); @@ -72,33 +72,33 @@ void AutoAction(void); void Read_ADC(); void Delay10ms(); void DisableEEPROM(void); -void EEPROM_read_n(unsigned int EE_address,unsigned char *DataAddress,unsigned int number); +void EEPROM_read_n(unsigned int EE_address, unsigned char *DataAddress, unsigned int number); void EEPROM_SectorErase(unsigned int EE_address); -void EEPROM_write_n(unsigned int EE_address,unsigned char *DataAddress,unsigned int number); +void EEPROM_write_n(unsigned int EE_address, unsigned char *DataAddress, unsigned int number); void Parameter_Save(void); -unsigned int Get_ADC12bitResult(unsigned char channel); //channel = 0~14 -unsigned int ADC_Average(unsigned int *buff,unsigned int num,unsigned int threshold); +unsigned int Get_ADC12bitResult(unsigned char channel); // channel = 0~14 +unsigned int ADC_Average(unsigned int *buff, unsigned int num, unsigned int threshold); -/***************变量定义**************/ -bit busy = 0; -bit SendEN = 0; -bit SendInit = 0; -bit Rx_Busy = 0; +/***************鍙橀噺瀹氫箟**************/ +bit busy = 0; +bit SendEN = 0; +bit SendInit = 0; +bit Rx_Busy = 0; -bit PWM_ON = 0; +bit PWM_ON = 0; -bit Uart1Ready_R = 0; -bit AcqInitFlag = 0; -bit AD_Refresh = 0; -bit Save_Flag = 0; +bit Uart1Ready_R = 0; +bit AcqInitFlag = 0; +bit AD_Refresh = 0; +bit Save_Flag = 0; -bit PWM_ON_EN = 0; +bit PWM_ON_EN = 0; unsigned char xdata Rxbuff[20]; unsigned char xdata aRxBufferTemp = 0; -unsigned char xdata RX_5A_OK=0,RX_A5_OK=0; -unsigned char xdata Rx_count_UART1= 0; //UART1接收计数器 +unsigned char xdata RX_5A_OK = 0, RX_A5_OK = 0; +unsigned char xdata Rx_count_UART1 = 0; // UART1鎺ユ敹璁℃暟鍣 unsigned char xdata Rx_Cnt = 0; unsigned char xdata SendBuffer[50]; @@ -107,18 +107,18 @@ unsigned char xdata TableRead[50]; unsigned char xdata TableWrite[50]; unsigned int xdata ADC_EXT_Value = 0; -unsigned int xdata ADC0_Value = 0; -unsigned int xdata ADC1_Value = 0; -unsigned int xdata ADC2_Value = 0; +unsigned int xdata ADC0_Value = 0; +unsigned int xdata ADC1_Value = 0; +unsigned int xdata ADC2_Value = 0; -unsigned int xdata TwinkleCnt = 0; +unsigned int xdata TwinkleCnt = 0; -unsigned int xdata Cnt = 0,Times = 0,AcqInitCnt = 0; +unsigned int xdata Cnt = 0, Times = 0, AcqInitCnt = 0; unsigned int xdata UartCnt = 0; unsigned int xdata SentCnt = 0; unsigned int xdata ADC_Cnt = 0; -unsigned int xdata Time_Cnt = 0,Time_Sec = 0,Time_Min = 0,Save_Cnt = 0; +unsigned int xdata Time_Cnt = 0, Time_Sec = 0, Time_Min = 0, Save_Cnt = 0; unsigned int xdata ADC_EXT_Temp[120]; @@ -126,1710 +126,1691 @@ unsigned int xdata ADC0_Temp[120]; unsigned int xdata ADC1_Temp[120]; unsigned int xdata ADC2_Temp[120]; -unsigned int xdata RunTime = 0; //运行时间 -unsigned int xdata InVoltage = 12000; //输入电压 -unsigned int xdata OutVoltage = 0; //输出电压 +unsigned int xdata RunTime = 0; // 杩愯鏃堕棿 +unsigned int xdata InVoltage = 12000; // 杈撳叆鐢靛帇 +unsigned int xdata OutVoltage = 0; // 杈撳嚭鐢靛帇 -unsigned int xdata EXT_Value = 0; //外部电压 +unsigned int xdata EXT_Value = 0; // 澶栭儴鐢靛帇 -unsigned int xdata SetVoltage = 0; //设置电压 -unsigned int xdata SetCorroV = 0; //腐蚀电压 -unsigned int xdata AcqVolatage= 0; //采集电压 -unsigned int xdata OutCurrent = 0; //输出电流(放大10倍后屏显示的电流) +unsigned int xdata SetVoltage = 0; // 璁剧疆鐢靛帇 +unsigned int xdata SetCorroV = 0; // 鑵愯殌鐢靛帇 +unsigned int xdata AcqVolatage = 0; // 閲囬泦鐢靛帇 +unsigned int xdata OutCurrent = 0; // 杈撳嚭鐢垫祦(鏀惧ぇ10鍊嶅悗灞忔樉绀虹殑鐢垫祦) -unsigned int xdata OutSet = 0; //输出设置 -unsigned int xdata DisSet = 0; //显示设置 +unsigned int xdata OutSet = 0; // 杈撳嚭璁剧疆 +unsigned int xdata DisSet = 0; // 鏄剧ず璁剧疆 unsigned int xdata OutTemp; -unsigned int xdata CalibrationVoltage = 0; //设定的输出电压 +unsigned int xdata CalibrationVoltage = 0; // 璁惧畾鐨勮緭鍑虹數鍘 -unsigned int xdata InitAcqVolatage = 0; //初始采集电压 -unsigned int xdata InitAcqCurrent = 0; //初始采集电流 +unsigned int xdata InitAcqVolatage = 0; // 鍒濆閲囬泦鐢靛帇 +unsigned int xdata InitAcqCurrent = 0; // 鍒濆閲囬泦鐢垫祦 -unsigned int xdata AcqVolatage1 = 0; //采集电压1 +unsigned int xdata AcqVolatage1 = 0; // 閲囬泦鐢靛帇1 -unsigned int xdata Limitvoltage = 0; //极限电压 +unsigned int xdata Limitvoltage = 0; // 鏋侀檺鐢靛帇 -unsigned int xdata Temp01 = 0; //辅助运算 +unsigned int xdata Temp01 = 0; // 杈呭姪杩愮畻 unsigned int xdata Temp02 = 0; -unsigned int xdata AcqError = 0; //实时采集误差 -unsigned int xdata InitError = 0; //初始误差 +unsigned int xdata AcqError = 0; // 瀹炴椂閲囬泦璇樊 +unsigned int xdata InitError = 0; // 鍒濆璇樊 unsigned char xdata Shut_Hour = 0; -unsigned char xdata Shut_Min = 0; -unsigned char xdata Shut_Sec = 0; -unsigned int xdata Shut_MS = 0; +unsigned char xdata Shut_Min = 0; +unsigned char xdata Shut_Sec = 0; +unsigned int xdata Shut_MS = 0; -int OffsetVoltage = 0; //补偿电压 +int OffsetVoltage = 0; // 琛ュ伩鐢靛帇 - -float xdata IA; //实际输出电流 -float xdata CurrentError = 0; -float xdata AdjVoltage = 0; //调节电压 -float xdata CompensationValue = 0; //补偿系数 -float xdata OutGain = 0; //输出增益调节 +float xdata IA; // 瀹為檯杈撳嚭鐢垫祦 +float xdata CurrentError = 0; +float xdata AdjVoltage = 0; // 璋冭妭鐢靛帇 +float xdata CompensationValue = 0; // 琛ュ伩绯绘暟 +float xdata OutGain = 0; // 杈撳嚭澧炵泭璋冭妭 -/*************** 主函数 **************/ +/*************** 涓诲嚱鏁 **************/ void main() { - Timer0_Init(); - PWM_Init(); - UART1_Init(); - ADC_Init(); - - ES = 1; - EA = 1; - UartCnt = 0; - SendEN = 0; - ADC_Cnt = 0; - Times = 0; - - Delay10ms(); - Delay10ms(); - Delay10ms(); - Delay10ms(); - - EEPROM_read_n(IAP_ADDRESS,TableRead,18); //从EEPROM读取数据 - - RunTime = TableRead[0] *256UL + TableRead[1] ; //读EEPROM数据--运行时间 - SetVoltage = TableRead[2] *256UL + TableRead[3] ; //读EEPROM数据--设置电压 - SetCorroV = TableRead[4] *256UL + TableRead[5] ; //读EEPROM数据--腐蚀电压 - - OutSet = TableRead[6] *256UL + TableRead[7] ; //读EEPROM数据--输出设置 - DisSet = TableRead[8] *256UL + TableRead[9]; //读EEPROM数据--显示设置 - CurrentError = (float)(TableRead[10] *256UL + TableRead[11])/100 ; //读EEPROM数据--电流误差 - AdjVoltage = (float)(TableRead[12] *256UL + TableRead[13]) ; // 读EEPROM数据--调节电压 - AcqError = (float)(TableRead[14] *256UL + TableRead[15])/10 ; // 读EEPROM数据--采集误差 - Limitvoltage = TableRead[16]*256UL + TableRead[17]; //读EEPROM数据--极限电压(新增) - //第一次运行程序,EEPROM数据全是FFFF,进行参数初始化处理 - if(RunTime==0xFFFF) - { - RunTime = 0; - } - if(SetVoltage==0xFFFF) - { - SetVoltage = 2000; - } - if(SetCorroV==0xFFFF) - { - SetCorroV = 920; - } - if(Limitvoltage==0xFFFF) - { - Limitvoltage = 1600; - } - if(AdjVoltage==0xFFFF) - { - AdjVoltage = 3; - } - if(CurrentError==(0xFFFF)/100.0) - { - CurrentError = 1000; - } - if(AcqError==(0xFFFF)/10.0) - { - AcqError = 100; - } - if(OutSet==0xFFFF) - { - OutSet = 10000; - } - if(DisSet==0xFFFF) - { - DisSet = 16146; - } - - OutGain = (float)OutSet/10000; - - CalibrationVoltage = SetVoltage; - PWM_TO_DAC(5000,(unsigned int)(CalibrationVoltage *OutGain)+(unsigned int)IA);//供电电压为:5000MV,负载端输出电压为:CalibrationVoltage,单片机口输出电压为:SetOutVoltage/3 - - AcqInitCnt = 0; - while (1) - { - DataParsing(); //串口数据解析 - UartSendData(); //串口定时发送数据 - Read_ADC(); //AD采集数据处理 - Parameter_Save(); - if(AcqInitFlag==0) //上电采集初始电压 - { - if(AcqInitCnt>1000) //上电3秒内采集初始电压,时间可修改 - { - InitAcqVolatage = AcqVolatage; //获取初始电压 - InitAcqCurrent = (unsigned int)IA; //获取初始电流 + Timer0_Init(); + PWM_Init(); + UART1_Init(); + ADC_Init(); - AcqInitFlag = 1; - AcqInitCnt = 0; - } - } - - if(EXT_Value<1000) //外部电压小于1000mV + ES = 1; + EA = 1; + UartCnt = 0; + SendEN = 0; + ADC_Cnt = 0; + Times = 0; + + Delay10ms(); + Delay10ms(); + Delay10ms(); + Delay10ms(); + + EEPROM_read_n(IAP_ADDRESS, TableRead, 18); // 浠嶦EPROM璇诲彇鏁版嵁 + + RunTime = TableRead[0] * 256UL + TableRead[1]; // 璇籈EPROM鏁版嵁--杩愯鏃堕棿 + SetVoltage = TableRead[2] * 256UL + TableRead[3]; // 璇籈EPROM鏁版嵁--璁剧疆鐢靛帇 + SetCorroV = TableRead[4] * 256UL + TableRead[5]; // 璇籈EPROM鏁版嵁--鑵愯殌鐢靛帇 + + OutSet = TableRead[6] * 256UL + TableRead[7]; // 璇籈EPROM鏁版嵁--杈撳嚭璁剧疆 + DisSet = TableRead[8] * 256UL + TableRead[9]; // 璇籈EPROM鏁版嵁--鏄剧ず璁剧疆 + CurrentError = (float)(TableRead[10] * 256UL + TableRead[11]) / 100; // 璇籈EPROM鏁版嵁--鐢垫祦璇樊 + AdjVoltage = (float)(TableRead[12] * 256UL + TableRead[13]); // 璇籈EPROM鏁版嵁--璋冭妭鐢靛帇 + AcqError = (float)(TableRead[14] * 256UL + TableRead[15]) / 10; // 璇籈EPROM鏁版嵁--閲囬泦璇樊 + Limitvoltage = TableRead[16] * 256UL + TableRead[17]; // 璇籈EPROM鏁版嵁--鏋侀檺鐢靛帇锛堟柊澧烇級 + // 绗竴娆¤繍琛岀▼搴忥紝EEPROM鏁版嵁鍏ㄦ槸FFFF锛岃繘琛屽弬鏁板垵濮嬪寲澶勭悊 + if (RunTime == 0xFFFF) { -// LED_OFF; - LED_ON; // 万博专用 - if(AD_Refresh) - { - PWM_TO_DAC(5000,0);//PWM输出0V(可能存在死区,适当修改输出值尽可能让输出接近0V) - AD_Refresh = 0; - } + RunTime = 0; } - if(EXT_Value>1800)//外部电压大于2000mV + if (SetVoltage == 0xFFFF) { - AutoAction(); //运行自动程序 + SetVoltage = 2000; + } + if (SetCorroV == 0xFFFF) + { + SetCorroV = 920; + } + if (Limitvoltage == 0xFFFF) + { + Limitvoltage = 1600; + } + if (AdjVoltage == 0xFFFF) + { + AdjVoltage = 3; + } + if (CurrentError == (0xFFFF) / 100.0) + { + CurrentError = 1000; + } + if (AcqError == (0xFFFF) / 10.0) + { + AcqError = 100; + } + if (OutSet == 0xFFFF) + { + OutSet = 10000; + } + if (DisSet == 0xFFFF) + { + DisSet = 16146; + } + + OutGain = (float)OutSet / 10000; + + CalibrationVoltage = SetVoltage; + PWM_TO_DAC(5000, (unsigned int)(CalibrationVoltage * OutGain) + (unsigned int)IA); // 渚涚數鐢靛帇涓猴細5000MV锛岃礋杞界杈撳嚭鐢靛帇涓猴細CalibrationVoltage锛屽崟鐗囨満鍙h緭鍑虹數鍘嬩负锛歋etOutVoltage/3 + + AcqInitCnt = 0; + while (1) + { + DataParsing(); // 涓插彛鏁版嵁瑙f瀽 + UartSendData(); // 涓插彛瀹氭椂鍙戦佹暟鎹 + Read_ADC(); // AD閲囬泦鏁版嵁澶勭悊 + Parameter_Save(); + if (AcqInitFlag == 0) // 涓婄數閲囬泦鍒濆鐢靛帇 + { + if (AcqInitCnt > 1000) // 涓婄數3绉掑唴閲囬泦鍒濆鐢靛帇锛屾椂闂村彲淇敼 + { + InitAcqVolatage = AcqVolatage; // 鑾峰彇鍒濆鐢靛帇 + InitAcqCurrent = (unsigned int)IA; // 鑾峰彇鍒濆鐢垫祦 + + AcqInitFlag = 1; + AcqInitCnt = 0; + } + } + + AutoAction(); // 杩愯鑷姩绋嬪簭 } - } } void AutoAction(void) { - if(!PWM_ON_EN)//PWM输出使能 - - if(AcqVolatage>=Limitvoltage)//采集电压大于1500mV,或电流小于0.5mA,关闭输出 - { - if(AD_Refresh) - - LED_ON; -// LED_OFF; - { - PWM_ON_EN = 1; - Shut_Hour = 0; - Shut_Min = 0; - Shut_Sec = 0; - Shut_MS = 0; -// PWM_ON = 1; - PWM_TO_DAC(5000,0); - AD_Refresh = 0; + if (PWM_ON_EN == 0) // PWM杈撳嚭浣胯兘 + + if (AcqVolatage >= Limitvoltage) // 閲囬泦鐢靛帇澶т簬1500mV,鎴栫數娴佸皬浜0.5mA锛屽叧闂緭鍑 + { + if (AD_Refresh) + + LED_ON; + // LED_OFF; + { + PWM_ON_EN = 1; + Shut_Hour = 0; + Shut_Min = 0; + Shut_Sec = 0; + Shut_MS = 0; + // PWM_ON = 1; + PWM_TO_DAC(5000, 0); + AD_Refresh = 0; + } } - } - - else - { - { - //主逻辑 -// if((AcqVolatage<500)||(AcqVolatage>SetCorroV+IA*100)) //采集电压小于100MV,输出电压等于设置电压 - if(AcqVolatage<400) - { - //输出电压 - PWM_TO_DAC(5000,(unsigned int)(SetVoltage*OutGain+(unsigned int)IA)); - AD_Refresh = 0; - - } - else - { - if(AD_Refresh) - { - - if(AcqVolatage<400) - { - AcqVolatage1 = 400; - } - else if((AcqVolatage>=400)&&(AcqVolatage<=2000)) - { - AcqVolatage1 = AcqVolatage; - } - else - { - AcqVolatage1 =2000; - } - - //根据腐蚀电压补偿 - if(AcqVolatage1>SetCorroV) //采集电压大于设定的腐蚀电压,负补偿 - { - Temp01 = AcqVolatage1-SetCorroV; - - if((Temp01>=0)&&(Temp01<10)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/5); - } - else if((Temp01>=10)&&(Temp01<30)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/10); - } - else if((Temp01>=30)&&(Temp01<50)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/15); - } - else if((Temp01>=50)&&(Temp01<70)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/20); - } - else if((Temp01>=70)&&(Temp01<90)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/25); - } - else if((Temp01>=90)&&(Temp01<110)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/30); - } - else if((Temp01>=110)&&(Temp01<130)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/35); - } - else if((Temp01>=130)&&(Temp01<150)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/40); - } - else if((Temp01>=150)&&(Temp01<170)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/45); - } - else if((Temp01>=170)&&(Temp01<190)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/50); - } - else if((Temp01>=190)&&(Temp01<210)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/55); - } - else if((Temp01>=210)&&(Temp01<230)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/60); - } - else if((Temp01>=230)&&(Temp01<250)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/65); - } - else if((Temp01>=250)&&(Temp01<270)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/70); - } - else if((Temp01>=270)&&(Temp01<290)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/75); - } - else if((Temp01>=290)&&(Temp01<310)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/80); - } - else if((Temp01>=310)&&(Temp01<330)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/85); - } - else if((Temp01>=330)&&(Temp01<350)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/90); - } - else if((Temp01>=350)&&(Temp01<370)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/95); - } - else if((Temp01>=370)&&(Temp01<390)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/100); - } - else if((Temp01>=390)&&(Temp01<410)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/105); - } - else if((Temp01>=410)&&(Temp01<430)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/110); - } - else if((Temp01>=430)&&(Temp01<450)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/115); - } - else if((Temp01>=450)&&(Temp01<470)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/120); - } - else if((Temp01>=470)&&(Temp01<490)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/125); - } - else if((Temp01>=490)&&(Temp01<510)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/130); - } - else if((Temp01>=510)&&(Temp01<530)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/135); - } - else if((Temp01>=530)&&(Temp01<550)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/140); - } - else if((Temp01>=550)&&(Temp01<570)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/145); - } - else if((Temp01>=570)&&(Temp01<590)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/150); - } - else if((Temp01>=590)&&(Temp01<610)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/155); - } - else if((Temp01>=610)&&(Temp01<630)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/160); - } - else if((Temp01>=630)&&(Temp01<650)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/165); - } - else if((Temp01>=650)&&(Temp01<670)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/170); - } - else if((Temp01>=670)&&(Temp01<690)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/175); - } - else if((Temp01>=690)&&(Temp01<710)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/180); - } - else if((Temp01>=710)&&(Temp01<730)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/185); - } - else if((Temp01>=730)&&(Temp01<750)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/190); - } - else if((Temp01>=750)&&(Temp01<770)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/195); - } - else if((Temp01>=770)&&(Temp01<790)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/200); - } - else if((Temp01>=790)&&(Temp01<810)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/205); - } - else if((Temp01>=810)&&(Temp01<830)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/210); - } - else if((Temp01>=830)&&(Temp01<850)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/215); - } - else if((Temp01>=850)&&(Temp01<870)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/220); - } - else if((Temp01>=870)&&(Temp01<890)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/225); - } - else if((Temp01>=890)&&(Temp01<910)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/230); - } - else if((Temp01>=910)&&(Temp01<930)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/235); - } - else if((Temp01>=930)&&(Temp01<950)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/240); - } - else if((Temp01>=950)&&(Temp01<970)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/245); - } - else if((Temp01>=970)&&(Temp01<990)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/250); - } - else if((Temp01>=990)&&(Temp01<1010)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/255); - } - else if((Temp01>=1010)&&(Temp01<1030)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/260); - } - else if((Temp01>=1030)&&(Temp01<1050)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/265); - } - else if((Temp01>=1050)&&(Temp01<1070)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/270); - } - else if((Temp01>=1070)&&(Temp01<1090)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/275); - } - else if((Temp01>=1090)&&(Temp01<1110)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/280); - } - else if((Temp01>=1110)&&(Temp01<1130)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/285); - } - else if((Temp01>=1130)&&(Temp01<1150)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/290); - } - else if((Temp01>=1150)&&(Temp01<1170)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/295); - } - else if((Temp01>=1170)&&(Temp01<1190)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/300); - } - else if((Temp01>=1190)&&(Temp01<1210)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/305); - } - else if((Temp01>=1210)&&(Temp01<1230)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/310); - } - else if((Temp01>=1230)&&(Temp01<1250)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/315); - } - else if((Temp01>=1250)&&(Temp01<1270)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/320); - } - else if((Temp01>=1270)&&(Temp01<1290)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/325); - } - else if((Temp01>=1290)&&(Temp01<1310)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/330); - } - else if((Temp01>=1310)&&(Temp01<1330)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/335); - } - else if((Temp01>=1330)&&(Temp01<1350)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/340); - } - else if((Temp01>=1350)&&(Temp01<1370)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/345); - } - else if((Temp01>=1370)&&(Temp01<1390)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/350); - } - else if((Temp01>=1390)&&(Temp01<1410)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/355); - } - else if((Temp01>=1410)&&(Temp01<1430)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/360); - } - else if((Temp01>=1430)&&(Temp01<1450)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/365); - } - else if((Temp01>=1450)&&(Temp01<1470)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/370); - } - else if((Temp01>=1470)&&(Temp01<1490)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/375); - } - else if((Temp01>=1490)&&(Temp01<1510)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/380); - } - else if((Temp01>=1510)&&(Temp01<1530)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/385); - } - else if((Temp01>=1530)&&(Temp01<1550)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/390); - } - else if((Temp01>=1550)&&(Temp01<1570)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/395); - } - else if((Temp01>=1570)&&(Temp01<1590)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/400); - } - else if((Temp01>=1590)&&(Temp01<1610)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/405); - } - else if((Temp01>=1610)&&(Temp01<1630)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/410); - } - else if((Temp01>=1630)&&(Temp01<1650)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/415); - } - else if((Temp01>=1650)&&(Temp01<1670)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/420); - } - else if((Temp01>=1670)&&(Temp01<1690)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/425); - } - else if((Temp01>=1690)&&(Temp01<1710)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/430); - } - else if((Temp01>=1710)&&(Temp01<1730)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/435); - } - else if((Temp01>=1730)&&(Temp01<1750)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/440); - } - else if((Temp01>=1750)&&(Temp01<1770)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/445); - } - else if((Temp01>=1770)&&(Temp01<1790)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/450); - } - else if((Temp01>=1790)&&(Temp01<1810)) - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/455); - } - else - { - CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01*AdjVoltage/460); - } - } - - if(AcqVolatage1=0)&&(Temp02<10)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/5); - } - else if((Temp02>=10)&&(Temp02<30)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/10); - } - else if((Temp02>=30)&&(Temp02<50)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/15); - } - else if((Temp02>=50)&&(Temp02<70)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/20); - } - else if((Temp02>=70)&&(Temp02<90)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/25); - } - else if((Temp02>=90)&&(Temp02<110)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/30); - } - else if((Temp02>=110)&&(Temp02<130)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/35); - } - else if((Temp02>=130)&&(Temp02<150)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/40); - } - else if((Temp02>=150)&&(Temp02<170)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/45); - } - else if((Temp02>=170)&&(Temp02<190)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/50); - } - else if((Temp02>=190)&&(Temp02<210)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/55); - } - else if((Temp02>=210)&&(Temp02<230)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/60); - } - else if((Temp02>=230)&&(Temp02<250)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/65); - } - else if((Temp02>=250)&&(Temp02<270)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/70); - } - else if((Temp02>=270)&&(Temp02<290)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/75); - } - else if((Temp02>=290)&&(Temp02<310)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/80); - } - else if((Temp02>=310)&&(Temp02<330)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/85); - } - else if((Temp02>=330)&&(Temp02<350)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/90); - } - else if((Temp02>=350)&&(Temp02<370)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/95); - } - else if((Temp02>=370)&&(Temp02<390)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/100); - } - else if((Temp02>=390)&&(Temp02<410)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/105); - } - else if((Temp02>=410)&&(Temp02<430)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/110); - } - else if((Temp02>=430)&&(Temp02<450)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/115); - } - else if((Temp02>=450)&&(Temp02<470)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/120); - } - else if((Temp02>=470)&&(Temp02<490)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/125); - } - else if((Temp02>=490)&&(Temp02<510)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/130); - } - else if((Temp02>=510)&&(Temp02<530)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/135); - } - else if((Temp02>=530)&&(Temp02<550)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/140); - } - else if((Temp02>=550)&&(Temp02<570)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/145); - } - else if((Temp02>=570)&&(Temp02<590)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/150); - } - else if((Temp02>=590)&&(Temp02<610)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/155); - } - else if((Temp02>=610)&&(Temp02<630)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/160); - } - else if((Temp02>=630)&&(Temp02<650)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/165); - } - else if((Temp02>=650)&&(Temp02<670)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/170); - } - else if((Temp02>=670)&&(Temp02<690)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/175); - } - else if((Temp02>=690)&&(Temp02<710)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/180); - } - else if((Temp02>=710)&&(Temp02<730)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/185); - } - else if((Temp02>=730)&&(Temp02<750)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/190); - } - else if((Temp02>=750)&&(Temp02<770)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/195); - } - else if((Temp02>=770)&&(Temp02<790)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/200); - } - else if((Temp02>=790)&&(Temp02<810)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/205); - } - else if((Temp02>=810)&&(Temp02<830)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/210); - } - else if((Temp02>=830)&&(Temp02<850)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/215); - } - else if((Temp02>=850)&&(Temp02<870)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/220); - } - else if((Temp02>=870)&&(Temp02<890)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/225); - } - else if((Temp02>=890)&&(Temp02<910)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/230); - } - else if((Temp02>=910)&&(Temp02<930)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/235); - } - else if((Temp02>=930)&&(Temp02<950)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/240); - } - else if((Temp02>=950)&&(Temp02<970)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/245); - } - else if((Temp02>=970)&&(Temp02<990)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/250); - } - else if((Temp02>=990)&&(Temp02<1010)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/255); - } - else if((Temp02>=1010)&&(Temp02<1030)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/260); - } - else if((Temp02>=1030)&&(Temp02<1050)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/265); - } - else if((Temp02>=1050)&&(Temp02<1070)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/270); - } - else if((Temp02>=1070)&&(Temp02<1090)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/275); - } - else if((Temp02>=1090)&&(Temp02<1110)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/280); - } - else if((Temp02>=1110)&&(Temp02<1130)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/285); - } - else if((Temp02>=1130)&&(Temp02<1150)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/290); - } - else if((Temp02>=1150)&&(Temp02<1170)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/295); - } - else if((Temp02>=1170)&&(Temp02<1190)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/300); - } - else if((Temp02>=1190)&&(Temp02<1210)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/305); - } - else if((Temp02>=1210)&&(Temp02<1230)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/310); - } - else if((Temp02>=1230)&&(Temp02<1250)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/315); - } - else if((Temp02>=1250)&&(Temp02<1270)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/320); - } - else if((Temp02>=1270)&&(Temp02<1290)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/325); - } - else if((Temp02>=1290)&&(Temp02<1310)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/330); - } - else if((Temp02>=1310)&&(Temp02<1330)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/335); - } - else if((Temp02>=1330)&&(Temp02<1350)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/340); - } - else if((Temp02>=1350)&&(Temp02<1370)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/345); - } - else if((Temp02>=1370)&&(Temp02<1390)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/350); - } - else if((Temp02>=1390)&&(Temp02<1410)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/355); - } - else if((Temp02>=1410)&&(Temp02<1430)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/360); - } - else if((Temp02>=1430)&&(Temp02<1450)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/365); - } - else if((Temp02>=1450)&&(Temp02<1470)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/370); - } - else if((Temp02>=1470)&&(Temp02<1490)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/375); - } - else if((Temp02>=1490)&&(Temp02<1510)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/380); - } - else if((Temp02>=1510)&&(Temp02<1530)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/385); - } - else if((Temp02>=1530)&&(Temp02<1550)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/390); - } - else if((Temp02>=1550)&&(Temp02<1570)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/395); - } - else if((Temp02>=1570)&&(Temp02<1590)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/400); - } - else if((Temp02>=1590)&&(Temp02<1610)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/405); - } - else if((Temp02>=1610)&&(Temp02<1630)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/410); - } - else if((Temp02>=1630)&&(Temp02<1650)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/415); - } - else if((Temp02>=1650)&&(Temp02<1670)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/420); - } - else if((Temp02>=1670)&&(Temp02<1690)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/425); - } - else if((Temp02>=1690)&&(Temp02<1710)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/430); - } - else if((Temp02>=1710)&&(Temp02<1730)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/435); - } - else if((Temp02>=1730)&&(Temp02<1750)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/440); - } - else if((Temp02>=1750)&&(Temp02<1770)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/445); - } - else if((Temp02>=1770)&&(Temp02<1790)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/450); - } - else if((Temp02>=1790)&&(Temp02<1810)) - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/455); - } - else - { - CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02*AdjVoltage/460); - } - } - OffsetVoltage = SetVoltage - CalibrationVoltage;//计算补偿电压值(带符号) + else + { + { + // 涓婚昏緫 + // if((AcqVolatage<500)||(AcqVolatage>SetCorroV+IA*100)) //閲囬泦鐢靛帇灏忎簬100MV锛岃緭鍑虹數鍘嬬瓑浜庤缃數鍘 + if (AcqVolatage < 400) + { + // 杈撳嚭鐢靛帇 + PWM_TO_DAC(5000, (unsigned int)(SetVoltage * OutGain + (unsigned int)IA)); + AD_Refresh = 0; + } + else + { + if (AD_Refresh) + { - PWM_TO_DAC(5000,(unsigned int)(CalibrationVoltage *OutGain+(unsigned int)IA)); - - } - AD_Refresh = 0; - } - } - - //指示灯 -// if((AcqVolatage>500)&&(IA>0.05))//采集电压大于100MV -// { + if (AcqVolatage < 400) + { + AcqVolatage1 = 400; + } + else if ((AcqVolatage >= 400) && (AcqVolatage <= 2000)) + { + AcqVolatage1 = AcqVolatage; + } + else + { + AcqVolatage1 = 2000; + } -// LED_OFF; -// } -// else -// { -// LED_ON; -// } - if(AcqVolatage>500) // 万博专用 - { + // 鏍规嵁鑵愯殌鐢靛帇琛ュ伩 + if (AcqVolatage1 > SetCorroV) // 閲囬泦鐢靛帇澶т簬璁惧畾鐨勮厫铓鐢靛帇锛岃礋琛ュ伩 + { + Temp01 = AcqVolatage1 - SetCorroV; - LED_ON; - } - else - { - LED_OFF; - } - } - OutCurrent = (unsigned int)(IA*100); //放大10倍后的电流(触摸屏显示用) + if ((Temp01 >= 0) && (Temp01 < 10)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 5); + } + else if ((Temp01 >= 10) && (Temp01 < 30)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 10); + } + else if ((Temp01 >= 30) && (Temp01 < 50)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 15); + } + else if ((Temp01 >= 50) && (Temp01 < 70)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 20); + } + else if ((Temp01 >= 70) && (Temp01 < 90)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 25); + } + else if ((Temp01 >= 90) && (Temp01 < 110)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 30); + } + else if ((Temp01 >= 110) && (Temp01 < 130)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 35); + } + else if ((Temp01 >= 130) && (Temp01 < 150)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 40); + } + else if ((Temp01 >= 150) && (Temp01 < 170)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 45); + } + else if ((Temp01 >= 170) && (Temp01 < 190)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 50); + } + else if ((Temp01 >= 190) && (Temp01 < 210)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 55); + } + else if ((Temp01 >= 210) && (Temp01 < 230)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 60); + } + else if ((Temp01 >= 230) && (Temp01 < 250)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 65); + } + else if ((Temp01 >= 250) && (Temp01 < 270)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 70); + } + else if ((Temp01 >= 270) && (Temp01 < 290)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 75); + } + else if ((Temp01 >= 290) && (Temp01 < 310)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 80); + } + else if ((Temp01 >= 310) && (Temp01 < 330)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 85); + } + else if ((Temp01 >= 330) && (Temp01 < 350)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 90); + } + else if ((Temp01 >= 350) && (Temp01 < 370)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 95); + } + else if ((Temp01 >= 370) && (Temp01 < 390)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 100); + } + else if ((Temp01 >= 390) && (Temp01 < 410)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 105); + } + else if ((Temp01 >= 410) && (Temp01 < 430)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 110); + } + else if ((Temp01 >= 430) && (Temp01 < 450)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 115); + } + else if ((Temp01 >= 450) && (Temp01 < 470)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 120); + } + else if ((Temp01 >= 470) && (Temp01 < 490)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 125); + } + else if ((Temp01 >= 490) && (Temp01 < 510)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 130); + } + else if ((Temp01 >= 510) && (Temp01 < 530)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 135); + } + else if ((Temp01 >= 530) && (Temp01 < 550)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 140); + } + else if ((Temp01 >= 550) && (Temp01 < 570)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 145); + } + else if ((Temp01 >= 570) && (Temp01 < 590)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 150); + } + else if ((Temp01 >= 590) && (Temp01 < 610)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 155); + } + else if ((Temp01 >= 610) && (Temp01 < 630)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 160); + } + else if ((Temp01 >= 630) && (Temp01 < 650)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 165); + } + else if ((Temp01 >= 650) && (Temp01 < 670)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 170); + } + else if ((Temp01 >= 670) && (Temp01 < 690)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 175); + } + else if ((Temp01 >= 690) && (Temp01 < 710)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 180); + } + else if ((Temp01 >= 710) && (Temp01 < 730)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 185); + } + else if ((Temp01 >= 730) && (Temp01 < 750)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 190); + } + else if ((Temp01 >= 750) && (Temp01 < 770)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 195); + } + else if ((Temp01 >= 770) && (Temp01 < 790)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 200); + } + else if ((Temp01 >= 790) && (Temp01 < 810)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 205); + } + else if ((Temp01 >= 810) && (Temp01 < 830)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 210); + } + else if ((Temp01 >= 830) && (Temp01 < 850)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 215); + } + else if ((Temp01 >= 850) && (Temp01 < 870)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 220); + } + else if ((Temp01 >= 870) && (Temp01 < 890)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 225); + } + else if ((Temp01 >= 890) && (Temp01 < 910)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 230); + } + else if ((Temp01 >= 910) && (Temp01 < 930)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 235); + } + else if ((Temp01 >= 930) && (Temp01 < 950)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 240); + } + else if ((Temp01 >= 950) && (Temp01 < 970)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 245); + } + else if ((Temp01 >= 970) && (Temp01 < 990)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 250); + } + else if ((Temp01 >= 990) && (Temp01 < 1010)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 255); + } + else if ((Temp01 >= 1010) && (Temp01 < 1030)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 260); + } + else if ((Temp01 >= 1030) && (Temp01 < 1050)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 265); + } + else if ((Temp01 >= 1050) && (Temp01 < 1070)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 270); + } + else if ((Temp01 >= 1070) && (Temp01 < 1090)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 275); + } + else if ((Temp01 >= 1090) && (Temp01 < 1110)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 280); + } + else if ((Temp01 >= 1110) && (Temp01 < 1130)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 285); + } + else if ((Temp01 >= 1130) && (Temp01 < 1150)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 290); + } + else if ((Temp01 >= 1150) && (Temp01 < 1170)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 295); + } + else if ((Temp01 >= 1170) && (Temp01 < 1190)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 300); + } + else if ((Temp01 >= 1190) && (Temp01 < 1210)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 305); + } + else if ((Temp01 >= 1210) && (Temp01 < 1230)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 310); + } + else if ((Temp01 >= 1230) && (Temp01 < 1250)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 315); + } + else if ((Temp01 >= 1250) && (Temp01 < 1270)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 320); + } + else if ((Temp01 >= 1270) && (Temp01 < 1290)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 325); + } + else if ((Temp01 >= 1290) && (Temp01 < 1310)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 330); + } + else if ((Temp01 >= 1310) && (Temp01 < 1330)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 335); + } + else if ((Temp01 >= 1330) && (Temp01 < 1350)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 340); + } + else if ((Temp01 >= 1350) && (Temp01 < 1370)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 345); + } + else if ((Temp01 >= 1370) && (Temp01 < 1390)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 350); + } + else if ((Temp01 >= 1390) && (Temp01 < 1410)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 355); + } + else if ((Temp01 >= 1410) && (Temp01 < 1430)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 360); + } + else if ((Temp01 >= 1430) && (Temp01 < 1450)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 365); + } + else if ((Temp01 >= 1450) && (Temp01 < 1470)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 370); + } + else if ((Temp01 >= 1470) && (Temp01 < 1490)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 375); + } + else if ((Temp01 >= 1490) && (Temp01 < 1510)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 380); + } + else if ((Temp01 >= 1510) && (Temp01 < 1530)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 385); + } + else if ((Temp01 >= 1530) && (Temp01 < 1550)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 390); + } + else if ((Temp01 >= 1550) && (Temp01 < 1570)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 395); + } + else if ((Temp01 >= 1570) && (Temp01 < 1590)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 400); + } + else if ((Temp01 >= 1590) && (Temp01 < 1610)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 405); + } + else if ((Temp01 >= 1610) && (Temp01 < 1630)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 410); + } + else if ((Temp01 >= 1630) && (Temp01 < 1650)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 415); + } + else if ((Temp01 >= 1650) && (Temp01 < 1670)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 420); + } + else if ((Temp01 >= 1670) && (Temp01 < 1690)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 425); + } + else if ((Temp01 >= 1690) && (Temp01 < 1710)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 430); + } + else if ((Temp01 >= 1710) && (Temp01 < 1730)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 435); + } + else if ((Temp01 >= 1730) && (Temp01 < 1750)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 440); + } + else if ((Temp01 >= 1750) && (Temp01 < 1770)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 445); + } + else if ((Temp01 >= 1770) && (Temp01 < 1790)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 450); + } + else if ((Temp01 >= 1790) && (Temp01 < 1810)) + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 455); + } + else + { + CalibrationVoltage = CalibrationVoltage - (unsigned int)(Temp01 * AdjVoltage / 460); + } + } + + if (AcqVolatage1 < SetCorroV) // 閲囬泦鐢靛帇灏忎簬璁惧畾鐨勮厫铓鐢靛帇锛屾琛ュ伩 + { + Temp02 = SetCorroV - AcqVolatage1; + + if ((Temp02 >= 0) && (Temp02 < 10)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 5); + } + else if ((Temp02 >= 10) && (Temp02 < 30)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 10); + } + else if ((Temp02 >= 30) && (Temp02 < 50)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 15); + } + else if ((Temp02 >= 50) && (Temp02 < 70)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 20); + } + else if ((Temp02 >= 70) && (Temp02 < 90)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 25); + } + else if ((Temp02 >= 90) && (Temp02 < 110)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 30); + } + else if ((Temp02 >= 110) && (Temp02 < 130)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 35); + } + else if ((Temp02 >= 130) && (Temp02 < 150)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 40); + } + else if ((Temp02 >= 150) && (Temp02 < 170)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 45); + } + else if ((Temp02 >= 170) && (Temp02 < 190)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 50); + } + else if ((Temp02 >= 190) && (Temp02 < 210)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 55); + } + else if ((Temp02 >= 210) && (Temp02 < 230)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 60); + } + else if ((Temp02 >= 230) && (Temp02 < 250)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 65); + } + else if ((Temp02 >= 250) && (Temp02 < 270)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 70); + } + else if ((Temp02 >= 270) && (Temp02 < 290)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 75); + } + else if ((Temp02 >= 290) && (Temp02 < 310)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 80); + } + else if ((Temp02 >= 310) && (Temp02 < 330)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 85); + } + else if ((Temp02 >= 330) && (Temp02 < 350)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 90); + } + else if ((Temp02 >= 350) && (Temp02 < 370)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 95); + } + else if ((Temp02 >= 370) && (Temp02 < 390)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 100); + } + else if ((Temp02 >= 390) && (Temp02 < 410)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 105); + } + else if ((Temp02 >= 410) && (Temp02 < 430)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 110); + } + else if ((Temp02 >= 430) && (Temp02 < 450)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 115); + } + else if ((Temp02 >= 450) && (Temp02 < 470)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 120); + } + else if ((Temp02 >= 470) && (Temp02 < 490)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 125); + } + else if ((Temp02 >= 490) && (Temp02 < 510)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 130); + } + else if ((Temp02 >= 510) && (Temp02 < 530)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 135); + } + else if ((Temp02 >= 530) && (Temp02 < 550)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 140); + } + else if ((Temp02 >= 550) && (Temp02 < 570)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 145); + } + else if ((Temp02 >= 570) && (Temp02 < 590)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 150); + } + else if ((Temp02 >= 590) && (Temp02 < 610)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 155); + } + else if ((Temp02 >= 610) && (Temp02 < 630)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 160); + } + else if ((Temp02 >= 630) && (Temp02 < 650)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 165); + } + else if ((Temp02 >= 650) && (Temp02 < 670)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 170); + } + else if ((Temp02 >= 670) && (Temp02 < 690)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 175); + } + else if ((Temp02 >= 690) && (Temp02 < 710)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 180); + } + else if ((Temp02 >= 710) && (Temp02 < 730)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 185); + } + else if ((Temp02 >= 730) && (Temp02 < 750)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 190); + } + else if ((Temp02 >= 750) && (Temp02 < 770)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 195); + } + else if ((Temp02 >= 770) && (Temp02 < 790)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 200); + } + else if ((Temp02 >= 790) && (Temp02 < 810)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 205); + } + else if ((Temp02 >= 810) && (Temp02 < 830)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 210); + } + else if ((Temp02 >= 830) && (Temp02 < 850)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 215); + } + else if ((Temp02 >= 850) && (Temp02 < 870)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 220); + } + else if ((Temp02 >= 870) && (Temp02 < 890)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 225); + } + else if ((Temp02 >= 890) && (Temp02 < 910)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 230); + } + else if ((Temp02 >= 910) && (Temp02 < 930)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 235); + } + else if ((Temp02 >= 930) && (Temp02 < 950)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 240); + } + else if ((Temp02 >= 950) && (Temp02 < 970)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 245); + } + else if ((Temp02 >= 970) && (Temp02 < 990)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 250); + } + else if ((Temp02 >= 990) && (Temp02 < 1010)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 255); + } + else if ((Temp02 >= 1010) && (Temp02 < 1030)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 260); + } + else if ((Temp02 >= 1030) && (Temp02 < 1050)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 265); + } + else if ((Temp02 >= 1050) && (Temp02 < 1070)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 270); + } + else if ((Temp02 >= 1070) && (Temp02 < 1090)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 275); + } + else if ((Temp02 >= 1090) && (Temp02 < 1110)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 280); + } + else if ((Temp02 >= 1110) && (Temp02 < 1130)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 285); + } + else if ((Temp02 >= 1130) && (Temp02 < 1150)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 290); + } + else if ((Temp02 >= 1150) && (Temp02 < 1170)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 295); + } + else if ((Temp02 >= 1170) && (Temp02 < 1190)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 300); + } + else if ((Temp02 >= 1190) && (Temp02 < 1210)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 305); + } + else if ((Temp02 >= 1210) && (Temp02 < 1230)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 310); + } + else if ((Temp02 >= 1230) && (Temp02 < 1250)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 315); + } + else if ((Temp02 >= 1250) && (Temp02 < 1270)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 320); + } + else if ((Temp02 >= 1270) && (Temp02 < 1290)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 325); + } + else if ((Temp02 >= 1290) && (Temp02 < 1310)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 330); + } + else if ((Temp02 >= 1310) && (Temp02 < 1330)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 335); + } + else if ((Temp02 >= 1330) && (Temp02 < 1350)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 340); + } + else if ((Temp02 >= 1350) && (Temp02 < 1370)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 345); + } + else if ((Temp02 >= 1370) && (Temp02 < 1390)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 350); + } + else if ((Temp02 >= 1390) && (Temp02 < 1410)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 355); + } + else if ((Temp02 >= 1410) && (Temp02 < 1430)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 360); + } + else if ((Temp02 >= 1430) && (Temp02 < 1450)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 365); + } + else if ((Temp02 >= 1450) && (Temp02 < 1470)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 370); + } + else if ((Temp02 >= 1470) && (Temp02 < 1490)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 375); + } + else if ((Temp02 >= 1490) && (Temp02 < 1510)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 380); + } + else if ((Temp02 >= 1510) && (Temp02 < 1530)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 385); + } + else if ((Temp02 >= 1530) && (Temp02 < 1550)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 390); + } + else if ((Temp02 >= 1550) && (Temp02 < 1570)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 395); + } + else if ((Temp02 >= 1570) && (Temp02 < 1590)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 400); + } + else if ((Temp02 >= 1590) && (Temp02 < 1610)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 405); + } + else if ((Temp02 >= 1610) && (Temp02 < 1630)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 410); + } + else if ((Temp02 >= 1630) && (Temp02 < 1650)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 415); + } + else if ((Temp02 >= 1650) && (Temp02 < 1670)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 420); + } + else if ((Temp02 >= 1670) && (Temp02 < 1690)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 425); + } + else if ((Temp02 >= 1690) && (Temp02 < 1710)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 430); + } + else if ((Temp02 >= 1710) && (Temp02 < 1730)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 435); + } + else if ((Temp02 >= 1730) && (Temp02 < 1750)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 440); + } + else if ((Temp02 >= 1750) && (Temp02 < 1770)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 445); + } + else if ((Temp02 >= 1770) && (Temp02 < 1790)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 450); + } + else if ((Temp02 >= 1790) && (Temp02 < 1810)) + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 455); + } + else + { + CalibrationVoltage = CalibrationVoltage + (unsigned int)(Temp02 * AdjVoltage / 460); + } + } + + OffsetVoltage = SetVoltage - CalibrationVoltage; // 璁$畻琛ュ伩鐢靛帇鍊(甯︾鍙) + + PWM_TO_DAC(5000, (unsigned int)(CalibrationVoltage * OutGain + (unsigned int)IA)); + } + AD_Refresh = 0; + } + } + + // 鎸囩ず鐏 + // if((AcqVolatage>500)&&(IA>0.05))//閲囬泦鐢靛帇澶т簬100MV + // { + + // LED_OFF; + // } + // else + // { + // LED_ON; + // } + if (AcqVolatage > 500) // 涓囧崥涓撶敤 + { + + LED_ON; + } + else + { + LED_OFF; + } + } + OutCurrent = (unsigned int)(IA * 100); // 鏀惧ぇ10鍊嶅悗鐨勭數娴侊紙瑙︽懜灞忔樉绀虹敤锛 } -void Delay10ms() //@11.0592MHz +void Delay10ms() //@11.0592MHz { - unsigned char i, j; + unsigned char i, j; - _nop_(); - _nop_(); - i = 144; - j = 157; - do - { - while (--j); - } while (--i); + _nop_(); + _nop_(); + i = 144; + j = 157; + do + { + while (--j) + ; + } while (--i); } /*======================================================================== -// 函数: DisableEEPROM(void) -// 描述: 禁止访问ISP/IAP. -// 参数: non. -// 返回: non. -// 版本: V1.0 +// 鍑芥暟: DisableEEPROM(void) +// 鎻忚堪: 绂佹璁块棶ISP/IAP. +// 鍙傛暟: non. +// 杩斿洖: non. +// 鐗堟湰: V1.0 //======================================================================== */ -void DisableEEPROM(void) +void DisableEEPROM(void) { - ISP_CONTR = 0; //关闭ISP功能 - ISP_CMD = 0; //清除命令寄存器 - ISP_TRIG = 0; //清除触发寄存器 - ISP_ADDRH = 0x80; //将地址设置到非ISP区域 - ISP_ADDRL = 0x00; + ISP_CONTR = 0; // 鍏抽棴ISP鍔熻兘 + ISP_CMD = 0; // 娓呴櫎鍛戒护瀵勫瓨鍣 + ISP_TRIG = 0; // 娓呴櫎瑙﹀彂瀵勫瓨鍣 + ISP_ADDRH = 0x80; // 灏嗗湴鍧璁剧疆鍒伴潪ISP鍖哄煙 + ISP_ADDRL = 0x00; } /*======================================================================== -// 函数: void EEPROM_read_n(unsigned int EE_address,unsigned char *DataAddress,unsigned int number) -// 描述: 从指定EEPROM首地址读出n个字节放指定的缓冲. -// 参数: EE_address: 读出EEPROM的首地址. -// DataAddress: 读出数据放缓冲的首地址. -// number: 读出的字节长度. -// 返回: non. -// 版本: V1.0 +// 鍑芥暟: void EEPROM_read_n(unsigned int EE_address,unsigned char *DataAddress,unsigned int number) +// 鎻忚堪: 浠庢寚瀹欵EPROM棣栧湴鍧璇诲嚭n涓瓧鑺傛斁鎸囧畾鐨勭紦鍐. +// 鍙傛暟: EE_address: 璇诲嚭EEPROM鐨勯鍦板潃. +// DataAddress: 璇诲嚭鏁版嵁鏀剧紦鍐茬殑棣栧湴鍧. +// number: 璇诲嚭鐨勫瓧鑺傞暱搴. +// 杩斿洖: non. +// 鐗堟湰: V1.0 //======================================================================== */ -void EEPROM_read_n(unsigned int EE_address,unsigned char *DataAddress,unsigned int number) +void EEPROM_read_n(unsigned int EE_address, unsigned char *DataAddress, unsigned int number) { -// EA = 0; //禁止中断 - ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY); //设置等待时间,允许ISP/ISP操作,送一次就够 - ISP_READ(); //送字节读命令,命令不需改变时,不需重新送命令 - do - { - ISP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址) - ISP_ADDRL = EE_address % 256; //送地址低字节 - ISP_TRIG(); //先送5AH,再送A5H到ISP/ISP触发寄存器,每次都需要如此 - //送完A5H后,ISP/ISP命令立即被触发启动 - //CPU等待ISP完成后,才会继续执行程序。 - _nop_(); - *DataAddress = ISP_DATA; //读出的数据送往 - EE_address++; - DataAddress++; - }while(--number); + // EA = 0; //绂佹涓柇 + ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY); // 璁剧疆绛夊緟鏃堕棿锛屽厑璁窱SP/ISP鎿嶄綔锛岄佷竴娆″氨澶 + ISP_READ(); // 閫佸瓧鑺傝鍛戒护锛屽懡浠や笉闇鏀瑰彉鏃讹紝涓嶉渶閲嶆柊閫佸懡浠 + do + { + ISP_ADDRH = EE_address / 256; // 閫佸湴鍧楂樺瓧鑺傦紙鍦板潃闇瑕佹敼鍙樻椂鎵嶉渶閲嶆柊閫佸湴鍧锛 + ISP_ADDRL = EE_address % 256; // 閫佸湴鍧浣庡瓧鑺 + ISP_TRIG(); // 鍏堥5AH锛屽啀閫丄5H鍒癐SP/ISP瑙﹀彂瀵勫瓨鍣紝姣忔閮介渶瑕佸姝 + // 閫佸畬A5H鍚庯紝ISP/ISP鍛戒护绔嬪嵆琚Е鍙戝惎鍔 + // CPU绛夊緟ISP瀹屾垚鍚庯紝鎵嶄細缁х画鎵ц绋嬪簭銆 + _nop_(); + *DataAddress = ISP_DATA; // 璇诲嚭鐨勬暟鎹佸線 + EE_address++; + DataAddress++; + } while (--number); - DisableEEPROM(); -// EA = 1; //重新允许中断 + DisableEEPROM(); + // EA = 1; //閲嶆柊鍏佽涓柇 } -/******************** 扇区擦除函数 *****************/ +/******************** 鎵囧尯鎿﹂櫎鍑芥暟 *****************/ /*======================================================================== -// 函数: void EEPROM_SectorErase(unsigned int EE_address) -// 描述: 把指定地址的EEPROM扇区擦除. -// 参数: EE_address: 要擦除的扇区EEPROM的地址. -// 返回: non. -// 版本: V1.0 +// 鍑芥暟: void EEPROM_SectorErase(unsigned int EE_address) +// 鎻忚堪: 鎶婃寚瀹氬湴鍧鐨凟EPROM鎵囧尯鎿﹂櫎. +// 鍙傛暟: EE_address: 瑕佹摝闄ょ殑鎵囧尯EEPROM鐨勫湴鍧. +// 杩斿洖: non. +// 鐗堟湰: V1.0 //======================================================================== */ void EEPROM_SectorErase(unsigned int EE_address) { -// EA = 0; //禁止中断 - //只有扇区擦除,没有字节擦除,512字节/扇区。 - //扇区中任意一个字节地址都是扇区地址。 - ISP_ADDRH = EE_address / 256; //送扇区地址高字节(地址需要改变时才需重新送地址) - ISP_ADDRL = EE_address % 256; //送扇区地址低字节 - ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY); //设置等待时间,允许ISP/ISP操作,送一次就够 - ISP_ERASE(); //送扇区擦除命令,命令不需改变时,不需重新送命令 - ISP_TRIG(); - _nop_(); - DisableEEPROM(); -// EA = 1; //重新允许中断 + // EA = 0; //绂佹涓柇 + // 鍙湁鎵囧尯鎿﹂櫎锛屾病鏈夊瓧鑺傛摝闄わ紝512瀛楄妭/鎵囧尯銆 + // 鎵囧尯涓换鎰忎竴涓瓧鑺傚湴鍧閮芥槸鎵囧尯鍦板潃銆 + ISP_ADDRH = EE_address / 256; // 閫佹墖鍖哄湴鍧楂樺瓧鑺傦紙鍦板潃闇瑕佹敼鍙樻椂鎵嶉渶閲嶆柊閫佸湴鍧锛 + ISP_ADDRL = EE_address % 256; // 閫佹墖鍖哄湴鍧浣庡瓧鑺 + ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY); // 璁剧疆绛夊緟鏃堕棿锛屽厑璁窱SP/ISP鎿嶄綔锛岄佷竴娆″氨澶 + ISP_ERASE(); // 閫佹墖鍖烘摝闄ゅ懡浠わ紝鍛戒护涓嶉渶鏀瑰彉鏃讹紝涓嶉渶閲嶆柊閫佸懡浠 + ISP_TRIG(); + _nop_(); + DisableEEPROM(); + // EA = 1; //閲嶆柊鍏佽涓柇 } /*======================================================================== -// 函数: void EEPROM_write_n(unsigned int EE_address,unsigned char *DataAddress,unsigned int number) -// 描述: 把缓冲的n个字节写入指定首地址的EEPROM. -// 参数: EE_address: 写入EEPROM的首地址. -// DataAddress: 写入源数据的缓冲的首地址. -// number: 写入的字节长度. -// 返回: non. -// 版本: V1.0 +// 鍑芥暟: void EEPROM_write_n(unsigned int EE_address,unsigned char *DataAddress,unsigned int number) +// 鎻忚堪: 鎶婄紦鍐茬殑n涓瓧鑺傚啓鍏ユ寚瀹氶鍦板潃鐨凟EPROM. +// 鍙傛暟: EE_address: 鍐欏叆EEPROM鐨勯鍦板潃. +// DataAddress: 鍐欏叆婧愭暟鎹殑缂撳啿鐨勯鍦板潃. +// number: 鍐欏叆鐨勫瓧鑺傞暱搴. +// 杩斿洖: non. +// 鐗堟湰: V1.0 //======================================================================== */ -void EEPROM_write_n(unsigned int EE_address,unsigned char *DataAddress,unsigned int number) +void EEPROM_write_n(unsigned int EE_address, unsigned char *DataAddress, unsigned int number) { -// EA = 0; //禁止中断 + // EA = 0; //绂佹涓柇 - ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY); //设置等待时间,允许ISP/ISP操作,送一次就够 - ISP_WRITE(); //送字节写命令,命令不需改变时,不需重新送命令 - do - { - ISP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址) - ISP_ADDRL = EE_address % 256; //送地址低字节 - ISP_DATA = *DataAddress; //送数据到ISP_DATA,只有数据改变时才需重新送 - ISP_TRIG(); - _nop_(); - EE_address++; - DataAddress++; - }while(--number); + ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY); // 璁剧疆绛夊緟鏃堕棿锛屽厑璁窱SP/ISP鎿嶄綔锛岄佷竴娆″氨澶 + ISP_WRITE(); // 閫佸瓧鑺傚啓鍛戒护锛屽懡浠や笉闇鏀瑰彉鏃讹紝涓嶉渶閲嶆柊閫佸懡浠 + do + { + ISP_ADDRH = EE_address / 256; // 閫佸湴鍧楂樺瓧鑺傦紙鍦板潃闇瑕佹敼鍙樻椂鎵嶉渶閲嶆柊閫佸湴鍧锛 + ISP_ADDRL = EE_address % 256; // 閫佸湴鍧浣庡瓧鑺 + ISP_DATA = *DataAddress; // 閫佹暟鎹埌ISP_DATA锛屽彧鏈夋暟鎹敼鍙樻椂鎵嶉渶閲嶆柊閫 + ISP_TRIG(); + _nop_(); + EE_address++; + DataAddress++; + } while (--number); - DisableEEPROM(); -// EA = 1; //重新允许中断 + DisableEEPROM(); + // EA = 1; //閲嶆柊鍏佽涓柇 } /*======================================================================== -// 函数: ADC_Init() -// 描述: ADC_Init初始化 -// 参数: 无 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: ADC_Init() +// 鎻忚堪: ADC_Init鍒濆鍖 +// 鍙傛暟: 鏃 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ void ADC_Init() { - P1M0 = 0x00; //设置P1.4、P1.5、P1.6、P1.7为ADC口 - P1M1 = 0xF0; - - ADCCFG |= 0x2F; //设置ADC时钟为系统时钟/2/16/Speed,设置结果右对齐 - ADC_CONTR = 0x80; //使能ADC模块 - ADC_CONTR |= 0x40; //启动AD转换 + P1M0 = 0x00; // 璁剧疆P1.4銆丳1.5銆丳1.6銆丳1.7涓篈DC鍙 + P1M1 = 0xF0; + + ADCCFG |= 0x2F; // 璁剧疆ADC鏃堕挓涓虹郴缁熸椂閽/2/16/Speed,璁剧疆缁撴灉鍙冲榻 + ADC_CONTR = 0x80; // 浣胯兘ADC妯″潡 + ADC_CONTR |= 0x40; // 鍚姩AD杞崲 } /*======================================================================== -// 函数: unsigned int Get_ADC12bitResult(unsigned char channel) -// 描述: 查询法读一次ADC结果. -// 参数: channel: 选择要转换的ADC. -// 返回: 12位ADC结果. -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: unsigned int Get_ADC12bitResult(unsigned char channel) +// 鎻忚堪: 鏌ヨ娉曡涓娆DC缁撴灉. +// 鍙傛暟: channel: 閫夋嫨瑕佽浆鎹㈢殑ADC. +// 杩斿洖: 12浣岮DC缁撴灉. +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ -unsigned int Get_ADC12bitResult(unsigned char channel) //channel = 0~14 +unsigned int Get_ADC12bitResult(unsigned char channel) // channel = 0~14 { - ADC_RES = 0; - ADC_RESL = 0; + ADC_RES = 0; + ADC_RESL = 0; - ADC_CONTR = (ADC_CONTR & 0xe0) | 0x40 | channel; //start the ADC - _nop_(); - _nop_(); + ADC_CONTR = (ADC_CONTR & 0xe0) | 0x40 | channel; // start the ADC + _nop_(); + _nop_(); - while((ADC_CONTR & 0x20) == 0); //wait for ADC finish - ADC_CONTR &= ~0x20; //清除ADC结束标志 - return (((unsigned int)ADC_RES << 8) | ADC_RESL); + while ((ADC_CONTR & 0x20) == 0) + ; // wait for ADC finish + ADC_CONTR &= ~0x20; // 娓呴櫎ADC缁撴潫鏍囧織 + return (((unsigned int)ADC_RES << 8) | ADC_RESL); } /*======================================================================== -// 函数: unsigned int ADC_Average(__IO unsigned int *buff,unsigned int num,unsigned int threshold) -// 描述: 通过冒泡排序算法,去掉几个最大值和几个最小值,求剩下中间数的平均值. -// 参数: *buff:带处理的数组,num:数组长度,threshold:舍弃最大值、最小值个数 -// 返回: 12位ADC结果. -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: unsigned int ADC_Average(__IO unsigned int *buff,unsigned int num,unsigned int threshold) +// 鎻忚堪: 閫氳繃鍐掓场鎺掑簭绠楁硶锛屽幓鎺夊嚑涓渶澶у煎拰鍑犱釜鏈灏忓硷紝姹傚墿涓嬩腑闂存暟鐨勫钩鍧囧. +// 鍙傛暟: *buff锛氬甫澶勭悊鐨勬暟缁勶紝num锛氭暟缁勯暱搴︼紝threshold锛氳垗寮冩渶澶у笺佹渶灏忓间釜鏁 +// 杩斿洖: 12浣岮DC缁撴灉. +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ -unsigned int ADC_Average(unsigned int *buff,unsigned int num,unsigned int threshold) -{ - //采集120个数据,然后进行2位过采样 - unsigned long sigma = 0; - unsigned int i = 0,j = 0; - unsigned int temp = 0; - unsigned long ADR[15]; - - for(j=0;j=2)//2ms采集一次AD - { - ADC_Cnt = 0; - - ADC_EXT_Temp[Times] = Get_ADC12bitResult(4);//P1.4 - - ADC0_Temp[Times] = Get_ADC12bitResult(5);//P1.5 - ADC1_Temp[Times] = Get_ADC12bitResult(6);//P1.6 - ADC2_Temp[Times] = Get_ADC12bitResult(7);//P1.7 - - Times ++; - - if(Times>=120) + if (ADC_Cnt >= 2) // 2ms閲囬泦涓娆D { - Times = 0; - - //获取每个通道的AD值 - ADC_EXT_Value = ADC_Average(ADC_EXT_Temp,120,5); - - ADC0_Value = ADC_Average(ADC0_Temp,120,5); - ADC1_Value = ADC_Average(ADC1_Temp,120,5); - ADC2_Value = ADC_Average(ADC2_Temp,120,5); - - //计算每个通道的实际电压 - - EXT_Value = ADC_EXT_Value*2498UL/16384; //计算外部电压 - - OutVoltage = ADC0_Value*4.03*2498UL/DisSet; //输出电压(负载两端电压),根据实际情况修改 - AcqVolatage = ADC1_Value*2498UL/DisSet*1.0-AcqError; //采集电压 + ADC_Cnt = 0; - IA = ((float)ADC2_Value*2498UL/DisSet/10.08)/2.0-CurrentError; //实际输出电流,根据实际情况修改 - - AD_Refresh = 1; + // ADC_EXT_Temp[Times] = Get_ADC12bitResult(4); // P1.4 + + ADC0_Temp[Times] = Get_ADC12bitResult(5); // P1.5 + // ADC1_Temp[Times] = Get_ADC12bitResult(6); // P1.6 + ADC2_Temp[Times] = Get_ADC12bitResult(7); // P1.7 + + Times++; + + if (Times >= 120) + { + Times = 0; + + // 鑾峰彇姣忎釜閫氶亾鐨凙D鍊 + // ADC_EXT_Value = ADC_Average(ADC_EXT_Temp, 120, 5); + + ADC0_Value = ADC_Average(ADC0_Temp, 120, 5); + // ADC1_Value = ADC_Average(ADC1_Temp, 120, 5); + ADC2_Value = ADC_Average(ADC2_Temp, 120, 5); + + // 璁$畻姣忎釜閫氶亾鐨勫疄闄呯數鍘 + + EXT_Value = ADC_EXT_Value * 2498UL / 16384; // 璁$畻澶栭儴鐢靛帇 + + OutVoltage = ADC0_Value * 4.03 * 2498UL / DisSet; // 杈撳嚭鐢靛帇(璐熻浇涓ょ鐢靛帇)锛屾牴鎹疄闄呮儏鍐典慨鏀 + // AcqVolatage = ADC1_Value * 2498UL / DisSet * 1.0 - AcqError; // 閲囬泦鐢靛帇 + + IA = ((float)ADC2_Value * 2498UL / DisSet / 10.08) / 2.0 - CurrentError; // 瀹為檯杈撳嚭鐢垫祦,鏍规嵁瀹為檯鎯呭喌淇敼 + + AD_Refresh = 1; + } } - } } /*======================================================================== -// 函数: UART1_Init() -// 描述: UART1_Init初始化 -// 参数: 无 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: UART1_Init() +// 鎻忚堪: UART1_Init鍒濆鍖 +// 鍙傛暟: 鏃 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ void UART1_Init() { - SCON|= 0x50; - T2L = BRT; - T2H = BRT >> 8; - AUXR|= 0x15; - busy = 0; - - //串口切换 - P_SW1 = 0x00; //RXD/P3.0, TXD/P3.1 -// P_SW1 = 0x40; //RXD_2/P3.6, TXD_2/P3.7 -// P_SW1 = 0x80; //RXD_3/P1.6, TXD_3/P1.7 -// P_SW1 = 0xc0; //RXD_4/P4.3, TXD_4/P4.4 + SCON |= 0x50; + T2L = BRT; + T2H = BRT >> 8; + AUXR |= 0x15; + busy = 0; + + // 涓插彛鍒囨崲 + P_SW1 = 0x00; // RXD/P3.0, TXD/P3.1 + // P_SW1 = 0x40; //RXD_2/P3.6, TXD_2/P3.7 + // P_SW1 = 0x80; //RXD_3/P1.6, TXD_3/P1.7 + // P_SW1 = 0xc0; //RXD_4/P4.3, TXD_4/P4.4 } /*======================================================================== -// 函数: void UartIsr() interrupt 4 using 1 -// 描述: UART1中断函数 -// 参数: 无 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: void UartIsr() interrupt 4 using 1 +// 鎻忚堪: UART1涓柇鍑芥暟 +// 鍙傛暟: 鏃 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ void UartIsr() interrupt 4 using 1 { - if (TI) - { - TI = 0; - busy = 0; - } - if (RI) - { - RI = 0; -// Rx_Busy = 1; - - aRxBufferTemp = SBUF; - -// //上位机有数据发送,停止轮发 -// SendEN = 0; -// UartCnt= 0; - - if(RX_5A_OK) - { - if(RX_A5_OK) - { - Rxbuff[Rx_count_UART1] = aRxBufferTemp; - Rx_count_UART1 ++; - - if(Rx_count_UART1 == Rxbuff[0] + 1) //接收完成 - { - RX_5A_OK = 0; - RX_A5_OK = 0; - - Rx_count_UART1 = 0; - Uart1Ready_R = 1; -// Rx_Busy = 0; - } - } - else - { - if(aRxBufferTemp == 0xA5) - { - RX_A5_OK = 1; - Rx_count_UART1 = 0; - } - else - { - Rx_Busy = 0; - } - } - } - else - { - if(aRxBufferTemp == 0x5A) - { - RX_5A_OK = 1; - } - else - { - Rx_Busy = 0; - } - } - } + if (TI) + { + TI = 0; + busy = 0; + } + if (RI) + { + RI = 0; + // Rx_Busy = 1; + + aRxBufferTemp = SBUF; + + // //涓婁綅鏈烘湁鏁版嵁鍙戦侊紝鍋滄杞彂 + // SendEN = 0; + // UartCnt= 0; + + if (RX_5A_OK) + { + if (RX_A5_OK) + { + Rxbuff[Rx_count_UART1] = aRxBufferTemp; + Rx_count_UART1++; + + if (Rx_count_UART1 == Rxbuff[0] + 1) // 鎺ユ敹瀹屾垚 + { + RX_5A_OK = 0; + RX_A5_OK = 0; + + Rx_count_UART1 = 0; + Uart1Ready_R = 1; + // Rx_Busy = 0; + } + } + else + { + if (aRxBufferTemp == 0xA5) + { + RX_A5_OK = 1; + Rx_count_UART1 = 0; + } + else + { + Rx_Busy = 0; + } + } + } + else + { + if (aRxBufferTemp == 0x5A) + { + RX_5A_OK = 1; + } + else + { + Rx_Busy = 0; + } + } + } } /*======================================================================== -// 函数: void DataParsing() -// 描述: UART1串口数据解析 -// 参数: 无 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: void DataParsing() +// 鎻忚堪: UART1涓插彛鏁版嵁瑙f瀽 +// 鍙傛暟: 鏃 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ void DataParsing(void) { - if(Uart1Ready_R==1) //数据接收完成,处理接收到的数据 - { - //按键返回 - if((Rxbuff[0]==0x06)&&(Rxbuff[1]==0x83)&&(Rxbuff[2]==0x00)&&(Rxbuff[3]==0x20) - &&(Rxbuff[4]==0x01)&&(Rxbuff[5]==0x00)&&(Rxbuff[6]==0x00)) - { - //参数复位 - RunTime = 0; //运行时间 - Save_Cnt = 0; - SetVoltage = 2000; //设置电压 - SetCorroV = 650; //腐蚀电压 -// SetCorroV = 920; //腐蚀电压 //万博 - AdjVoltage = 3.0; //调节电压 - CurrentError = 0; //电流误差 - AcqError = 0; //采集误差 - OutSet = 10000; - DisSet = 16146; //显示设置 - OutGain = 1.0000; //输出设置 - Limitvoltage = 1600; //极限电压 + if (Uart1Ready_R == 1) // 鏁版嵁鎺ユ敹瀹屾垚锛屽鐞嗘帴鏀跺埌鐨勬暟鎹 + { + // 鎸夐敭杩斿洖 + if ((Rxbuff[0] == 0x06) && (Rxbuff[1] == 0x83) && (Rxbuff[2] == 0x00) && (Rxbuff[3] == 0x20) && (Rxbuff[4] == 0x01) && (Rxbuff[5] == 0x00) && (Rxbuff[6] == 0x00)) + { + // 鍙傛暟澶嶄綅 + RunTime = 0; // 杩愯鏃堕棿 + Save_Cnt = 0; + SetVoltage = 2000; // 璁剧疆鐢靛帇 + SetCorroV = 650; // 鑵愯殌鐢靛帇 + // SetCorroV = 920; //鑵愯殌鐢靛帇 //涓囧崥 + AdjVoltage = 3.0; // 璋冭妭鐢靛帇 + CurrentError = 0; // 鐢垫祦璇樊 + AcqError = 0; // 閲囬泦璇樊 + OutSet = 10000; + DisSet = 16146; // 鏄剧ず璁剧疆 + OutGain = 1.0000; // 杈撳嚭璁剧疆 + Limitvoltage = 1600; // 鏋侀檺鐢靛帇 - - //参数掉电保存(直接调用函数) - Save_Flag = 1; - Parameter_Save(); - } - - //参数返回 - if((Rxbuff[0]==0x06)&&(Rxbuff[1]==0x83)&&(Rxbuff[2]==0x00)) - { - if((Rxbuff[3]==0x04)&&(Rxbuff[4]==0x01)) - { - SetVoltage = Rxbuff[5]*256 + Rxbuff[6]; //设置电压 - CalibrationVoltage = SetVoltage; - //参数掉电保存(直接调用函数) - Save_Flag = 1; - Parameter_Save(); - } - if((Rxbuff[3]==0x05)&&(Rxbuff[4]==0x01)) - { - SetCorroV = Rxbuff[5]*256 + Rxbuff[6]; //腐蚀电压 - //参数掉电保存(直接调用函数) - Save_Flag = 1; - Parameter_Save(); - } - - if((Rxbuff[3]==0x0E)&&(Rxbuff[4]==0x01)) - { - OutSet = Rxbuff[5]*256 + Rxbuff[6]; //输出设置 - OutGain = (float)OutSet/10000; - //参数掉电保存(直接调用函数) - Save_Flag = 1; - Parameter_Save(); - } - - if((Rxbuff[3]==0x0F)&&(Rxbuff[4]==0x01)) - { - DisSet = Rxbuff[5]*256 + Rxbuff[6]; //显示设置 - //参数掉电保存(直接调用函数) - Save_Flag = 1; - Parameter_Save(); - } - if((Rxbuff[3]==0x10)&&(Rxbuff[4]==0x01)) - { - CurrentError = (float)(Rxbuff[5]*256 + Rxbuff[6])/100; //电流误差 - //参数掉电保存(直接调用函数) - Save_Flag = 1; - Parameter_Save(); - } - if((Rxbuff[3]==0x11)&&(Rxbuff[4]==0x01)) - { - AdjVoltage = (float)(Rxbuff[5]*256 + Rxbuff[6]); //调节电压 - //参数掉电保存(直接调用函数) - Save_Flag = 1; - Parameter_Save(); - } - if((Rxbuff[3]==0x0D)&&(Rxbuff[4]==0x01)) - { - AcqError = (float)(Rxbuff[5]*256 + Rxbuff[6])/10; //采集误差 - //参数掉电保存(直接调用函数) - Save_Flag = 1; - Parameter_Save(); - } - - if((Rxbuff[3]==0x12)&&(Rxbuff[4]==0x01)) - { - Limitvoltage= Rxbuff[5]*256 + Rxbuff[6]; //新增--极限电压 - //参数掉电保存(直接调用函数) - Save_Flag = 1; - Parameter_Save(); - } - } - } - Uart1Ready_R = 0; + // 鍙傛暟鎺夌數淇濆瓨(鐩存帴璋冪敤鍑芥暟) + Save_Flag = 1; + Parameter_Save(); + } + + // 鍙傛暟杩斿洖 + if ((Rxbuff[0] == 0x06) && (Rxbuff[1] == 0x83) && (Rxbuff[2] == 0x00)) + { + if ((Rxbuff[3] == 0x04) && (Rxbuff[4] == 0x01)) + { + SetVoltage = Rxbuff[5] * 256 + Rxbuff[6]; // 璁剧疆鐢靛帇 + CalibrationVoltage = SetVoltage; + // 鍙傛暟鎺夌數淇濆瓨(鐩存帴璋冪敤鍑芥暟) + Save_Flag = 1; + Parameter_Save(); + } + if ((Rxbuff[3] == 0x05) && (Rxbuff[4] == 0x01)) + { + SetCorroV = Rxbuff[5] * 256 + Rxbuff[6]; // 鑵愯殌鐢靛帇 + // 鍙傛暟鎺夌數淇濆瓨(鐩存帴璋冪敤鍑芥暟) + Save_Flag = 1; + Parameter_Save(); + } + + if ((Rxbuff[3] == 0x0E) && (Rxbuff[4] == 0x01)) + { + OutSet = Rxbuff[5] * 256 + Rxbuff[6]; // 杈撳嚭璁剧疆 + OutGain = (float)OutSet / 10000; + // 鍙傛暟鎺夌數淇濆瓨(鐩存帴璋冪敤鍑芥暟) + Save_Flag = 1; + Parameter_Save(); + } + + if ((Rxbuff[3] == 0x0F) && (Rxbuff[4] == 0x01)) + { + DisSet = Rxbuff[5] * 256 + Rxbuff[6]; // 鏄剧ず璁剧疆 + // 鍙傛暟鎺夌數淇濆瓨(鐩存帴璋冪敤鍑芥暟) + Save_Flag = 1; + Parameter_Save(); + } + if ((Rxbuff[3] == 0x10) && (Rxbuff[4] == 0x01)) + { + CurrentError = (float)(Rxbuff[5] * 256 + Rxbuff[6]) / 100; // 鐢垫祦璇樊 + // 鍙傛暟鎺夌數淇濆瓨(鐩存帴璋冪敤鍑芥暟) + Save_Flag = 1; + Parameter_Save(); + } + if ((Rxbuff[3] == 0x11) && (Rxbuff[4] == 0x01)) + { + AdjVoltage = (float)(Rxbuff[5] * 256 + Rxbuff[6]); // 璋冭妭鐢靛帇 + // 鍙傛暟鎺夌數淇濆瓨(鐩存帴璋冪敤鍑芥暟) + Save_Flag = 1; + Parameter_Save(); + } + if ((Rxbuff[3] == 0x0D) && (Rxbuff[4] == 0x01)) + { + AcqError = (float)(Rxbuff[5] * 256 + Rxbuff[6]) / 10; // 閲囬泦璇樊 + // 鍙傛暟鎺夌數淇濆瓨(鐩存帴璋冪敤鍑芥暟) + Save_Flag = 1; + Parameter_Save(); + } + + if ((Rxbuff[3] == 0x12) && (Rxbuff[4] == 0x01)) + { + Limitvoltage = Rxbuff[5] * 256 + Rxbuff[6]; // 鏂板--鏋侀檺鐢靛帇 + // 鍙傛暟鎺夌數淇濆瓨(鐩存帴璋冪敤鍑芥暟) + Save_Flag = 1; + Parameter_Save(); + } + } + } + Uart1Ready_R = 0; } /*======================================================================== -// 函数: void UartSendData() -// 描述: UART1定时发送数据 -// 参数: 无 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: void UartSendData() +// 鎻忚堪: UART1瀹氭椂鍙戦佹暟鎹 +// 鍙傛暟: 鏃 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ void UartSendData(void) { - //定时发送数据 - if(SendEN) - { - if(!busy) + // 瀹氭椂鍙戦佹暟鎹 + if (SendEN) { - busy = 1; - if(!SendInit) - { - SendBuffer[0] = 0x5A; - SendBuffer[1] = 0xA5; - SendBuffer[2] = 0X2F; //长度 - SendBuffer[3] = 0X82; //命令 - SendBuffer[4] = 0X00; //首地址H - SendBuffer[5] = 0X00; //首地址L - //第一页参数显示 - SendBuffer[6] = RunTime>>8; //运行时间H - SendBuffer[7] = RunTime; //运行时间L - SendBuffer[8] = InVoltage>>8; //输入电压H - SendBuffer[9] = InVoltage; //输入电压L - SendBuffer[10] = OutVoltage>>8; //输出电压H - SendBuffer[11] = OutVoltage; //输出电压L - SendBuffer[12] = OffsetVoltage>>8; //补偿电压H - SendBuffer[13] = OffsetVoltage; //补偿电压L - SendBuffer[14] = SetVoltage>>8; //设置电压H - SendBuffer[15] = SetVoltage; //设置电压L - SendBuffer[16] = SetCorroV>>8; //腐蚀电压H - SendBuffer[17] = SetCorroV; //腐蚀电压L - SendBuffer[18] = AcqVolatage>>8; //采集电压H - SendBuffer[19] = AcqVolatage; //采集电压L - SendBuffer[20] = EXT_Value>>8; //COM电压H - SendBuffer[21] = EXT_Value; //COM电压L + if (!busy) + { + busy = 1; + if (!SendInit) + { + SendBuffer[0] = 0x5A; + SendBuffer[1] = 0xA5; + SendBuffer[2] = 0X2F; // 闀垮害 + SendBuffer[3] = 0X82; // 鍛戒护 + SendBuffer[4] = 0X00; // 棣栧湴鍧H + SendBuffer[5] = 0X00; // 棣栧湴鍧L + // 绗竴椤靛弬鏁版樉绀 + SendBuffer[6] = RunTime >> 8; // 杩愯鏃堕棿H + SendBuffer[7] = RunTime; // 杩愯鏃堕棿L + SendBuffer[8] = InVoltage >> 8; // 杈撳叆鐢靛帇H + SendBuffer[9] = InVoltage; // 杈撳叆鐢靛帇L + SendBuffer[10] = OutVoltage >> 8; // 杈撳嚭鐢靛帇H + SendBuffer[11] = OutVoltage; // 杈撳嚭鐢靛帇L + SendBuffer[12] = OffsetVoltage >> 8; // 琛ュ伩鐢靛帇H + SendBuffer[13] = OffsetVoltage; // 琛ュ伩鐢靛帇L + SendBuffer[14] = SetVoltage >> 8; // 璁剧疆鐢靛帇H + SendBuffer[15] = SetVoltage; // 璁剧疆鐢靛帇L + SendBuffer[16] = SetCorroV >> 8; // 鑵愯殌鐢靛帇H + SendBuffer[17] = SetCorroV; // 鑵愯殌鐢靛帇L + SendBuffer[18] = AcqVolatage >> 8; // 閲囬泦鐢靛帇H + SendBuffer[19] = AcqVolatage; // 閲囬泦鐢靛帇L + SendBuffer[20] = EXT_Value >> 8; // COM鐢靛帇H + SendBuffer[21] = EXT_Value; // COM鐢靛帇L - //第二页参数显示 - SendBuffer[22] = ADC0_Value>>8; //ADC0电压H - SendBuffer[23] = ADC0_Value; //ADC0电压L - SendBuffer[24] = ADC1_Value>>8; //ADC1电压H - SendBuffer[25] = ADC1_Value; //ADC1电压L - SendBuffer[26] = ADC2_Value>>8; //ADC2电压H - SendBuffer[27] = ADC2_Value; //ADC2电压L - SendBuffer[28] = AcqVolatage1>>8; //实时采集误差H - SendBuffer[29] = AcqVolatage1; //实时采集误差L - SendBuffer[30] = SetCorroV >>8; //初始误差H - SendBuffer[31] = SetCorroV; //初始误差L - - SendBuffer[32] = AcqError>>8; //采集误差H(放大10倍显示) - SendBuffer[33] = AcqError; //采集误差L(放大10倍显示) - SendBuffer[34] = OutSet>>8; //输出设置H - SendBuffer[35] = OutSet; //输出设置L - SendBuffer[36] = DisSet>>8; //显示设置H - SendBuffer[37] = DisSet; //显示设置L - SendBuffer[38] = (unsigned int)(CurrentError*100)>>8; //电流误差H - SendBuffer[39] = (unsigned int)(CurrentError*100); //电流误差L - SendBuffer[40] = (unsigned int)AdjVoltage>>8; //调节电压H - SendBuffer[41] = (unsigned int)AdjVoltage; //调节电压L - SendBuffer[42] = Limitvoltage>>8; //新增-极限电压 - SendBuffer[43] = Limitvoltage; //新增-极限电压 - SendBuffer[44] = Shut_Min >>8; //新增-重启时间 - SendBuffer[45] = Shut_Min ; //新增-重启时间 - SendBuffer[46] = OutCurrent>>8; //输出电流H - SendBuffer[47] = OutCurrent; //输出电流L - - SendInit = 1; - SentCnt = 0; - } - SBUF = SendBuffer[SentCnt++]; - if(SentCnt>47) - { - SendEN = 0; - } + // 绗簩椤靛弬鏁版樉绀 + SendBuffer[22] = ADC0_Value >> 8; // ADC0鐢靛帇H + SendBuffer[23] = ADC0_Value; // ADC0鐢靛帇L + SendBuffer[24] = ADC1_Value >> 8; // ADC1鐢靛帇H + SendBuffer[25] = ADC1_Value; // ADC1鐢靛帇L + SendBuffer[26] = ADC2_Value >> 8; // ADC2鐢靛帇H + SendBuffer[27] = ADC2_Value; // ADC2鐢靛帇L + SendBuffer[28] = AcqVolatage1 >> 8; // 瀹炴椂閲囬泦璇樊H + SendBuffer[29] = AcqVolatage1; // 瀹炴椂閲囬泦璇樊L + SendBuffer[30] = SetCorroV >> 8; // 鍒濆璇樊H + SendBuffer[31] = SetCorroV; // 鍒濆璇樊L + + SendBuffer[32] = AcqError >> 8; // 閲囬泦璇樊H(鏀惧ぇ10鍊嶆樉绀) + SendBuffer[33] = AcqError; // 閲囬泦璇樊L(鏀惧ぇ10鍊嶆樉绀) + SendBuffer[34] = OutSet >> 8; // 杈撳嚭璁剧疆H + SendBuffer[35] = OutSet; // 杈撳嚭璁剧疆L + SendBuffer[36] = DisSet >> 8; // 鏄剧ず璁剧疆H + SendBuffer[37] = DisSet; // 鏄剧ず璁剧疆L + SendBuffer[38] = (unsigned int)(CurrentError * 100) >> 8; // 鐢垫祦璇樊H + SendBuffer[39] = (unsigned int)(CurrentError * 100); // 鐢垫祦璇樊L + SendBuffer[40] = (unsigned int)AdjVoltage >> 8; // 璋冭妭鐢靛帇H + SendBuffer[41] = (unsigned int)AdjVoltage; // 璋冭妭鐢靛帇L + SendBuffer[42] = Limitvoltage >> 8; // 鏂板-鏋侀檺鐢靛帇 + SendBuffer[43] = Limitvoltage; // 鏂板-鏋侀檺鐢靛帇 + SendBuffer[44] = Shut_Min >> 8; // 鏂板-閲嶅惎鏃堕棿 + SendBuffer[45] = Shut_Min; // 鏂板-閲嶅惎鏃堕棿 + SendBuffer[46] = OutCurrent >> 8; // 杈撳嚭鐢垫祦H + SendBuffer[47] = OutCurrent; // 杈撳嚭鐢垫祦L + + SendInit = 1; + SentCnt = 0; + } + SBUF = SendBuffer[SentCnt++]; + if (SentCnt > 47) + { + SendEN = 0; + } + } } - } } /*======================================================================== -// 函数: Timer0_Init() -// 描述: Timer0初始化 -// 参数: 无 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: Timer0_Init() +// 鎻忚堪: Timer0鍒濆鍖 +// 鍙傛暟: 鏃 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ void Timer0_Init() { - TMOD|= 0x00; //模式0 - TL0 = 65536-FOSC/12/1000; - TH0 = (65536-FOSC/12/1000)>>8; - TR0 = 1; //启动定时器 - ET0 = 1; //使能定时器中断 + TMOD |= 0x00; // 妯″紡0 + TL0 = 65536 - FOSC / 12 / 1000; + TH0 = (65536 - FOSC / 12 / 1000) >> 8; + TR0 = 1; // 鍚姩瀹氭椂鍣 + ET0 = 1; // 浣胯兘瀹氭椂鍣ㄤ腑鏂 } /*======================================================================== -// 函数: void TM0_Isr() interrupt 1 using 1 -// 描述: Timer0中断函数 -// 参数: 无 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: void TM0_Isr() interrupt 1 using 1 +// 鎻忚堪: Timer0涓柇鍑芥暟 +// 鍙傛暟: 鏃 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ void TM0_Isr() interrupt 1 using 1 { - ADC_Cnt ++; - Cnt ++; - AcqInitCnt ++; - + ADC_Cnt++; + Cnt++; + AcqInitCnt++; - /*** 新增2019-11-14 ***/ - if(PWM_ON_EN) - { - Shut_MS ++; - if(Shut_MS>=1000) + /*** 鏂板2019-11-14 ***/ + if (PWM_ON_EN) { - Shut_MS = 0; - Shut_Sec ++; - if(Shut_Sec>=60) - { + Shut_MS++; + if (Shut_MS >= 1000) + { + Shut_MS = 0; + Shut_Sec++; + if (Shut_Sec >= 60) + { + Shut_Sec = 0; + Shut_Min++; + } + } + } + + if (Shut_Min >= 180) // 澶т簬3灏忔椂锛屾仮澶嶅伐浣 + { + PWM_ON_EN = 0; + Shut_Hour = 0; + Shut_Min = 0; Shut_Sec = 0; - Shut_Min ++; - - } + Shut_MS = 0; } - } - - if(Shut_Min>=180)//大于3小时,恢复工作 - { - PWM_ON_EN = 0; - Shut_Hour = 0; - Shut_Min = 0; - Shut_Sec = 0; - Shut_MS = 0; - } - - if(++UartCnt>=200) - { - UartCnt = 0; - SendEN = 1; - SendInit= 0; - } - //运行时间计时 - if(++Time_Cnt>=1000) //1000ms - { - Time_Cnt = 0; - Time_Sec ++; //1s自动加1 - if(Time_Sec>=60) //60s + if (++UartCnt >= 200) { - Time_Sec = 0; - Time_Min ++; //1min自动加1 - if(Time_Min>=60) //60s - { - Time_Min = 0; - RunTime ++; - - Save_Cnt ++; - if((Save_Cnt>0)&&((Save_Cnt%5)==0)) - { - Save_Flag = 1; //运行参数1个小时保存一次 - Save_Cnt = 0; - } - } + UartCnt = 0; + SendEN = 1; + SendInit = 0; + } + + // 杩愯鏃堕棿璁℃椂 + if (++Time_Cnt >= 1000) // 1000ms + { + Time_Cnt = 0; + Time_Sec++; // 1s鑷姩鍔1 + if (Time_Sec >= 60) // 60s + { + Time_Sec = 0; + Time_Min++; // 1min鑷姩鍔1 + if (Time_Min >= 60) // 60s + { + Time_Min = 0; + RunTime++; + + Save_Cnt++; + if ((Save_Cnt > 0) && ((Save_Cnt % 5) == 0)) + { + Save_Flag = 1; // 杩愯鍙傛暟1涓皬鏃朵繚瀛樹竴娆 + Save_Cnt = 0; + } + } + } } - } } /*======================================================================== -// 函数: PWM_Init() -// 描述: PWM初始化 -// 参数: 无 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: PWM_Init() +// 鎻忚堪: PWM鍒濆鍖 +// 鍙傛暟: 鏃 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ void PWM_Init() { - P_SW2 = 0x80; - PWMCKS = 0x00; //PWM时钟为系统时钟 - PWMC = 8192; //设置PWM周期为8192个PWM时钟 - PWM5T1 = 0; //在计数值为0地方输出低电平 - PWM5T2 = 8192; //在计数值为8192地方输出高电平 - PWM5CR = 0x80; //使能PWM5输出 - P_SW2 = 0x00; + P_SW2 = 0x80; + PWMCKS = 0x00; // PWM鏃堕挓涓虹郴缁熸椂閽 + PWMC = 8192; // 璁剧疆PWM鍛ㄦ湡涓8192涓狿WM鏃堕挓 + PWM5T1 = 0; // 鍦ㄨ鏁板间负0鍦版柟杈撳嚭浣庣數骞 + PWM5T2 = 8192; // 鍦ㄨ鏁板间负8192鍦版柟杈撳嚭楂樼數骞 + PWM5CR = 0x80; // 浣胯兘PWM5杈撳嚭 + P_SW2 = 0x00; - PWMCR = 0x80; //启动PWM模块 + PWMCR = 0x80; // 鍚姩PWM妯″潡 } /*======================================================================== -// 函数: void PWM_TO_DAC(unsigned int PowerVol,unsigned int OutVol) -// 描述: 根据输出源电压不同,输出不同电压。 -// 参数: PowerVol:输出供电电压;OutVol:输出电压。 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2017-12-9 -// 备注: +// 鍑芥暟: void PWM_TO_DAC(unsigned int PowerVol,unsigned int OutVol) +// 鎻忚堪: 鏍规嵁杈撳嚭婧愮數鍘嬩笉鍚岋紝杈撳嚭涓嶅悓鐢靛帇銆 +// 鍙傛暟: PowerVol:杈撳嚭渚涚數鐢靛帇锛汷utVol锛氳緭鍑虹數鍘嬨 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2017-12-9 +// 澶囨敞: //======================================================================== */ -void PWM_TO_DAC(unsigned int PowerVol,unsigned int OutVol) +void PWM_TO_DAC(unsigned int PowerVol, unsigned int OutVol) { - unsigned int PWM_Vlaue; - if(OutVol>5500) - { - OutVol = 5500; - } - - PWM_Vlaue = OutVol*8192UL/PowerVol/3;//单片机口输出电压跟负载电压比例为1:3 - - P_SW2 = 0x80; - PWM5T1 = 0; //在计数值为0地方输出低电平 - PWM5T2 = 8192-PWM_Vlaue; //在计数值为8192地方输出高电平 - P_SW2 = 0x00; + unsigned int PWM_Vlaue; + if (OutVol > 5500) + { + OutVol = 5500; + } + PWM_Vlaue = OutVol * 8192UL / PowerVol / 3; // 鍗曠墖鏈哄彛杈撳嚭鐢靛帇璺熻礋杞界數鍘嬫瘮渚嬩负1:3 + + P_SW2 = 0x80; + PWM5T1 = 0; // 鍦ㄨ鏁板间负0鍦版柟杈撳嚭浣庣數骞 + PWM5T2 = 8192 - PWM_Vlaue; // 鍦ㄨ鏁板间负8192鍦版柟杈撳嚭楂樼數骞 + P_SW2 = 0x00; } /*======================================================================== -// 函数: Parameter_Save() -// 描述: 参数保存 -// 参数: 无 -// 返回: 无 -// 版本: VER1.0 -// 日期: 2019-2-22 -// 备注: +// 鍑芥暟: Parameter_Save() +// 鎻忚堪: 鍙傛暟淇濆瓨 +// 鍙傛暟: 鏃 +// 杩斿洖: 鏃 +// 鐗堟湰: VER1.0 +// 鏃ユ湡: 2019-2-22 +// 澶囨敞: //======================================================================== */ void Parameter_Save(void) { - if(Save_Flag) - { - //参数掉电保存 - EEPROM_SectorErase(IAP_ADDRESS); + if (Save_Flag) + { + // 鍙傛暟鎺夌數淇濆瓨 + EEPROM_SectorErase(IAP_ADDRESS); - TableWrite[0] = RunTime>>8; //运行时间H - TableWrite[1] = RunTime; //运行时间L - TableWrite[2] = SetVoltage>>8; //设置电压H - TableWrite[3] = SetVoltage; //设置电压L - TableWrite[4] = SetCorroV>>8; //腐蚀电压H - TableWrite[5] = SetCorroV; //腐蚀电压L - - TableWrite[6] = OutSet>>8; //输出设置H - TableWrite[7] = OutSet; //输出设置L - TableWrite[8] = DisSet>>8; //显示设置H - TableWrite[9] = DisSet; //显示设置L - TableWrite[10] = (unsigned int)(CurrentError*100)>>8; //电流误差H - TableWrite[11] = (unsigned int)(CurrentError*100); //电流误差L - TableWrite[12] = (unsigned int)AdjVoltage>>8; //调节电压H - TableWrite[13] = (unsigned int)AdjVoltage; //调节电压L - TableWrite[14] = (unsigned int)AcqError>>8; //采集误差H - TableWrite[15] = (unsigned int)AcqError; //采集误差L - - TableWrite[16] = Limitvoltage>>8; //新增-极限电压 - TableWrite[17] = Limitvoltage; //新增-极限电压 - - EEPROM_write_n(IAP_ADDRESS,TableWrite,18); - Save_Flag = 0; - } + TableWrite[0] = RunTime >> 8; // 杩愯鏃堕棿H + TableWrite[1] = RunTime; // 杩愯鏃堕棿L + TableWrite[2] = SetVoltage >> 8; // 璁剧疆鐢靛帇H + TableWrite[3] = SetVoltage; // 璁剧疆鐢靛帇L + TableWrite[4] = SetCorroV >> 8; // 鑵愯殌鐢靛帇H + TableWrite[5] = SetCorroV; // 鑵愯殌鐢靛帇L + + TableWrite[6] = OutSet >> 8; // 杈撳嚭璁剧疆H + TableWrite[7] = OutSet; // 杈撳嚭璁剧疆L + TableWrite[8] = DisSet >> 8; // 鏄剧ず璁剧疆H + TableWrite[9] = DisSet; // 鏄剧ず璁剧疆L + TableWrite[10] = (unsigned int)(CurrentError * 100) >> 8; // 鐢垫祦璇樊H + TableWrite[11] = (unsigned int)(CurrentError * 100); // 鐢垫祦璇樊L + TableWrite[12] = (unsigned int)AdjVoltage >> 8; // 璋冭妭鐢靛帇H + TableWrite[13] = (unsigned int)AdjVoltage; // 璋冭妭鐢靛帇L + TableWrite[14] = (unsigned int)AcqError >> 8; // 閲囬泦璇樊H + TableWrite[15] = (unsigned int)AcqError; // 閲囬泦璇樊L + + TableWrite[16] = Limitvoltage >> 8; // 鏂板-鏋侀檺鐢靛帇 + TableWrite[17] = Limitvoltage; // 鏂板-鏋侀檺鐢靛帇 + + EEPROM_write_n(IAP_ADDRESS, TableWrite, 18); + Save_Flag = 0; + } }