📄 timer.c
字号:
/**************** (c) 2005 佛山菱电 *****************************************
PROJECT : AUX VRV
COMPILER : COSMIC
MODULE : timer.c
VERSION : 1.0.0
DATE : 2005/05/09
AUTHOR : 朱坤
DESCRIPTION : 定时/睡眠控制,定时任务
MODIFICATIONS :
******************************************************************************/
#include "timer.h"
#include "ports.h"
#include "adc.h"
#include "fan.h"
#include "pzf.h"
#include "main.h"
#include "swing.h"
#include "i2c.h"
#include "buz.h"
#include "led.h"
#include "rem.h"
#include "pump.h"
#include "scom.h"
#include "rscom.h"
u8 SlpTmFlag; /* 睡眠/定时 */
u8 SysTm20ms; /* 20mS On 4ms */
u8 SysTm1s; /* 1s On 4ms */
u8 SysTm1min; /* 1min 计时 */
u8 SleepUnit; /* 睡眠定时 */
u16 TurnOff; /* 定时关时间 */
u16 TurnOn; /* 定时开时间 */
/* 睡眠控制 */
void SleepSub(void)
{
if (ValBit(SlpTmFlag,fSleep)){
switch(RunMode & (MODEMASK|(1<<fSysOn))){
/* 热睡眠控制: 运行半小时后,设定温度降低1度; 运行1小时后再降低1度;
运行2小时后再降1度(2小时共降3℃),睡眠时间到,空调器停止运转;
制热睡眠最低设定温度为18℃ */
case (MODEHEAT|(1<<fSysOn)):
if (SetupTp > SetupTpMIN){
if ((SleepUnit <= 0x5A) &&
(!ValBit(SlpTmFlag,fTempUp1))){
SetupTp--;
SetBit(SlpTmFlag,fTempUp1);
}
if ((SleepUnit <= 0x3C) &&
(!ValBit(SlpTmFlag,fTempUp2))){
SetupTp--;
SetBit(SlpTmFlag,fTempUp2);
}
if ((SleepUnit == 0) &&
(!ValBit(SlpTmFlag,fTempUp3))){
SetupTp--;
SetBit(SlpTmFlag,fTempUp3);
}
}
break;
/* 制冷/除湿睡眠控制: 睡眠方式运转1小时后,设定温度升高1度;
2小时后设定温度再升高1度,(2小时共升2度);
睡眠时间到,空调器停止运转。制冷睡眠的最高设定温度为30℃ */
case (MODECOOL|(1<<fSysOn)):
case (MODEDRY|(1<<fSysOn)):
if (SetupTp < SetupTpMAX){
if ((SleepUnit <= 0x3C) &&
(!ValBit(SlpTmFlag,fTempUp1))){
SetupTp++;
SetBit(SlpTmFlag,fTempUp1);
}
if ((SleepUnit == 0) &&
(!ValBit(SlpTmFlag,fTempUp2))){
SetupTp++;
SetBit(SlpTmFlag,fTempUp2);
}
}
break;
/* 通风模式不允许睡眠功能 */
default:
break;
}
} else {
ClrBit(SlpTmFlag,fTempUp1);
ClrBit(SlpTmFlag,fTempUp2);
ClrBit(SlpTmFlag,fTempUp3);
}
}
/* 定时开/定时关处理 */
void TimerOnOff(void)
{
if (ValBit(SlpTmFlag,fTimeOff) && ValBit(SlpTmFlag,fTime)){
/* 同时设定定时开、定时关, 时间短的先执行 */
if (TurnOn >= TurnOff ){
TimeOff();
} else {
TimeOn();
}
} else if (ValBit(SlpTmFlag,fTimeOff)){ /* 定时关机 */
TimeOff();
} else if (ValBit(SlpTmFlag,fTime)){ /* 定时开机 */
TimeOn();
}
}
void ClrAutoMode(void)
{
if (ValBit(Sysflag2,fMAuto)){ /* 自动模式清除检测到的模式 */
RunMode = (u8)((RunMode & ~MODEMASK)|MODEAUTO);
ClrBit(Sysflag2,fMAuto); /* 1: 自动模式检测延时 */
}
ClrBit(Sysflag2,fDelay); /* 1: 停压缩机延时*/
}
void SysOff(void)
{
ClrBit(RunMode,fSysOnOff); /* 关机 */
ClrBit(RunMode,fSysOn);
ClrBit(Errorflg,fSysPowErr); /* 清除故障 */
ClrBit(Errorflg,fSComErr);
ClrBit(Sysflag2,fDelay); /* 1: 停压缩机延时*/
//Errorflg2 = 0;
//ClrAutoMode();
}
void TurnSysOff(void)
{
if (ValBit(RunMode,fSysOnOff)){ /* 定时开机时间未到,先关机 */
#ifdef EnBUZ
#ifdef EnSCOM
if (!ValBit(Sysflag1,f1XK_YK)) /* 1: XK */
#endif
BuzCntr = BuzCntrLong; /* 蜂鸣器鸣叫1长声 */
#endif
SysOff(); /* 关机 */
}
}
void TurnSysOn(void)
{
if (!ValBit(RunMode,fSysOnOff)){
ClrAutoMode();
#ifdef EnBUZ
#ifdef EnSCOM
if (!ValBit(Sysflag1,f1XK_YK)) /* 1: XK */
#endif
BuzCntr = BuzCntrTwo|(1<<fTwoSBuz); /* 蜂鸣器鸣叫2短声 */
#endif
SetBit(RunMode,fSysOnOff); /* 定时关机时间未到,先开机 */
Errorflg2 = 0;
}
}
/* 定时开机 */
void TimeOn(void)
{
if (TurnOn != 0){
TurnSysOff();
} else {
ClrBit(SlpTmFlag,fTime); /* 清除定时开 */
TurnSysOn();
}
}
/* 定时关机 */
void TimeOff(void)
{
if (TurnOff != 0){
TurnSysOn();
} else {
ClrBit(SlpTmFlag,fTimeOff); /* 清除定时关 */
TurnSysOff();
}
}
/*-----------------------------------------------------------------------------
ROUTINE NAME : MCC_Int
INPUT/OUTPUT : None
DESCRIPTION : Main Clock Interrupt Service Routine
COMMENTS :
每 4mS 中断一次
-----------------------------------------------------------------------------*/
#ifdef AVRGCC
SIGNAL(SIG_OVERFLOW2)
#else
#pragma interrupt_handler MCC_Int:iv_TIMER2_OVF
void MCC_Int(void)
#endif
{
SetBit(SlpTmFlag,bb4ms);
}
/* 系统计时处理 */
void Timer_Sub(void)
{
if (ValBit(SlpTmFlag,bb4ms)){
ClrBit(SlpTmFlag,bb4ms);
Get_JP(); /* 键扫描 & 显示输出 */
Key_Scan(); /* 应急运行键 */
#ifndef TESTPRG
Swing_Output(); /* 扫风电机输出 */
#endif
#ifdef LEDDISP
#ifdef EnSCOM
if (!ValBit(Sysflag1,f1XK_YK))
#endif
LedDisp_Sub(); /* LED 显示处理*/
#endif
if (--SysTm20ms == 0){ /* 20ms on 4ms */
SysTm20ms = cT20msbase;
/* 与外机通信监控计时 */
if (ScComTm < 255) ScComTm++;
#ifdef EnSCOM
/* 线控器监控计时: 发送状态超时,强制为接收状态 */
if (ValBit(Sysflag1,f1XK_YK)){ /* 1: 线控器存在 */
LcScom_Trig(); /* 线控器启动发送 */
if (LcComTm < 255) LcComTm++;
}
#endif
#ifdef LEDDISP
#if (NJTYPE == 4)||(NJTYPE == 5)
if (FlashErrCnt != 0) FlashErrCnt--;
#endif
#if (NJTYPE == 5)
if (ChkLcdCnt != 0) ChkLcdCnt--;
#endif
#endif
#ifdef EnBUZ
if ((u8)(BuzCntr & ~(1<<fTwoSBuz)) != 0) BuzCntr--;
#endif
if (AutoAckTm != 0 ) AutoAckTm--;
#ifdef EnSWING
#if (NJTYPE==0)||(NJTYPE==1)||(NJTYPE==2)||(NJTYPE==3)||(NJTYPE==4)
if (FanRunDly != 0 ) FanRunDly--; /* 5s On 20mS */
#endif
#endif
#ifndef TESTPRG
Valve_Output(); /* 膨胀阀 */
#endif
ADC_Get(); /* A/D */
}
if (--SysTm1s == 0){ /* 1s On 20ms */
SysTm1s = cT1sbase;
SlpTmFlag ^= (u8)(1<<bb2s);
if (ValBit(SlpTmFlag,bb2s)){ /* 2s On 1s */
if (SysOkDly !=0) SysOkDly--; /* 停压缩机延时 */
}
#ifdef EnSTYLE5
if (ScAddrErrCnt < 255) ScAddrErrCnt++;
#endif
if (ScMonCnt < 255) ScMonCnt++; /* 与外机通信监控计时 */
if (AckTm < 255 ) AckTm++; /* 参数设定计时 */
#ifdef EnSCOM
if (ErrCnt != 0) ErrCnt--; /* 循环发送故障码计时 */
if (ValBit(Sysflag1,f1XK_YK) && /* 1: 线控器存在 */
(LcMonCnt < 255)) LcMonCnt++; /* 与线控器通信监控计时 */
#endif
#ifdef EnPUMP
if (PumpChkCnt < 255) PumpChkCnt++; /* 水泵故障延时检测计时 */
if (PumpErrCnt < 255) PumpErrCnt++; /* 水泵故障检测计时*/
if (PumpDlyCnt != 0) PumpDlyCnt--; /* 水泵关延时*/
#endif
#ifdef LEDDISP
if (SWTime != 0) SWTime--; /* 按键时间 */
if (DispDlyCnt < 255) DispDlyCnt++;
#endif
#ifdef EnPGFENGJI
if (EHeatDlyCnt != 0) EHeatDlyCnt--;
if (!ValBit(PGFanStatus,fPGFeedEn)) PGErrCnt = 0;
if (++PGErrCnt > 30) SetBit(Errorflg2,fPGErr);
#endif
if (FrostCnt < 255) FrostCnt++; /* 室内换热器防结霜保护检测延时 */
if (DefstCnt != 0) DefstCnt--; /* 化霜期间及化霜后3分钟内不检测传感器故障*/
if (ClrHotCnt != 0) ClrHotCnt--; /* 吹余热计时(2分钟)*/
if (AutoCnt != 0) AutoCnt--; /* 自动模式检测延时*/
#ifdef ChigoXG2
if (ZhiReFJTm != 0) ZhiReFJTm--; /* 制热温度到达设定温度,30秒后停内风机*/
#endif
if (--SysTm1min == 0){ /* 1min On 1s */
SysTm1min = 0x3C; /* 60S */
if (SleepUnit != 0) SleepUnit--; /* 睡眠计时 */
if (TurnOn != 0) TurnOn--; /* 定开计时 */
if (TurnOff != 0) TurnOff--; /* 定关计时 */
}
}
}
}
/* 允许 MCC中断,最低优先级,每4mS 中断一次 */
void Init_Timer()
{
SysTm20ms = cT20msbase;
SysTm1s = cT1sbase;
SysTm1min = 0x3C; /* 60S */
TCCR2 = 0x05; /* Normal, OC2 Disconnected, 1:128 */
//TIFR = 0x0FF;
TIMSK |= (u8)(1 << TOIE2);
}
/*** (c) 2005 佛山菱电 **************************** END OF FILE *************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -