📄 main.c
字号:
/**************** (c) 2005 佛山菱电 *****************************************
PROJECT : AUX VRV 挂机/柜机
COMPILER : AVR GCC/ICC
MODULE : main.c
VERSION : 1.0.0
DATE : 2006/01/02
AUTHOR : 朱坤
DESCRIPTION : Main Routine
MODIFICATIONS :
******************************************************************************/
#include "main.h"
#include "ports.h"
#include "timer.h"
#include "adc.h"
#include "pump.h"
#include "i2c.h"
#include "fan.h"
#include "buz.h"
#include "led.h"
#include "swing.h"
#include "eheat.h"
#include "rem.h"
#include "scom.h"
#include "rscom.h"
#include "pzf.h"
u8 RunMode; /* 运行模式 */
u8 SysConfig; /* 配置 */
u8 Errorflg; /* 内机故障 */
u8 Errorflg2; /* 内机故障 */
u8 Sysflag;
u8 Sysflag1;
u8 Sysflag2;
u8 SetupTp; /* 设定温度,加偏移 0x80 */
u8 SysOkDly; /* 压缩机停机延时 5分钟 */
u8 PowerConst; /* 内机设定功率 */
u8 StartUt;
u16 OutSideValve; /* 外机请求开度 */
#ifdef EnSTYLE5
u8 WJ_NJNo; /* 内机 ID */
u8 WJType; /* 1: 定频外机系统,0:变频外机系统 */
u8 SetOn; /* 制热膨胀阀常开开度*/
u8 SetOnCool; /* 制冷调阀零点 +0x80*/
u8 SetOnHeat; /* 制热调阀零点 +0x80*/
u8 SetUnacc; /* 非调节温度 */
u8 SysSetPow; /* 系统最大额定制冷量(500W) */
u8 SysTotPow; /* 系统当前总制冷量(500W) */
u8 OutDevStu[3]; /* 室外机工作/设备状态(3字节) */
u8 OutSideErr[6]; /* 室外机故障状态(6字节) */
#else
u8 OutDevStu[1]; /* 室外机工作/设备状态 */
u8 OutSideErr[1]; /* 室外机故障状态 */
#endif
#ifdef ChigoXG1
#ifndef ChigoXG1Set
u8 SetOffset; /* 制热温度补偿 +0x80*/
#endif
#endif
/* 复位标志 */
u16 ResetID;
int main(void)
{
DisableInterrupts();
TIMSK = 0x00; /* 禁止所有中断 */
TIFR = 0x0FF;
PORTS_Init(); /* 初始化 I/O */
PORTS_Ref(); /* 刷新I/O */
if (ResetID != 0x5A7D){
ResetID = 0x5A7D;
Swing_Init(); /* 初始化风门控制模块 */
V_Init(); /* 初始化膨胀阀系统,关到位 */
Buz_Init(); /* 蜂鸣器初始化 */
I2C_Init(); /* 初始化 i2c 模块 */
Pump_Init(); /* 水泵控制模块初始化*/
Led_Init(); /* LED 显示初始化 */
ADC_Init(); /* A/D 模快初始化 */
GetFromEEPROM(); /* 从 EEPROM 中恢复记忆的参数*/
}
PG_Init(); /* PG 风机初始化 */
Init_Timer(); /* 计时模块初始化 */
Init_TIMA(); /* TA 初始化 */
Init_TIMB(); /* TB 初始化 */
WWD_Init(); /* 初始化看门狗 */
EnableInterrupts();
while (1){
PORTS_Ref(); /* 刷新I/O */
Swing_Sub(); /* 风门控制 */
ValveCont_Sub(); /* 膨胀阀控制 */
Timer_Sub(); /* 4mS 计时 */
LcCom_Sub(); /* 遥控器/线控器接收数据处理,同时生成发送数据 */
#ifdef DISDRYCONTINUE /* 除湿时不允许连续 */
if ((u8)(RunMode & MODEMASK) == MODEDRY){ /* 除湿模式 */
ClrBit(Sysflag,fContinue); /* 1: 连续 */
}
#endif
IfDisHeat(); /* 单冷不允许制热 */
ScCom_Sub(); /* 外机通信接收数据处理,同时生成发送数据 */
WWD_Refresh(); /* 刷新看门狗 */
SleepSub(); /* 睡眠控制 */
TimerOnOff(); /* 定开定关 */
/* 功率控制 */
if (RunMode == ((1<<fSysOn)|(1<<fSysOnOff)|MODEHEAT) ){
CHKMode(MODEHEAT); /* 由其它模式进入制热 */
Heat_Power();
} else if (RunMode == ((1<<fSysOn)|(1<<fSysOnOff)|MODECOOL) ){
Cool_Power(SetupTp,MODECOOL);
} else if (RunMode == ((1<<fSysOn)|(1<<fSysOnOff)|MODEDRY) ){
Cool_Power(0x90,MODEDRY);
} else {
StartUt = 0;
//ClrBit(Sysflag2,fDelay);
ClrBit(Sysflag2,fRequest);
ClrBit(Sysflag,fPower); /* 关压缩机 */
}
WorkStu_Sub(); /* 风机控制 */
PG_FeedBack(); /* PG 风机反馈 */
Pump_Sub(); /* 水泵控制 */
FanCont_Sub(); /* 风机输出 */
Eheat_Sub(); /* 电热控制 */
Buz_Sub(); /* 蜂鸣器处理 */
SaveToEEPROM(); /* 更新EEPROM中的参数 */
IfPowerUp(); /* 功率检测 */
}//while(1);
}
void CHKMode(u8 ModeSet)
{
if (StartUt != ModeSet){
StartUt = ModeSet; /* 由其它模式进入 */
ClrBit(Sysflag,fModeflag);
ClrBit(Sysflag2,fRequest);
ClrBit(OutDevStu[0],fRunEnable); /* 1:外机工作允许标志 */
}
}
void CHKTemp(u8 TempTr, u8 TempTs)
{
if (ValBit(Sysflag,fContinue)||(TempTr > TempTs)){
ClrBit(Sysflag2,fDelay); /* 1:停压缩机延时 */
SetBit(Sysflag,fPower); /* 开压缩机 */
} else if (TempTr == TempTs){
//if (ValBit(Sysflag2,fDelay) && (SysOkDly == 0) ){
// ClrBit(Sysflag,fPower); /* 关压缩机 */
//} else {
// ClrBit(Sysflag2,fDelay);
// SetBit(Sysflag,fPower); /* 开压缩机 */
//}
} else {
if (!ValBit(Sysflag2,fDelay)){
SetBit(Sysflag2,fDelay); /* 1:停压缩机延时 */
SysOkDly = 0x96; /* 停压缩机延时 5分钟 */
}
if (SysOkDly == 0) {
ClrBit(Sysflag,fPower); /* 关压缩机 */
//} else {
// SetBit(Sysflag,fPower); /* 开压缩机 */
}
}
}
void Cool_Power(u8 TempSet,u8 ModeSet)
{
CHKMode(ModeSet);
if (!ValBit(OutDevStu[0],fRunEnable) /* 1:外机工作允许标志 */
&& (!ValBit(Sysflag,fContinue)) /* 1:连续运行 */
&& (AmbientTp <= TempSet)){ /* Tr <= Ts */
//SetBit(Sysflag2,fDelay); /* 1:停压缩机延时 */
//SysOkDly = 0;
SetBit(Sysflag2,fRequest); /* */
ClrBit(Sysflag,fPower); /* 关压缩机 */
} else {
ClrBit(Sysflag2,fRequest);
if (ValBit(Sysflag2,fProtFrost)){ /* 1: 室内换热器防结霜保护 */
//SetBit(Sysflag2,fDelay); /* 1:停压缩机延时 */
//SysOkDly = 0;
ClrBit(Sysflag,fPower); /* 关压缩机 */
} else {
CHKTemp(AmbientTp,TempSet);
}
}
}
void Heat_Power(void)
{
if (!ValBit(OutDevStu[0],fRunEnable) /* 1:外机工作允许标志 */
&& (!ValBit(Sysflag,fContinue)) /* 1:连续运行 */
&& (TempOffset >= SetupTp)){ /* Tr - Toff >= Ts */
//SetBit(Sysflag2,fDelay); /* 1:停压缩机延时 */
//SysOkDly = 0;
SetBit(Sysflag2,fRequest); /* */
ClrBit(Sysflag,fPower); /* 关压缩机 */
} else {
ClrBit(Sysflag2,fRequest);
if (!ValBit(Sysflag2,fOverHeat)) /* 1: 室内换热器过热保护 */
ClrBit(Sysflag,fEndNoPower);
if (TubeMidTp >= OVERSUPHEAT)
SetBit(Sysflag,fEndNoPower); /* 1: 室内换热器超热,关压机 */
if (ValBit(Sysflag,fEndNoPower)){
//SetBit(Sysflag2,fDelay); /* 1: 停压缩机延时 */
//SysOkDly = 0;
ClrBit(Sysflag,fPower); /* 关压缩机 */
} else {
CHKTemp(SetupTp,TempOffset);
}
}
}
/* 检测单冷机是否是制热,若是,改为通风模式 */
void IfDisHeat(void)
{
if (((u8)(RunMode & MODEMASK) == MODEHEAT) /* 制热模式 */
&& ValBit(SysConfig,fDisHeat)){ /* 1: 单冷机 */
RunMode = (u8)((RunMode & ~MODEMASK)|MODEFAN);
}
}
void IfPowerUp(void)
{
#ifdef EnSTYLE5
if ((!ValBit(RunMode,fSysOn)) && /* 仅关机时判断系统总功率是否超过设定 */
(SysSetPow != 0)){ /* 系统最大额定制冷量(500W) */
if (ValBit(Sysflag1,fEnPowCHK)){
if (((u8)(SysTotPow + PowerConst) < SysTotPow)|| /* 检测溢出 */
((u8)(SysTotPow + PowerConst) > SysSetPow)){ /* 功率过大 */
if (ValBit(RunMode,fSysOnOff)){
SetBit(Errorflg,fSysPowErr);
}
ClrBit(RunMode,fSysOn); /* 故障关机 */
} else {
ClrBit(Errorflg,fSysPowErr);
if ((!ValBit(RunMode,fLtdSwOn)) && /* 系统被锁定,不开机 */
ValBit(RunMode,fSysOnOff)){ /* 系统请求开机 */
SetBit(RunMode,fSysOn); /* 同意开机 */
}
}
ClrBit(Sysflag1,fRoPowCHK); /* 1: 请求功率检测 */
ClrBit(Sysflag1,fEnPowCHK); /* 1: 允许功率检测 */
} else {
SetBit(Sysflag1,fReqPowCHK); /* 1: 请求功率检测 */
}
} else {
ClrBit(Sysflag1,fReqPowCHK); /* 1: 请求功率检测 */
ClrBit(Sysflag1,fRoPowCHK); /* 1: 请求功率检测 */
ClrBit(Sysflag1,fEnPowCHK); /* 1: 允许功率检测 */
}
#else
if (ValBit(RunMode,fSysOnOff) && /* 系统请求开机 */
(!ValBit(RunMode,fSysOn)) &&
(!ValBit(RunMode,fLtdSwOn))){ /* 系统被锁定,不开机 */
SetBit(RunMode,fSysOn); /* 同意开机 */
}
#endif
}
void SetMode(u8 nMode)
{
if (nMode != (u8)(ValBit(Sysflag2,fMAuto)? MODEAUTO : (RunMode & MODEMASK))){
RunMode = (u8)((RunMode & ~MODEMASK)| nMode);
ClrBit(Sysflag2,fDelay); /* 1:停压缩机延时 */
ClrBit(Sysflag2,fMAuto); /* 自动模式清除 */
IfDisHeat();
}
}
/*** (c) 2005 佛山菱电 **************************** END OF FILE *************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -