📄 main.c
字号:
/**************** (c) 2005 佛山菱电 *****************************************
PROJECT : 简易风盘控制器
COMPILER : AVR ICC for m48
MODULE : main.c
VERSION : 1.0.0
DATE : 2005/12/12
AUTHOR : 朱坤
DESCRIPTION : Main Routine
MODIFICATIONS :
******************************************************************************/
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include "lib.h"
#include "version.h"
#include "ports.h"
#include "timer.h"
#include "adc.h"
#include "i2c.h"
#include "fan.h"
#include "buz.h"
#include "lcd.h"
#include "scom.h"
#include "main.h"
#ifndef UGPIO
u8 RunMode; /* 运行模式 */
#endif
u8 SysConfig; /* 配置 */
u8 Errorflg; /* 内机故障 */
u8 Sysflag;
u8 SetupTp; /* 设定温度,加偏移 0x80 */
u8 NeijiNo; /* 内机 ID */
u8 OutDevStu; /* 室外机工作/设备状态(3字节) */
u8 OutSideErr; /* 室外机故障状态(6字节) */
u8 StartUt;
u8 SysOkDly;
#ifdef ChigoXG1
#ifndef ChigoXG1Set
u8 SetOffset; /* 制热温度补偿 +0x80*/
#endif
#endif
/* 复位标志 */
u16 ResetID;
int main(void)
{
cli(); /* 禁止中断 */
OSCCAL = 0x0A8;
PORTS_Init(); /* 初始化 I/O */
PORTS_Ref(); /* 刷新I/O */
/* 禁止 USART 模块 */
//UCSR0A = (u8)(1<<TXC0);
UCSR0B = (u8)0x00;
//UCSR0C = (u8)0x00;
/* 禁止 TWI 模块 */
TWCR = (u8)0x00;
/* 禁止 SPI 模块 */
SPCR = (u8)0x00;
/* 不允许 Sleep */
SMCR = (u8)0x00;
/* 禁止 ACC 模块 */
ACSR = (u8)(1<<ACD);
wdt_enable(WDTO_500MS); /* 初始化看门狗 */
if (ResetID != 0x5A7D){
ResetID = 0x5A7D;
Buz_Init(BuzCntrLong); /* 蜂鸣器初始化 */
I2C_Init(); /* 初始化 i2c 模块 */
Lcd_Init(); /* LED 显示初始化 */
PG_Init(); /* PG 风机初始化 */
ADC_Init();
GetFromEEPROM(); /* 从 EEPROM 中恢复记忆的参数*/
}
Init_Timer0(); /* 计时模块初始化 */
Init_Timer2(); /* T2 初始化 */
sei(); /* 允许中断 */
while (1){
#if 0
#ifdef DEBUG
DDRC |= 0x04;
PORTC ^= 0x04;
#endif
#endif
#ifndef DEBUG
PORTS_Ref(); /* 刷新I/O */
#endif
ScCom_Sub(); /* 外机通信接收数据处理,同时生成发送数据 */
#ifdef DISDRYCONTINUE
/* 除湿时不允许连续 */
//if ((u8)(RunMode & MODEMASK) == MODEDRY){ /* 除湿模式 */
// ClrBit(Sysflag,fContinue); /* 1: 连续 */
//}
#endif
if (((u8)(RunMode & MODEMASK) == MODEHEAT) /* 制热模式 */
&& ValBit(SysConfig,fDisHeat)){ /* 1: 单冷机 */
RunMode = (u8)((RunMode & ~MODEMASK)|MODEFAN);
}
Timer_Sub(); /* 4mS 计时 */
wdt_reset(); /* 刷新看门狗 */
SleepSub(); /* 睡眠控制 */
TimerOnOff(); /* 定开定关 */
/* 功率控制 */
if (RunMode == ((1<<fSysOn)|(1<<fSysOnOff)|MODEHEAT) ){
CHK_Power(SetupTp, TempOffset, MODECOOL);
} else if (RunMode == ((1<<fSysOn)|(1<<fSysOnOff)|MODECOOL) ){
CHK_Power(AmbientTp, SetupTp, MODECOOL);
} else if (RunMode == ((1<<fSysOn)|(1<<fSysOnOff)|MODEDRY) ){
CHK_Power(AmbientTp, 0x90, MODEDRY);
} else {
StartUt = 0;
ClrBit(Sysflag,fPower); /* 关压缩机 */
}
WorkStu_Sub(); /* 风机控制 */
PG_FeedBack(); /* PG 风机反馈 */
FanCont_Sub(); /* 风机输出 */
Buz_Sub(); /* 蜂鸣器处理 */
SaveToEEPROM(); /* 更新EEPROM中的参数 */
if ((RunMode & ((1 << fSysOnOff)| /* 系统请求开机 */
(1 << fLtdSwOn) | /* 1: 系统被锁定,不开机 */
(1 << fErrSt) | /* 1: 故障关机 */
(1 << fSysPower)| /* 1: 功率超过 */
(1 << fSysOn))) == (1 << fSysOnOff)){
SetBit(RunMode,fSysOn); /* 同意开机 */
}
}
return 0;
}
void CHK_Power(u8 TempTr, u8 TempTs,u8 ModeSet)
{
if (StartUt != ModeSet){
StartUt = ModeSet; /* 由其它模式进入 */
ClrBit(Sysflag,fModeflag);
ClrBit(OutDevStu,fRunEnable); /* 1:外机工作允许标志 */
}
if (!ValBit(OutDevStu,fRunEnable)){ /* 1:外机工作允许标志 */
ClrBit(Sysflag,fPower); /* 关压缩机 */
} else if (TempTr > TempTs){
ClrBit(Sysflag,fDelay); /* 1:停压缩机延时 */
SetBit(Sysflag,fPower); /* 开压缩机 */
} else if (TempTr < TempTs){
if (!ValBit(Sysflag,fDelay)){
SetBit(Sysflag,fDelay); /* 1:停压缩机延时 */
SysOkDly = 0x96; /* 停压缩机延时 5分钟 */
}
if (SysOkDly == 0){
ClrBit(Sysflag,fPower); /* 关压缩机 */
}
}
}
void SetMode(u8 nMode)
{
if (nMode != (u8)(ValBit(Sysflag,fMAuto)? MODEAUTO : (RunMode & MODEMASK))){
RunMode = (u8)((RunMode & ~MODEMASK)| nMode);
ClrBit(Sysflag,fDelay); /* 1:停压缩机延时 */
ClrBit(Sysflag,fMAuto); /* 自动模式清除 */
}
}
/*** (c) 2005 佛山菱电 **************************** END OF FILE *************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -