1768 lines
76 KiB
C
1768 lines
76 KiB
C
#include "STC8.H"
|
||
#include <intrins.h>
|
||
|
||
typedef enum
|
||
{
|
||
OUT_INIT = 0,
|
||
OUT_RUNNING,
|
||
OUT_AUTOSTOP,
|
||
OUT_ERR,
|
||
|
||
OUTSTATE_NUM,
|
||
} OUTSTATE_t;
|
||
|
||
/*************** 宏定义 **************/
|
||
#define FOSC 11059200UL // MCU工作频率为11.0592MHz
|
||
#define BRT (65536 - FOSC / 115200 / 4) // 串口通信波特率为115200
|
||
|
||
#define IAP_ADDRESS 0x0000
|
||
|
||
#define LED_ON P16 = 1
|
||
#define LED_OFF P16 = 0
|
||
|
||
#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 IAP_STANDBY() IAP_CMD = 0 /* ISP空闲命令(禁止)*/
|
||
#define IAP_READ() IAP_CMD = 1 /* ISP读出命令 */
|
||
#define IAP_WRITE() IAP_CMD = 2 /* ISP写入命令 */
|
||
#define IAP_ERASE() IAP_CMD = 3 /* ISP擦除命令 */
|
||
|
||
// sfr IAP_TRIG = 0xC6;
|
||
#define IAP_TRIG() IAP_TRIG = 0x5A, IAP_TRIG = 0xA5 /* ISP触发命令 */
|
||
|
||
// 7 6 5 4 3 2 1 0 Reset Value
|
||
// sfr IAP_CONTR = 0xC7; ISPEN SWBS SWRST CFAIL - WT2 WT1 WT0 0000,x000 //ISP Control Register
|
||
#define IAP_EN (1 << 7)
|
||
#define IAP_SWBS (1 << 6)
|
||
#define IAP_SWRST (1 << 5)
|
||
#define IAP_CMD_FAIL (1 << 4)
|
||
#define IAP_WAIT_1MHZ 7
|
||
#define IAP_WAIT_2MHZ 6
|
||
#define IAP_WAIT_3MHZ 5
|
||
#define IAP_WAIT_6MHZ 4
|
||
#define IAP_WAIT_12MHZ 3
|
||
#define IAP_WAIT_20MHZ 2
|
||
#define IAP_WAIT_24MHZ 1
|
||
#define IAP_WAIT_30MHZ 0
|
||
|
||
#if (FOSC >= 24000000L)
|
||
#define IAP_WAIT_FREQUENCY IAP_WAIT_30MHZ
|
||
#elif (FOSC >= 20000000L)
|
||
#define IAP_WAIT_FREQUENCY IAP_WAIT_24MHZ
|
||
#elif (FOSC >= 12000000L)
|
||
#define IAP_WAIT_FREQUENCY IAP_WAIT_20MHZ
|
||
#elif (FOSC >= 6000000L)
|
||
#define IAP_WAIT_FREQUENCY IAP_WAIT_12MHZ
|
||
#elif (FOSC >= 3000000L)
|
||
#define IAP_WAIT_FREQUENCY IAP_WAIT_6MHZ
|
||
#elif (FOSC >= 2000000L)
|
||
#define IAP_WAIT_FREQUENCY IAP_WAIT_3MHZ
|
||
#elif (FOSC >= 1000000L)
|
||
#define IAP_WAIT_FREQUENCY IAP_WAIT_2MHZ
|
||
#else
|
||
#define IAP_WAIT_FREQUENCY IAP_WAIT_1MHZ
|
||
#endif
|
||
|
||
/***************函数声明**************/
|
||
void PWM_Init();
|
||
void PWM_TO_DAC(unsigned int PowerVol, unsigned int OutVol);
|
||
void Timer0_Init();
|
||
void UART1_Init();
|
||
void ADC_Init();
|
||
void UartSendData(void);
|
||
void DataParsing(void);
|
||
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_SectorErase(unsigned int EE_address);
|
||
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);
|
||
|
||
// new
|
||
void OutPutCtrl(void);
|
||
|
||
/***************变量定义**************/
|
||
bit busy = 0;
|
||
bit SendEN = 0;
|
||
bit SendInit = 0;
|
||
bit Rx_Busy = 0;
|
||
|
||
bit PWM_ON = 0;
|
||
|
||
bit Uart1Ready_R = 0;
|
||
bit AcqInitFlag = 0;
|
||
bit AD_Refresh = 0;
|
||
bit Save_Flag = 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_Cnt = 0;
|
||
|
||
unsigned char xdata SendBuffer[50];
|
||
|
||
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 TwinkleCnt = 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 ADC_EXT_Temp[120];
|
||
|
||
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 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 OutSet = 0; // 输出设置
|
||
unsigned int xdata DisSet = 0; // 显示设置
|
||
|
||
unsigned int xdata OutTemp;
|
||
|
||
unsigned int xdata CalibrationVoltage = 0; // 设定的输出电压
|
||
|
||
unsigned int xdata InitAcqVolatage = 0; // 初始采集电压
|
||
unsigned int xdata InitAcqCurrent = 0; // 初始采集电流
|
||
|
||
unsigned int xdata AcqVolatage1 = 0; // 采集电压1
|
||
|
||
unsigned int xdata Limitvoltage = 0; // 极限电压
|
||
|
||
unsigned int xdata Temp01 = 0; // 辅助运算
|
||
unsigned int xdata Temp02 = 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;
|
||
|
||
int OffsetVoltage = 0; // 补偿电压
|
||
|
||
float xdata IA; // 实际输出电流
|
||
float xdata CurrentError = 0;
|
||
float xdata AdjVoltage = 0; // 调节电压
|
||
float xdata CompensationValue = 0; // 补偿系数
|
||
float xdata OutGain = 0; // 输出增益调节
|
||
|
||
// new
|
||
OUTSTATE_t xdata OutPutState;
|
||
unsigned int xdata InitTimeCnt;
|
||
unsigned int xdata TimeBaseCnt, TimeBaseCntLast;
|
||
bit ledState;
|
||
unsigned int xdata TargetCurrent;
|
||
unsigned int xdata OutputVol;
|
||
/*************** 主函数 **************/
|
||
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读取数据
|
||
if (TableRead[0] == 0x55 && TableRead[1] == 0xaa)
|
||
{
|
||
TargetCurrent = (TableRead[2] << 8) + TableRead[3];
|
||
}
|
||
else
|
||
{
|
||
TargetCurrent = 1000; // 10mA
|
||
Save_Flag = 1;
|
||
}
|
||
|
||
// 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,进行参数初始化处理
|
||
|
||
RunTime = 0;
|
||
SetVoltage = 2000;
|
||
SetCorroV = 920;
|
||
Limitvoltage = 1600;
|
||
AdjVoltage = 3;
|
||
CurrentError = 1000;
|
||
AcqError = 100;
|
||
OutSet = 10000;
|
||
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;
|
||
InitTimeCnt = 0;
|
||
TimeBaseCnt = 0;
|
||
TimeBaseCntLast = 0;
|
||
OutPutState = OUT_INIT;
|
||
|
||
while (1)
|
||
{
|
||
if (TimeBaseCnt > TimeBaseCntLast)
|
||
{
|
||
TimeBaseCntLast++;
|
||
DataParsing(); // 串口数据解析
|
||
UartSendData(); // 串口定时发送数据
|
||
Read_ADC(); // AD采集数据处理
|
||
Parameter_Save();
|
||
|
||
if (TimeBaseCntLast % 10 == 0)
|
||
{
|
||
OutPutCtrl();
|
||
}
|
||
if (TimeBaseCntLast % 1000 == 0)
|
||
{
|
||
ledState = !ledState;
|
||
P16 = ledState;
|
||
}
|
||
if (TimeBaseCnt >= 10000)
|
||
{
|
||
TimeBaseCnt = 0;
|
||
TimeBaseCntLast = 0;
|
||
}
|
||
}
|
||
|
||
if (AcqInitFlag == 0) // 上电采集初始电压
|
||
{
|
||
if (AcqInitCnt > 1000) // 上电3秒内采集初始电压,时间可修改
|
||
{
|
||
InitAcqVolatage = AcqVolatage; // 获取初始电压
|
||
InitAcqCurrent = (unsigned int)IA; // 获取初始电流
|
||
|
||
AcqInitFlag = 1;
|
||
AcqInitCnt = 0;
|
||
}
|
||
}
|
||
|
||
// AutoAction(); // 运行自动程序
|
||
}
|
||
}
|
||
|
||
void OutPutCtrl(void)
|
||
{
|
||
OutCurrent = (unsigned int)(IA * 100); // 放大10倍后的电流(触摸屏显示用)
|
||
switch (OutPutState)
|
||
{
|
||
case OUT_INIT:
|
||
PWM_TO_DAC(5000, 1000);
|
||
InitTimeCnt++;
|
||
if (InitTimeCnt > 100)
|
||
{
|
||
InitTimeCnt = 0;
|
||
OutPutState = OUT_RUNNING;
|
||
OutputVol = 1000;
|
||
}
|
||
|
||
break;
|
||
case OUT_RUNNING:
|
||
if (OutCurrent > TargetCurrent + 20)
|
||
{
|
||
if (OutputVol > 100)
|
||
{
|
||
OutputVol--;
|
||
}
|
||
}
|
||
else if (OutCurrent < TargetCurrent - 20)
|
||
{
|
||
if (OutputVol < 5000)
|
||
{
|
||
OutputVol++;
|
||
}
|
||
}
|
||
PWM_TO_DAC(5000, OutputVol);
|
||
break;
|
||
case OUT_AUTOSTOP:
|
||
break;
|
||
case OUT_ERR:
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
void turnOFFOutput(void)
|
||
{
|
||
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;
|
||
}
|
||
|
||
void AutoAction(void)
|
||
{
|
||
if (PWM_ON_EN == 0) // PWM输出使能
|
||
{
|
||
if (AcqVolatage >= Limitvoltage) // 采集电压大于1500mV,或电流小于0.5mA,关闭输出
|
||
{
|
||
turnOFFOutput();
|
||
}
|
||
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 < 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;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
OutCurrent = (unsigned int)(IA * 100); // 放大10倍后的电流(触摸屏显示用)
|
||
}
|
||
void Delay10ms() //@11.0592MHz
|
||
{
|
||
unsigned char i, j;
|
||
|
||
_nop_();
|
||
_nop_();
|
||
i = 144;
|
||
j = 157;
|
||
do
|
||
{
|
||
while (--j)
|
||
;
|
||
} while (--i);
|
||
}
|
||
/*========================================================================
|
||
// 函数: DisableEEPROM(void)
|
||
// 描述: 禁止访问ISP/IAP.
|
||
// 参数: non.
|
||
// 返回: non.
|
||
// 版本: V1.0
|
||
//========================================================================
|
||
*/
|
||
void DisableEEPROM(void)
|
||
{
|
||
IAP_CONTR = 0; // 关闭ISP功能
|
||
IAP_CMD = 0; // 清除命令寄存器
|
||
IAP_TRIG = 0; // 清除触发寄存器
|
||
IAP_ADDRH = 0x80; // 将地址设置到非ISP区域
|
||
IAP_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)
|
||
{
|
||
// EA = 0; //禁止中断
|
||
IAP_CONTR = (IAP_EN + IAP_WAIT_FREQUENCY); // 设置等待时间,允许ISP/ISP操作,送一次就够
|
||
IAP_READ(); // 送字节读命令,命令不需改变时,不需重新送命令
|
||
do
|
||
{
|
||
IAP_ADDRH = EE_address / 256; // 送地址高字节(地址需要改变时才需重新送地址)
|
||
IAP_ADDRL = EE_address % 256; // 送地址低字节
|
||
IAP_TRIG(); // 先送5AH,再送A5H到ISP/ISP触发寄存器,每次都需要如此
|
||
// 送完A5H后,ISP/ISP命令立即被触发启动
|
||
// CPU等待ISP完成后,才会继续执行程序。
|
||
_nop_();
|
||
*DataAddress = IAP_DATA; // 读出的数据送往
|
||
EE_address++;
|
||
DataAddress++;
|
||
} while (--number);
|
||
|
||
DisableEEPROM();
|
||
// EA = 1; //重新允许中断
|
||
}
|
||
|
||
/******************** 扇区擦除函数 *****************/
|
||
/*========================================================================
|
||
// 函数: void EEPROM_SectorErase(unsigned int EE_address)
|
||
// 描述: 把指定地址的EEPROM扇区擦除.
|
||
// 参数: EE_address: 要擦除的扇区EEPROM的地址.
|
||
// 返回: non.
|
||
// 版本: V1.0
|
||
//========================================================================
|
||
*/
|
||
void EEPROM_SectorErase(unsigned int EE_address)
|
||
{
|
||
// EA = 0; //禁止中断
|
||
// 只有扇区擦除,没有字节擦除,512字节/扇区。
|
||
// 扇区中任意一个字节地址都是扇区地址。
|
||
IAP_ADDRH = EE_address / 256; // 送扇区地址高字节(地址需要改变时才需重新送地址)
|
||
IAP_ADDRL = EE_address % 256; // 送扇区地址低字节
|
||
IAP_CONTR = (IAP_EN + IAP_WAIT_FREQUENCY); // 设置等待时间,允许ISP/ISP操作,送一次就够
|
||
IAP_ERASE(); // 送扇区擦除命令,命令不需改变时,不需重新送命令
|
||
IAP_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)
|
||
{
|
||
// EA = 0; //禁止中断
|
||
|
||
IAP_CONTR = (IAP_EN + IAP_WAIT_FREQUENCY); // 设置等待时间,允许ISP/ISP操作,送一次就够
|
||
IAP_WRITE(); // 送字节写命令,命令不需改变时,不需重新送命令
|
||
do
|
||
{
|
||
IAP_ADDRH = EE_address / 256; // 送地址高字节(地址需要改变时才需重新送地址)
|
||
IAP_ADDRL = EE_address % 256; // 送地址低字节
|
||
IAP_DATA = *DataAddress; // 送数据到IAP_DATA,只有数据改变时才需重新送
|
||
IAP_TRIG();
|
||
_nop_();
|
||
EE_address++;
|
||
DataAddress++;
|
||
} while (--number);
|
||
|
||
DisableEEPROM();
|
||
// EA = 1; //重新允许中断
|
||
}
|
||
|
||
/*========================================================================
|
||
// 函数: ADC_Init()
|
||
// 描述: ADC_Init初始化
|
||
// 参数: 无
|
||
// 返回: 无
|
||
// 版本: VER1.0
|
||
// 日期: 2017-12-9
|
||
// 备注:
|
||
//========================================================================
|
||
*/
|
||
void ADC_Init()
|
||
{
|
||
P1M0 = 0x40; // 设置P1.4、P1.5、P1.6、P1.7为ADC口
|
||
P1M1 = 0xA0;
|
||
|
||
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) // channel = 0~14
|
||
{
|
||
ADC_RES = 0;
|
||
ADC_RESL = 0;
|
||
|
||
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);
|
||
}
|
||
/*========================================================================
|
||
// 函数: 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(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 < num; j += 8)
|
||
{
|
||
temp = 0;
|
||
for (i = 0; i < 8; i++)
|
||
{
|
||
temp += buff[j + i];
|
||
}
|
||
ADR[j / 8] = temp / 2;
|
||
}
|
||
|
||
for (i = 0; i < 15; i++)
|
||
{
|
||
for (j = 0; j < 15 - 1; j++)
|
||
{
|
||
if (ADR[j] < ADR[j + 1])
|
||
{
|
||
temp = ADR[j];
|
||
ADR[j] = ADR[j + 1];
|
||
ADR[j + 1] = temp;
|
||
}
|
||
}
|
||
}
|
||
for (i = threshold; i < (15 - threshold); i++)
|
||
{
|
||
sigma = sigma + ADR[i];
|
||
}
|
||
temp = sigma / (15 - threshold * 2);
|
||
return (temp);
|
||
}
|
||
/*========================================================================
|
||
// 函数: void Read_ADC()
|
||
// 描述: 定时读取ADC的值,多次处理后取平均值.
|
||
// 参数: 无.
|
||
// 返回: 12位ADC结果.
|
||
// 版本: VER1.0
|
||
// 日期: 2017-12-9
|
||
// 备注:
|
||
//========================================================================
|
||
*/
|
||
void Read_ADC()
|
||
{
|
||
if (ADC_Cnt >= 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)
|
||
{
|
||
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; // 采集电压
|
||
|
||
// IA = ((float)ADC2_Value * 2498UL / DisSet / 10.08) / 2.0 - CurrentError; // 实际输出电流,根据实际情况修改
|
||
IA = ((float)ADC2_Value * 2498UL / DisSet / 10.00) / 2.0;
|
||
AD_Refresh = 1;
|
||
}
|
||
}
|
||
}
|
||
/*========================================================================
|
||
// 函数: 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
|
||
}
|
||
/*========================================================================
|
||
// 函数: 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;
|
||
|
||
aRxBufferTemp = SBUF;
|
||
|
||
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(void)
|
||
{
|
||
if (Uart1Ready_R == 1) // 数据接收完成,处理接收到的数据
|
||
{
|
||
// 按键返回
|
||
if (Rxbuff[0] == 0x02)
|
||
{
|
||
// 参数复位
|
||
TargetCurrent = Rxbuff[1] << 8 + Rxbuff[2];
|
||
// 参数掉电保存(直接调用函数)
|
||
Save_Flag = 1;
|
||
// Parameter_Save();
|
||
}
|
||
}
|
||
Uart1Ready_R = 0;
|
||
}
|
||
/*========================================================================
|
||
// 函数: void UartSendData()
|
||
// 描述: UART1定时发送数据
|
||
// 参数: 无
|
||
// 返回: 无
|
||
// 版本: VER1.0
|
||
// 日期: 2017-12-9
|
||
// 备注:
|
||
//========================================================================
|
||
*/
|
||
void UartSendData(void)
|
||
{
|
||
// 定时发送数据
|
||
if (SendEN)
|
||
{
|
||
if (!busy)
|
||
{
|
||
busy = 1;
|
||
if (!SendInit)
|
||
{
|
||
SendBuffer[0] = 0x55;
|
||
SendBuffer[1] = 0xAA;
|
||
|
||
SendBuffer[2] = RunTime >> 8; // 运行时间H
|
||
SendBuffer[3] = RunTime; // 运行时间L
|
||
SendBuffer[4] = InVoltage >> 8; // 输入电压H
|
||
SendBuffer[5] = InVoltage; // 输入电压L
|
||
SendBuffer[6] = OutVoltage >> 8; // 输出电压H
|
||
SendBuffer[7] = OutVoltage; // 输出电压L
|
||
SendBuffer[8] = OutCurrent >> 8; // 输出电流H
|
||
SendBuffer[9] = OutCurrent;
|
||
|
||
SendBuffer[10] = TargetCurrent >> 8;
|
||
SendBuffer[11] = TargetCurrent;
|
||
SendBuffer[12] = 0X5A;
|
||
/*
|
||
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; // 新增-重启时间
|
||
*/
|
||
SendInit = 1;
|
||
SentCnt = 0;
|
||
}
|
||
SBUF = SendBuffer[SentCnt++];
|
||
if (SentCnt > 12)
|
||
{
|
||
SendEN = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/*========================================================================
|
||
// 函数: 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; // 使能定时器中断
|
||
}
|
||
/*========================================================================
|
||
// 函数: void TM0_Isr() interrupt 1 using 1
|
||
// 描述: Timer0中断函数
|
||
// 参数: 无
|
||
// 返回: 无
|
||
// 版本: VER1.0
|
||
// 日期: 2017-12-9
|
||
// 备注:
|
||
//========================================================================
|
||
*/
|
||
void TM0_Isr() interrupt 1 using 1
|
||
{
|
||
ADC_Cnt++;
|
||
Cnt++;
|
||
AcqInitCnt++;
|
||
TimeBaseCnt++;
|
||
/*** 新增2019-11-14 ***/
|
||
if (PWM_ON_EN)
|
||
{
|
||
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_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
|
||
{
|
||
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
|
||
// 备注:
|
||
//========================================================================
|
||
*/
|
||
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;
|
||
|
||
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)
|
||
{
|
||
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
|
||
// 备注:
|
||
//========================================================================
|
||
*/
|
||
void Parameter_Save(void)
|
||
{
|
||
if (Save_Flag)
|
||
{
|
||
// 参数掉电保存
|
||
EEPROM_SectorErase(IAP_ADDRESS);
|
||
TableWrite[0] = 0x55;
|
||
TableWrite[1] = 0xAA;
|
||
|
||
TableWrite[2] = TargetCurrent >> 8; // 运行时间H
|
||
TableWrite[3] = TargetCurrent & 0XFF; // 运行时间L
|
||
|
||
EEPROM_write_n(IAP_ADDRESS, TableWrite, 4);
|
||
Save_Flag = 0;
|
||
}
|
||
}
|