厂家提供的芯片资料
This commit is contained in:
505
范例程序(C语言)/IH-CMS79F53X5-C-V1.0/OutPut.c
Normal file
505
范例程序(C语言)/IH-CMS79F53X5-C-V1.0/OutPut.c
Normal file
@@ -0,0 +1,505 @@
|
||||
/**************************************************************************
|
||||
**************************************************************************/
|
||||
#include "Define_Global.h"
|
||||
|
||||
/**************************************************************************
|
||||
* 函数名称:OutPut_PWM
|
||||
* 函数功能:PWM输出
|
||||
* 入口参数:无
|
||||
* 出口参数:无
|
||||
* 备 注:内部调用
|
||||
**************************************************************************/
|
||||
void OutPut_PWM()
|
||||
{
|
||||
volatile unsigned char i;
|
||||
volatile unsigned char bak_PWMCON0 = 0B01100000; //PWM时钟分频=32
|
||||
volatile unsigned char bak_PWMCON1 = 0;
|
||||
//---------------------------------------------------------------------
|
||||
//风扇:
|
||||
#if _FAN_OUT_PWM_ && ((C_PwmChannel_Buzz&0xE0)!=(C_PwmChannel_Fan&0xE0)) && (C_PwmChannel_Fan!=0xFF)
|
||||
if(PwmDuty_Fan)
|
||||
{
|
||||
PwmDuty_Fan--;
|
||||
PwmDuty_Fan &= 0x3FF;
|
||||
}
|
||||
if(PwmPeriod_Fan)
|
||||
{
|
||||
PwmPeriod_Fan--;
|
||||
PwmPeriod_Fan &= 0x3FF;
|
||||
}
|
||||
|
||||
#if (C_PwmChannel_Fan>>4)==0
|
||||
PWMDH &= ~(3 << 0); //Bit0~Bit1:PWM0占空比高2位
|
||||
if(PwmDuty_Fan & 0x0200)
|
||||
{
|
||||
PWMDH |= (1 << 1);
|
||||
}
|
||||
if(PwmDuty_Fan & 0x0100)
|
||||
{
|
||||
PWMDH |= (1 << 0);
|
||||
}
|
||||
PWMD0L = PwmDuty_Fan; //PWM0占空比低8位
|
||||
|
||||
PWMTH &= ~(3 << 0); //Bit0~Bit1:PWM0\PWM1周期高2位
|
||||
if(PwmPeriod_Fan & 0x0200)
|
||||
{
|
||||
PWMTH |= (1 << 1);
|
||||
}
|
||||
if(PwmPeriod_Fan & 0x0100)
|
||||
{
|
||||
PWMTH |= (1 << 0);
|
||||
}
|
||||
PWMTL = PwmPeriod_Fan; //PWM0~PWM1周期低8位
|
||||
|
||||
if(PwmDuty_Fan)
|
||||
{
|
||||
bak_PWMCON0 |= (1 << 0); //使能PWM0
|
||||
}
|
||||
#if (C_PwmChannel_Fan&0xF)==0xA
|
||||
bak_PWMCON1 |= 0; //PWM的IO位置选择:PWM0A
|
||||
#elif (C_PwmChannel_Fan&0xF)==0xB
|
||||
bak_PWMCON1 |= 1; //PWM的IO位置选择:PWM0B
|
||||
#elif (C_PwmChannel_Fan&0xF)==0xC
|
||||
bak_PWMCON1 |= 2; //PWM的IO位置选择:PWM0C
|
||||
#elif (C_PwmChannel_Fan&0xF)==0xD
|
||||
bak_PWMCON1 |= 3; //PWM的IO位置选择:PWM0D
|
||||
#endif
|
||||
|
||||
#elif (C_PwmChannel_Fan>>4)==1
|
||||
PWMDH &= ~(3 << 2); //Bit2~Bit3:PWM1占空比高2位
|
||||
if(PwmDuty_Fan & 0x0200)
|
||||
{
|
||||
PWMDH |= (1 << 3);
|
||||
}
|
||||
if(PwmDuty_Fan & 0x0100)
|
||||
{
|
||||
PWMDH |= (1 << 2);
|
||||
}
|
||||
PWMD1L = PwmDuty_Fan; //PWM1占空比低8位
|
||||
|
||||
PWMTH &= ~(3 << 0); //Bit0~Bit1:PWM0\PWM1周期高2位
|
||||
if(PwmPeriod_Fan & 0x0200)
|
||||
{
|
||||
PWMTH |= (1 << 1);
|
||||
}
|
||||
if(PwmPeriod_Fan & 0x0100)
|
||||
{
|
||||
PWMTH |= (1 << 0);
|
||||
}
|
||||
PWMTL = PwmPeriod_Fan; //PWM0~PWM1周期低8位
|
||||
|
||||
if(PwmDuty_Fan)
|
||||
{
|
||||
bak_PWMCON0 |= (1 << 1); //使能PWM1
|
||||
}
|
||||
#if (C_PwmChannel_Fan&0xF)==0xA
|
||||
bak_PWMCON1 |= (0 << 2); //PWM的IO位置选择:PWM1A
|
||||
#elif (C_PwmChannel_Fan&0xF)==0xB
|
||||
bak_PWMCON1 |= (1 << 2); //PWM的IO位置选择:PWM1B
|
||||
#elif (C_PwmChannel_Fan&0xF)==0xC
|
||||
bak_PWMCON1 |= (2 << 2); //PWM的IO位置选择:PWM1C
|
||||
#elif (C_PwmChannel_Fan&0xF)==0xD
|
||||
bak_PWMCON1 |= (3 << 2); //PWM的IO位置选择:PWM1D
|
||||
#endif
|
||||
|
||||
#elif (C_PwmChannel_Fan>>4)==2
|
||||
PWMDH &= ~(3 << 4); //Bit4~Bit5:PWM2占空比高2位
|
||||
if(PwmDuty_Fan & 0x0200)
|
||||
{
|
||||
PWMDH |= (1 << 5);
|
||||
}
|
||||
if(PwmDuty_Fan & 0x0100)
|
||||
{
|
||||
PWMDH |= (1 << 4);
|
||||
}
|
||||
PWMD2L = PwmDuty_Fan; //PWM2占空比低8位
|
||||
|
||||
PWMTH &= ~(3 << 2); //Bit2~Bit3:PWM2周期高2位
|
||||
if(PwmPeriod_Fan & 0x0200)
|
||||
{
|
||||
PWMTH |= (1 << 3);
|
||||
}
|
||||
if(PwmPeriod_Fan & 0x0100)
|
||||
{
|
||||
PWMTH |= (1 << 2);
|
||||
}
|
||||
PWM2TL = PwmPeriod_Fan; //PWM2周期低8位
|
||||
|
||||
if(PwmDuty_Fan)
|
||||
{
|
||||
bak_PWMCON0 |= (1 << 2); //使能PWM2
|
||||
}
|
||||
#if (C_PwmChannel_Fan&0xF)==0xA
|
||||
bak_PWMCON1 |= (0 << 4); //PWM的IO位置选择:PWM2A
|
||||
#elif (C_PwmChannel_Fan&0xF)==0xB
|
||||
bak_PWMCON1 |= (1 << 4); //PWM的IO位置选择:PWM2B
|
||||
#elif (C_PwmChannel_Fan&0xF)==0xC
|
||||
bak_PWMCON1 |= (2 << 4); //PWM的IO位置选择:PWM2C
|
||||
#elif (C_PwmChannel_Fan&0xF)==0xD
|
||||
bak_PWMCON1 |= (3 << 4); //PWM的IO位置选择:PWM2D
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
//---------------------------------------------------------------------
|
||||
//蜂鸣器:
|
||||
#if (C_PwmChannel_Buzz!=0xFF)
|
||||
if(PwmDuty_Buzz)
|
||||
{
|
||||
PwmDuty_Buzz--;
|
||||
PwmDuty_Buzz &= 0x3FF;
|
||||
}
|
||||
if(PwmPeriod_Buzz)
|
||||
{
|
||||
PwmPeriod_Buzz--;
|
||||
PwmPeriod_Buzz &= 0x3FF;
|
||||
}
|
||||
|
||||
#if (C_PwmChannel_Buzz>>4)==0
|
||||
PWMDH &= ~(3 << 0); //Bit0~Bit1:PWM0占空比高2位
|
||||
if(PwmDuty_Buzz & 0x0200)
|
||||
{
|
||||
PWMDH |= (1 << 1);
|
||||
}
|
||||
if(PwmDuty_Buzz & 0x0100)
|
||||
{
|
||||
PWMDH |= (1 << 0);
|
||||
}
|
||||
PWMD0L = PwmDuty_Buzz; //PWM0占空比低8位
|
||||
|
||||
PWMTH &= ~(3 << 0); //Bit0~Bit1:PWM0\PWM1周期高2位
|
||||
if(PwmPeriod_Buzz & 0x0200)
|
||||
{
|
||||
PWMTH |= (1 << 1);
|
||||
}
|
||||
if(PwmPeriod_Buzz & 0x0100)
|
||||
{
|
||||
PWMTH |= (1 << 0);
|
||||
}
|
||||
PWMTL = PwmPeriod_Buzz; //PWM0~PWM1周期低8位
|
||||
|
||||
if(PwmDuty_Buzz)
|
||||
{
|
||||
bak_PWMCON0 |= (1 << 0); //使能PWM0
|
||||
}
|
||||
#if (C_PwmChannel_Buzz&0xF)==0xA
|
||||
bak_PWMCON1 |= 0; //PWM的IO位置选择:PWM0A
|
||||
#elif (C_PwmChannel_Buzz&0xF)==0xB
|
||||
bak_PWMCON1 |= 1; //PWM的IO位置选择:PWM0B
|
||||
#elif (C_PwmChannel_Buzz&0xF)==0xC
|
||||
bak_PWMCON1 |= 2; //PWM的IO位置选择:PWM0C
|
||||
#elif (C_PwmChannel_Buzz&0xF)==0xD
|
||||
bak_PWMCON1 |= 3; //PWM的IO位置选择:PWM0D
|
||||
#endif
|
||||
|
||||
#elif (C_PwmChannel_Buzz>>4)==1
|
||||
PWMDH &= ~(3 << 2); //Bit2~Bit3:PWM1占空比高2位
|
||||
if(PwmDuty_Buzz & 0x0200)
|
||||
{
|
||||
PWMDH |= (1 << 3);
|
||||
}
|
||||
if(PwmDuty_Buzz & 0x0100)
|
||||
{
|
||||
PWMDH |= (1 << 2);
|
||||
}
|
||||
PWMD1L = PwmDuty_Buzz; //PWM1占空比低8位
|
||||
|
||||
PWMTH &= ~(3 << 0); //Bit0~Bit1:PWM0\PWM1周期高2位
|
||||
if(PwmPeriod_Buzz & 0x0200)
|
||||
{
|
||||
PWMTH |= (1 << 1);
|
||||
}
|
||||
if(PwmPeriod_Buzz & 0x0100)
|
||||
{
|
||||
PWMTH |= (1 << 0);
|
||||
}
|
||||
PWMTL = PwmPeriod_Buzz; //PWM0~PWM1周期低8位
|
||||
|
||||
if(PwmDuty_Buzz)
|
||||
{
|
||||
bak_PWMCON0 |= (1 << 1); //使能PWM1
|
||||
}
|
||||
#if (C_PwmChannel_Buzz&0xF)==0xA
|
||||
bak_PWMCON1 |= (0 << 2); //PWM的IO位置选择:PWM1A
|
||||
#elif (C_PwmChannel_Buzz&0xF)==0xB
|
||||
bak_PWMCON1 |= (1 << 2); //PWM的IO位置选择:PWM1B
|
||||
#elif (C_PwmChannel_Buzz&0xF)==0xC
|
||||
bak_PWMCON1 |= (2 << 2); //PWM的IO位置选择:PWM1C
|
||||
#elif (C_PwmChannel_Buzz&0xF)==0xD
|
||||
bak_PWMCON1 |= (3 << 2); //PWM的IO位置选择:PWM1D
|
||||
#endif
|
||||
|
||||
#elif (C_PwmChannel_Buzz>>4)==2
|
||||
PWMDH &= ~(3 << 4); //Bit4~Bit5:PWM2占空比高2位
|
||||
if(PwmDuty_Buzz & 0x0200)
|
||||
{
|
||||
PWMDH |= (1 << 5);
|
||||
}
|
||||
if(PwmDuty_Buzz & 0x0100)
|
||||
{
|
||||
PWMDH |= (1 << 4);
|
||||
}
|
||||
PWMD2L = PwmDuty_Buzz; //PWM2占空比低8位
|
||||
|
||||
PWMTH &= ~(3 << 2); //Bit2~Bit3:PWM2周期高2位
|
||||
if(PwmPeriod_Buzz & 0x0200)
|
||||
{
|
||||
PWMTH |= (1 << 3);
|
||||
}
|
||||
if(PwmPeriod_Buzz & 0x0100)
|
||||
{
|
||||
PWMTH |= (1 << 2);
|
||||
}
|
||||
PWM2TL = PwmPeriod_Buzz; //PWM2周期低8位
|
||||
|
||||
if(PwmDuty_Buzz)
|
||||
{
|
||||
bak_PWMCON0 |= (1 << 2); //使能PWM2
|
||||
}
|
||||
#if (C_PwmChannel_Buzz&0xF)==0xA
|
||||
bak_PWMCON1 |= (0 << 4); //PWM的IO位置选择:PWM2A
|
||||
#elif (C_PwmChannel_Buzz&0xF)==0xB
|
||||
bak_PWMCON1 |= (1 << 4); //PWM的IO位置选择:PWM2B
|
||||
#elif (C_PwmChannel_Buzz&0xF)==0xC
|
||||
bak_PWMCON1 |= (2 << 4); //PWM的IO位置选择:PWM2C
|
||||
#elif (C_PwmChannel_Buzz&0xF)==0xD
|
||||
bak_PWMCON1 |= (3 << 4); //PWM的IO位置选择:PWM2D
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
//---------------------------------------------------------------------
|
||||
PWMCON1 = bak_PWMCON1; //PWM的IO位置设置
|
||||
|
||||
if(bak_PWMCON0 != PWMCON0)
|
||||
{
|
||||
PWMCON0 = bak_PWMCON0; //PWM时钟分频设置,使能\禁止PWM
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 函数名称:Buzz_Short_One
|
||||
* 函数功能:蜂鸣器短鸣一声
|
||||
* 入口参数:无
|
||||
* 出口参数:无
|
||||
* 备 注:
|
||||
**************************************************************************/
|
||||
void Buzz_Short_One()
|
||||
{
|
||||
TimeBuzz = 200/C_TimeMS_Main; //200ms
|
||||
B_Buzz_Out = 1; //蜂鸣器输出
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 函数名称:Buzz_Long_One
|
||||
* 函数功能:蜂鸣器长鸣一声
|
||||
* 入口参数:无
|
||||
* 出口参数:无
|
||||
* 备 注:
|
||||
**************************************************************************/
|
||||
void Buzz_Long_One()
|
||||
{
|
||||
TimeBuzz = 400/C_TimeMS_Main; //400ms
|
||||
B_Buzz_Out = 1; //蜂鸣器输出
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 函数名称:OutPut_Buzz
|
||||
* 函数功能:蜂鸣器输出
|
||||
* 入口参数:无
|
||||
* 出口参数:无
|
||||
* 备 注:内部调用
|
||||
**************************************************************************/
|
||||
void OutPut_Buzz()
|
||||
{
|
||||
if(TimeBuzz) //蜂鸣器鸣叫计时
|
||||
{
|
||||
TimeBuzz--;
|
||||
}
|
||||
else
|
||||
{
|
||||
B_Buzz_Out = 0; //蜂鸣器输出停止
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
#if (C_PwmChannel_Buzz!=0xFF)
|
||||
PwmPeriod_Buzz = 250; //蜂鸣器PWM周期:250us
|
||||
|
||||
if(B_Buzz_En || B_Buzz_Out)
|
||||
{ //蜂鸣器输出
|
||||
PwmDuty_Buzz = 125; //蜂鸣器PWM占空比:125us
|
||||
}
|
||||
else
|
||||
{ //蜂鸣器关闭
|
||||
PwmDuty_Buzz = 0; //蜂鸣器PWM占空比:0us
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 函数名称:OutPut_Fan
|
||||
* 函数功能:风扇输出
|
||||
* 入口参数:无
|
||||
* 出口参数:无
|
||||
* 备 注:内部调用
|
||||
**************************************************************************/
|
||||
void OutPut_Fan()
|
||||
{
|
||||
static unsigned int Delay_FanOut;
|
||||
static unsigned char Flag_FanOut;
|
||||
//---------------------------------------------------------------------
|
||||
if((AD_TmprPan > Buf_AD_Pan_FanOn) || (AD_TmprIgbt > Buf_AD_Igbt_FanOn))
|
||||
{ //锅底高温、IGBT高温
|
||||
SetBit(Flag_FanOut,0);
|
||||
}
|
||||
else if((AD_TmprPan < Buf_AD_Pan_FanOff) && (AD_TmprIgbt < Buf_AD_Igbt_FanOff))
|
||||
{
|
||||
ClrBit(Flag_FanOut,0);
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
if(B_Heat_En)
|
||||
{ //加热使能
|
||||
SetBit(Flag_FanOut,1);
|
||||
|
||||
if(TestOne(Flag_FanOut,0))
|
||||
{ //锅底高温、IGBT高温
|
||||
Delay_FanOut = 1000u/C_TimeMS_Main*180; //3min
|
||||
}
|
||||
else
|
||||
{ //锅底和IGBT温度正常
|
||||
Delay_FanOut = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ClrBit(Flag_FanOut,1);
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
if(B_Fan_En || B_Zero_Lose)
|
||||
{ //风扇使能、过零丢失
|
||||
SetBit(Flag_FanOut,2);
|
||||
}
|
||||
else
|
||||
{
|
||||
ClrBit(Flag_FanOut,2);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
if(Delay_FanOut)
|
||||
{ //风扇延时
|
||||
Delay_FanOut--;
|
||||
SetBit(Flag_FanOut,3);
|
||||
}
|
||||
else
|
||||
{
|
||||
ClrBit(Flag_FanOut,3);
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
#if !_FAN_OUT_PWM_ || ((C_PwmChannel_Buzz&0xE0)==(C_PwmChannel_Fan&0xE0)) || (C_PwmChannel_Fan==0xFF)
|
||||
if(Flag_FanOut && B_CurrAdc_Fst)
|
||||
{
|
||||
Pin_Fan = 1; //风扇输出(IO口输出高)
|
||||
}
|
||||
else
|
||||
{
|
||||
Pin_Fan = 0; //风扇输出停止(IO口输出低)
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
#else
|
||||
PwmPeriod_Fan = 60; //风扇PWM周期:60us
|
||||
|
||||
if(Flag_FanOut && B_CurrAdc_Fst)
|
||||
{
|
||||
PwmDuty_Fan = 60; //风扇PWM占空比:60us
|
||||
}
|
||||
else
|
||||
{
|
||||
PwmDuty_Fan = 0; //风扇PWM占空比:0us
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 函数名称:OutPut_Heat
|
||||
* 函数功能:加热输出
|
||||
* 入口参数:无
|
||||
* 出口参数:无
|
||||
* 备 注:内部调用
|
||||
**************************************************************************/
|
||||
void OutPut_Heat()
|
||||
{
|
||||
if(B_Protect_Stop)
|
||||
{ //IGBT保护停止
|
||||
Flag_PPG = 0; //PPG输出关闭
|
||||
B_PPG_On = B_PPG_Out = 0;
|
||||
B_Pan_Error = B_Pan_No = B_Pan_Have = 0;
|
||||
}
|
||||
#ifndef _TEST_PPGOUT_ //PPG输出测试
|
||||
#ifndef _TEST_PANCHECK_ //检锅测试
|
||||
#if _MODE_IHDEBUG_
|
||||
else if((!B_Heat_En || Flag1_Error || Flag2_Error) &&\
|
||||
!B_Test_PPGOut && !B_Test_PanCheck)
|
||||
#else
|
||||
else if(!B_Heat_En || Flag1_Error || Flag2_Error)
|
||||
#endif
|
||||
{ //加热关闭、故障
|
||||
Flag_PPG = 0; //PPG输出关闭
|
||||
B_PPG_On = B_PPG_Out = 0;
|
||||
B_Pan_Error = B_Pan_No = B_Pan_Have = 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
else
|
||||
{ //正常加热输出
|
||||
B_PPG_En = 1; //使能PPG输出
|
||||
|
||||
#ifndef _TEST_PPGOUT_ //PPG输出测试
|
||||
#if _MODE_IHDEBUG_
|
||||
if(!B_Test_PPGOut)
|
||||
#endif
|
||||
{
|
||||
if(B_HeatStop_CheckPan)
|
||||
{
|
||||
B_PPGStop_CheckPan = 1; //PPG暂停但检锅
|
||||
}
|
||||
else
|
||||
{
|
||||
B_PPGStop_CheckPan = 0;
|
||||
}
|
||||
|
||||
if(B_HeatStop_NoCheck)
|
||||
{
|
||||
B_PPGStop_NoCheck = 1; //PPG暂停不检锅
|
||||
}
|
||||
else
|
||||
{
|
||||
B_PPGStop_NoCheck = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef _TEST_PANCHECK_ //检锅测试
|
||||
B_PPGStop_CheckPan = 1; //PPG暂停但检锅
|
||||
#elif _MODE_IHDEBUG_
|
||||
if(B_Test_PanCheck) //检锅测试
|
||||
{
|
||||
B_PPGStop_CheckPan = 1; //PPG暂停但检锅
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 函数名称:Set_OutPut
|
||||
* 函数功能:输出设置
|
||||
* 入口参数:无
|
||||
* 出口参数:无
|
||||
* 备 注:主循环调用
|
||||
**************************************************************************/
|
||||
void Set_OutPut()
|
||||
{
|
||||
OutPut_PWM(); //PWM输出
|
||||
|
||||
OutPut_Heat(); //加热输出
|
||||
OutPut_Fan(); //风扇输出
|
||||
OutPut_Buzz(); //蜂鸣器输出
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user