📄 taskmain.c
字号:
#define DATA
#include"include.h"
/*********************************************************************************************************
** 函数名称: uint8 ReadKey(void)
** 功能描述: 读取本机地址
** 输 入: 无
** 输 出: 无
** 全局变量:
** 调用模块:
**
** 作 者: 李伟
** 日 期: 2008年12月09日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 ReadKey(void)
{
uint8 KEY;
KEY = 0;
if(KEY0 == 1)KEY = KEY + 1;
if(KEY1 == 1)KEY = KEY + 2;
if(KEY2 == 1)KEY = KEY + 4;
if(KEY3 == 1)KEY = KEY + 8;
return KEY;
}
/*********************************************************************************************************
** 函数名称: void Voltage_Collect(void)
** 功能描述: 各模拟量采集
** 输 入: 无
** 输 出: 无
** 全局变量:
** 调用模块:
**
** 作 者: 李伟
** 日 期: 2008年12月09日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Voltage_Collect(void)
{
uint8 channel;
uint16 adcT;
ChargeCurrent = Adc_Collect(NEG_CURRENT); //充电电流为负
DisChargeCurrent = Adc_Collect(ACT_CURRENT); //放电电流为正
for(channel = 0;channel < 15;channel++)
{
A11 = 1;
A12 = 1;
delaynms(20);
SetChannel(channel);
if(channel == 0)delaynms(100);
else delaynms(50);
CellVoltage[channel] = Adc_Collect(CELL_VOLTAGE);
if(channel <= 7)
{
adcT = Adc_Collect(CELL_TEMPERATURE);
if(channel == 2)Temperature[0] = TemperatureLine(adcT);
if(channel == 1)Temperature[1] = TemperatureLine(adcT);
if(channel == 0)Temperature[2] = TemperatureLine(adcT);
if(channel == 3)Temperature[3] = TemperatureLine(adcT);
if(channel == 4)Temperature[4] = TemperatureLine(adcT);
if(channel == 6)Temperature[5] = TemperatureLine(adcT);
if(channel == 7)Temperature[6] = TemperatureLine(adcT);
if(channel == 5)Temperature[7] = TemperatureLine(adcT);
}
else if(channel == 8)
{
adcT = Adc_Collect(OUTS_TEMPERATURE);
Temperature[channel] = TemperatureLine(adcT);
}
}
//RunLed = ~RunLed;
}
/**
********************************************************************************************************
** 名 称: void SystermInitiate(void)
** 功 能:
** 作 者: 李 伟
** 日 期: 2008年12月09日
**------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************
**/
void SystermInitiate(void)
{
uint8 i;
uint16 address;
if(EepReadByte(0x2E00) != 119)//第四扇区
{
EepSectotErase(0x2E00); //擦除第四扇区
EepWriteByte(119,0x2E00); //写入119定值
CUK = 10000; //单体电池电压采集系数
CTK = 10000; //单体电池温度采集系数
OTK = 10000; //环境温度系数
P1M0 &= 0xFD; //将RS485通讯使能端设为推挽模式
P1M1 |= 0x02;
ModeSysConfig[0] = 2600; //CellVlow 单体电压下限2600mV
ModeSysConfig[1] = 4200; //CellVhigh 单体电压上限4200mV
ModeSysConfig[2] = 56000; //PackOV 电池组充电过压限值56.0V
ModeSysConfig[3] = 40500; //PackUV 电池组放电欠压限值40.5V
ModeSysConfig[4] = 2000; //ChargeOC 充电电流限值 2A
ModeSysConfig[5] = 10000; //DisChargeOC 放电电流限值10A
ModeSysConfig[6] = 3000; //ReCellVlow 单体电池电压恢复下限 3000mV
ModeSysConfig[7] = 4000; //ReCellVhigh 单体电池电压恢复上限 4000mV
ModeSysConfig[8] = ReadKey(); //BoardAddress读取本机地址
ModeTempCofing[0] = 5; //ChargeTlow 充电温度下限 5 摄氏度
ModeTempCofing[1] = 45; //ChargeThigh 充电温度上限 45 摄氏度
ModeTempCofing[2] = -10; //DisChargeTlow 放电温度下限-10 摄氏度(光宇标准)
ModeTempCofing[3] = 55; //DisChargeThigh 放电温度上限 55 摄氏度(光宇标准)
ModeTempCofing[4] = 55; //EnvironmentOT 环境温度告警值与放电温度告警值相同
ModeTempCofing[5] = -10; //EnvironmentUT
ModeTempCofing[6] = 53; //ReEnvironmentOT环境温度告警恢复限值与放电温度告警恢复限值相同
ModeTempCofing[7] = -8; //ReEnvironmentUT
ModeTempCofing[8] = 7; //ReChargeTlow 充电低温恢复限值 7 摄氏度
ModeTempCofing[9] = 43; //ReChargeThigh 充电高温恢复限值 43 摄氏度
ModeTempCofing[10] = -8; //ReDisChargeTlow 放电低温恢复限值 -8 摄氏度
ModeTempCofing[11] = 53; //ReDisChargeThigh放电高温恢复限值 53 摄氏度
address = 0x2800;
EepSectotErase(address); //擦除第一扇区写入默认值
for(i = 0;i < 9;i++)
{
EepWriteWord(ModeSysConfig[i],address);
address++;
address++;
}
address = 0x2A00;
EepSectotErase(address); //擦除第二扇区写入默认值
for(i = 0;i < 12;i++)
{
EepWriteByte(ModeTempCofing[i],address);
address++;
}
EepSectotErase(0x2C00); //擦除第三扇区写入默认值
EepWriteWord(CUK,0x2C00); //单体电池电压采集系数
EepWriteWord(CTK,0x2C02); //单体电池温度采集系数
EepWriteWord(OTK,0x2C04); //环境温度系数
AlarmInitiate (); //初始化告警
Initiate_RS485(); //初始化485
Initiate_RS232(); //初始化232
soft_receive_enable(); // 模拟串口允许接收
COMEN = CommRxden; //RS485通讯允许接收
ChargeEn = ChargeEnable; //使能充电
DisChargeEn = DisChargeEnable; //使能放电
}
else if(EepReadByte(0x2E00) == 119)
{
P1M0 &= 0xFD; //将RS485通讯使能端设为推挽模式
P1M1 |= 0x02;
CUK = EepReadWord(0x2C00); //单体电池电压采集系数
CTK = EepReadWord(0x2C02); //单体电池温度采集系数
OTK = EepReadWord(0x2C04); //环境温度系数
address = 0x2800;
for(i = 0;i < 8;i++)
{
ModeSysConfig[i] = EepReadWord(address);
address++;
address++;
}
ModeSysConfig[8] = ReadKey(); //BoardAddress读取本机地址
address = 0x2A00;
for(i = 0;i < 12;i++)
{
ModeTempCofing[i] = EepReadByte(address);
address++;
}
AlarmInitiate (); //初始化告警
Initiate_RS485(); //初始化485
Initiate_RS232(); //初始化232
soft_receive_enable(); // 模拟串口允许接收
COMEN = CommRxden; //RS485通讯允许接收
ChargeEn = ChargeEnable; //使能充电
DisChargeEn = DisChargeEnable; //使能放电 }
}
/**
********************************************************************************************************
** 名 称: void Main (void)
** 功 能:
** 作 者: 李 伟
** 日 期: 2008年12月09日
**------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************
**/
void main(void)
{
SystermInitiate();
while(1)
{
Voltage_Collect(); //采信各模拟量
//WorkMode = WorkModeJudge(); //判断工作模式
ModeSysConfig[8] = ReadKey(); //BoardAddress
WorkMode = DisChargeStep;
if(WorkMode == ChargeStep) //充电管理
{
RunLed = 0; //充电时指示灯一直亮起,
SignalCellT(Temperature, 9,ChargeStep); //单只电池温度告警查询
SignalCellV(CellVoltage,15,ChargeStep); //单只电池温度告警查询
ChargeAndDisChargeEnable (ChargeStep); //放电使能查询
}
if(WorkMode == DisChargeStep) //放电管理
{
RunLed = ~RunLed; //放电时指示灯闪烁/秒
SignalCellT(Temperature, 9,DisChargeStep); //单只电池温度告警查询
SignalCellV(CellVoltage,15,DisChargeStep); //单只电池电压告警查询
ChargeAndDisChargeEnable (DisChargeStep); //放电使能查询
}
if(Rs232Massageflag == 1) //模拟串口通讯标志
{
Rs232Massageflag = 0;
soft_send_enable();
Rs232CommManage ();
soft_receive_enable();
}
if(Massageflag == 1) //RS485通讯标志
{
Massageflag = 0;
COMEN = CommTxden;
CommRs485Manage();
COMEN = CommRxden;
}
}
}
/********************************************************************************************************
End of file
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -