From 1b4971d3f3f775ea1fe0ff7fb0708bdcfa12e7db Mon Sep 17 00:00:00 2001 From: sunbeam0529 Date: Fri, 4 Jul 2025 17:08:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E6=B5=81=E8=87=AA=E5=8A=A8=E8=B0=83?= =?UTF-8?q?=E8=8A=82OK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_code/main.c | 409 ++++++++++++++++++++---------------------------- 1 file changed, 168 insertions(+), 241 deletions(-) diff --git a/app_code/main.c b/app_code/main.c index b68d3c4..ecddb06 100644 --- a/app_code/main.c +++ b/app_code/main.c @@ -1,17 +1,15 @@ #include "STC8.H" #include - - typedef enum { - OUT_INIT=0, + OUT_INIT = 0, OUT_RUNNING, OUT_AUTOSTOP, OUT_ERR, OUTSTATE_NUM, -}OUTSTATE_t; +} OUTSTATE_t; /*************** 宏定义 **************/ #define FOSC 11059200UL // MCU工作频率为11.0592MHz @@ -19,7 +17,8 @@ typedef enum #define IAP_ADDRESS 0x0000 -#define LED_OFF P00 = 1 +#define LED_ON P16 = 1 +#define LED_OFF P16 = 0 #define WT_30M 0x80 #define WT_24M 0x81 @@ -30,45 +29,45 @@ typedef enum #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 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 ISP_TRIG = 0xC6; -#define ISP_TRIG() ISP_TRIG = 0x5A, ISP_TRIG = 0xA5 /* 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 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 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 ISP_WAIT_FREQUENCY ISP_WAIT_30MHZ +#define IAP_WAIT_FREQUENCY IAP_WAIT_30MHZ #elif (FOSC >= 20000000L) -#define ISP_WAIT_FREQUENCY ISP_WAIT_24MHZ +#define IAP_WAIT_FREQUENCY IAP_WAIT_24MHZ #elif (FOSC >= 12000000L) -#define ISP_WAIT_FREQUENCY ISP_WAIT_20MHZ +#define IAP_WAIT_FREQUENCY IAP_WAIT_20MHZ #elif (FOSC >= 6000000L) -#define ISP_WAIT_FREQUENCY ISP_WAIT_12MHZ +#define IAP_WAIT_FREQUENCY IAP_WAIT_12MHZ #elif (FOSC >= 3000000L) -#define ISP_WAIT_FREQUENCY ISP_WAIT_6MHZ +#define IAP_WAIT_FREQUENCY IAP_WAIT_6MHZ #elif (FOSC >= 2000000L) -#define ISP_WAIT_FREQUENCY ISP_WAIT_3MHZ +#define IAP_WAIT_FREQUENCY IAP_WAIT_3MHZ #elif (FOSC >= 1000000L) -#define ISP_WAIT_FREQUENCY ISP_WAIT_2MHZ +#define IAP_WAIT_FREQUENCY IAP_WAIT_2MHZ #else -#define ISP_WAIT_FREQUENCY ISP_WAIT_1MHZ +#define IAP_WAIT_FREQUENCY IAP_WAIT_1MHZ #endif /***************函数声明**************/ @@ -91,7 +90,7 @@ 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 +// new void OutPutCtrl(void); /***************变量定义**************/ @@ -176,7 +175,6 @@ unsigned char xdata Shut_Min = 0; unsigned char xdata Shut_Sec = 0; unsigned int xdata Shut_MS = 0; - int OffsetVoltage = 0; // 补偿电压 float xdata IA; // 实际输出电流 @@ -185,9 +183,13 @@ float xdata AdjVoltage = 0; // 调节电压 float xdata CompensationValue = 0; // 补偿系数 float xdata OutGain = 0; // 输出增益调节 -//new +// 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() { @@ -209,54 +211,37 @@ void main() 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数据--腐蚀电压 + // 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; - } + // 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; @@ -265,12 +250,36 @@ void main() AcqInitCnt = 0; InitTimeCnt = 0; + TimeBaseCnt = 0; + TimeBaseCntLast = 0; + OutPutState = OUT_INIT; + while (1) { - DataParsing(); // 串口数据解析 - UartSendData(); // 串口定时发送数据 - Read_ADC(); // AD采集数据处理 - Parameter_Save(); + 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秒内采集初始电压,时间可修改 @@ -283,26 +292,42 @@ void main() } } - //AutoAction(); // 运行自动程序 - OutPutCtrl(); + // AutoAction(); // 运行自动程序 } } void OutPutCtrl(void) { + OutCurrent = (unsigned int)(IA * 100); // 放大10倍后的电流(触摸屏显示用) switch (OutPutState) { case OUT_INIT: - PWM_TO_DAC(5000,2000); + PWM_TO_DAC(5000, 1000); InitTimeCnt++; - if (InitTimeCnt > 1000) + 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; @@ -1146,11 +1171,11 @@ void Delay10ms() //@11.0592MHz */ void DisableEEPROM(void) { - ISP_CONTR = 0; // 关闭ISP功能 - ISP_CMD = 0; // 清除命令寄存器 - ISP_TRIG = 0; // 清除触发寄存器 - ISP_ADDRH = 0x80; // 将地址设置到非ISP区域 - ISP_ADDRL = 0x00; + 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) @@ -1165,17 +1190,17 @@ void DisableEEPROM(void) 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(); // 送字节读命令,命令不需改变时,不需重新送命令 + IAP_CONTR = (IAP_EN + IAP_WAIT_FREQUENCY); // 设置等待时间,允许ISP/ISP操作,送一次就够 + IAP_READ(); // 送字节读命令,命令不需改变时,不需重新送命令 do { - ISP_ADDRH = EE_address / 256; // 送地址高字节(地址需要改变时才需重新送地址) - ISP_ADDRL = EE_address % 256; // 送地址低字节 - ISP_TRIG(); // 先送5AH,再送A5H到ISP/ISP触发寄存器,每次都需要如此 + IAP_ADDRH = EE_address / 256; // 送地址高字节(地址需要改变时才需重新送地址) + IAP_ADDRL = EE_address % 256; // 送地址低字节 + IAP_TRIG(); // 先送5AH,再送A5H到ISP/ISP触发寄存器,每次都需要如此 // 送完A5H后,ISP/ISP命令立即被触发启动 // CPU等待ISP完成后,才会继续执行程序。 _nop_(); - *DataAddress = ISP_DATA; // 读出的数据送往 + *DataAddress = IAP_DATA; // 读出的数据送往 EE_address++; DataAddress++; } while (--number); @@ -1198,11 +1223,11 @@ 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(); + 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; //重新允许中断 @@ -1221,14 +1246,14 @@ void EEPROM_write_n(unsigned int EE_address, unsigned char *DataAddress, unsigne { // EA = 0; //禁止中断 - ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY); // 设置等待时间,允许ISP/ISP操作,送一次就够 - ISP_WRITE(); // 送字节写命令,命令不需改变时,不需重新送命令 + IAP_CONTR = (IAP_EN + IAP_WAIT_FREQUENCY); // 设置等待时间,允许ISP/ISP操作,送一次就够 + IAP_WRITE(); // 送字节写命令,命令不需改变时,不需重新送命令 do { - ISP_ADDRH = EE_address / 256; // 送地址高字节(地址需要改变时才需重新送地址) - ISP_ADDRL = EE_address % 256; // 送地址低字节 - ISP_DATA = *DataAddress; // 送数据到ISP_DATA,只有数据改变时才需重新送 - ISP_TRIG(); + IAP_ADDRH = EE_address / 256; // 送地址高字节(地址需要改变时才需重新送地址) + IAP_ADDRL = EE_address % 256; // 送地址低字节 + IAP_DATA = *DataAddress; // 送数据到IAP_DATA,只有数据改变时才需重新送 + IAP_TRIG(); _nop_(); EE_address++; DataAddress++; @@ -1250,8 +1275,8 @@ void EEPROM_write_n(unsigned int EE_address, unsigned char *DataAddress, unsigne */ void ADC_Init() { - P1M0 = 0x00; // 设置P1.4、P1.5、P1.6、P1.7为ADC口 - P1M1 = 0xF0; + P1M0 = 0x40; // 设置P1.4、P1.5、P1.6、P1.7为ADC口 + P1M1 = 0xA0; ADCCFG |= 0x2F; // 设置ADC时钟为系统时钟/2/16/Speed,设置结果右对齐 ADC_CONTR = 0x80; // 使能ADC模块 @@ -1370,8 +1395,8 @@ void Read_ADC() 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.08) / 2.0 - CurrentError; // 实际输出电流,根据实际情况修改 + IA = ((float)ADC2_Value * 2498UL / DisSet / 10.00) / 2.0; AD_Refresh = 1; } } @@ -1420,14 +1445,9 @@ void UartIsr() interrupt 4 using 1 if (RI) { RI = 0; - // Rx_Busy = 1; aRxBufferTemp = SBUF; - // //上位机有数据发送,停止轮发 - // SendEN = 0; - // UartCnt= 0; - if (RX_5A_OK) { if (RX_A5_OK) @@ -1486,91 +1506,13 @@ 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)) + if (Rxbuff[0] == 0x02) { // 参数复位 - 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; // 极限电压 - + TargetCurrent = Rxbuff[1] << 8 + Rxbuff[2]; // 参数掉电保存(直接调用函数) 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(); - } + // Parameter_Save(); } } Uart1Ready_R = 0; @@ -1595,19 +1537,22 @@ void UartSendData(void) 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[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 @@ -1645,14 +1590,12 @@ void UartSendData(void) 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) + if (SentCnt > 12) { SendEN = 0; } @@ -1692,7 +1635,7 @@ void TM0_Isr() interrupt 1 using 1 ADC_Cnt++; Cnt++; AcqInitCnt++; - + TimeBaseCnt++; /*** 新增2019-11-14 ***/ if (PWM_ON_EN) { @@ -1812,29 +1755,13 @@ void Parameter_Save(void) { // 参数掉电保存 EEPROM_SectorErase(IAP_ADDRESS); + TableWrite[0] = 0x55; + TableWrite[1] = 0xAA; - 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[2] = TargetCurrent >> 8; // 运行时间H + TableWrite[3] = TargetCurrent & 0XFF; // 运行时间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); + EEPROM_write_n(IAP_ADDRESS, TableWrite, 4); Save_Flag = 0; } }