commit dcee04a348e84f7feb794a789930d7c350daeec1 Author: Tinj <1010112630@qq.com> Date: Mon Oct 19 15:33:00 2026 +0800 厂家æ��供的芯片资料 diff --git a/CMSå¼€å�‘烧写软件/仿真软件/CMS_IDE_V2.03.25.5_ZS.zip b/CMSå¼€å�‘烧写软件/仿真软件/CMS_IDE_V2.03.25.5_ZS.zip new file mode 100644 index 0000000..853a7a1 Binary files /dev/null and b/CMSå¼€å�‘烧写软件/仿真软件/CMS_IDE_V2.03.25.5_ZS.zip differ diff --git a/CMSå¼€å�‘烧写软件/烧写软件/CMS_WriterPro_V1.02.13.zip b/CMSå¼€å�‘烧写软件/烧写软件/CMS_WriterPro_V1.02.13.zip new file mode 100644 index 0000000..1dbaab3 Binary files /dev/null and b/CMSå¼€å�‘烧写软件/烧写软件/CMS_WriterPro_V1.02.13.zip differ diff --git a/CMSå¼€å�‘烧写软件/烧写软件/CMS_Writer_V9.02.10.zip b/CMSå¼€å�‘烧写软件/烧写软件/CMS_Writer_V9.02.10.zip new file mode 100644 index 0000000..5367aa9 Binary files /dev/null and b/CMSå¼€å�‘烧写软件/烧写软件/CMS_Writer_V9.02.10.zip differ diff --git a/CMS芯片手册/CMS79F53x5用户手册_V1.00.pdf b/CMS芯片手册/CMS79F53x5用户手册_V1.00.pdf new file mode 100644 index 0000000..f299806 Binary files /dev/null and b/CMS芯片手册/CMS79F53x5用户手册_V1.00.pdf differ diff --git a/ã€�版本说明】.txt b/ã€�版本说明】.txt new file mode 100644 index 0000000..839206c --- /dev/null +++ b/ã€�版本说明】.txt @@ -0,0 +1,4 @@ +*************************************************************************************************** +ã€�版 本】:V1.0 +ã€�生æˆ�时间】:2023.02.09 +ã€�版本说明】:åˆ�始版本 \ No newline at end of file diff --git a/å�‚考原ç�†å›¾/IHå�‚考原ç�†å›¾ï¼ˆCMS79F5335-V1.0).pdf b/å�‚考原ç�†å›¾/IHå�‚考原ç�†å›¾ï¼ˆCMS79F5335-V1.0).pdf new file mode 100644 index 0000000..2a1cd03 Binary files /dev/null and b/å�‚考原ç�†å›¾/IHå�‚考原ç�†å›¾ï¼ˆCMS79F5335-V1.0).pdf differ diff --git a/å�‚考原ç�†å›¾/IHå�‚考原ç�†å›¾ï¼ˆCMS79F5365-V1.0).pdf b/å�‚考原ç�†å›¾/IHå�‚考原ç�†å›¾ï¼ˆCMS79F5365-V1.0).pdf new file mode 100644 index 0000000..1876179 Binary files /dev/null and b/å�‚考原ç�†å›¾/IHå�‚考原ç�†å›¾ï¼ˆCMS79F5365-V1.0).pdf differ diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0.rar b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0.rar new file mode 100644 index 0000000..27cce80 Binary files /dev/null and b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0.rar differ diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/ADC.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/ADC.c new file mode 100644 index 0000000..9c93216 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/ADC.c @@ -0,0 +1,1324 @@ +/************************************************************************** +**************************************************************************/ +#include "Define_Global.h" + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_AD_Start +* º¯Êý¹¦ÄÜ£ºADCÆô¶¯ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_AD_Start() +{ + if(B_GetAD_MaxMin || Delay_Adc) + { //ADCÊÖ¶¯Æô¶¯ + ADCON2 = 0B00000000; + ADCON1 = 0B10010011; //ÓÒ¶ÔÆë£¬Fosc/8£¬²ÉÑùÖÜÆÚ=8£¬ÇåADC×Ô¶¯ÀÛ¼Ó½á¹û + } + else + { //ADC×Ô¶¯Æô¶¯ + if(B_Adc_SetOk) + { + return; + } + else + { + B_Adc_SetOk = 1; + ADIF = 0; //ÇåADCÖжϱê־λ + + if(B_GetAD_AllSum) + { + ADCON2 = 0B01000111; //ADC×Ô¶¯ÀÛºÍ8192´Î£¨´ïµ½Ê±¼äÍ£Ö¹£© + } + else + { + ADCON2 = 0B01000011; //ADC×Ô¶¯ÀÛºÍ512´Î£¨´ïµ½´ÎÊýÍ£Ö¹£© + } + + ADCON1 = 0B10011011; //ÓÒ¶ÔÆë£¬Fosc/8£¬²ÉÑùÖÜÆÚ=8£¬ÇåADC×Ô¶¯ÀÛ¼Ó½á¹û£¬Ó²¼þ×Ô¶¯Æô¶¯ADC + } + } + + if(B_Channel_Vol) + { + ADCON0 = C_AdcSet_Vol; //ÊеçµçѹAD¼ì²âÉèÖà + } + else if(B_Channel_Curr) + { + ADCON0 = C_AdcSet_Curr; //¹¤×÷µçÁ÷AD¼ì²âÉèÖà + } + else if(B_Channel_Igbt) + { + ADCON0 = C_AdcSet_Igbt; //IGBTζÈAD¼ì²âÉèÖà + } + else if(B_Channel_Pan) + { + ADCON0 = C_AdcSet_Pan; //¹øµ×ζÈAD¼ì²âÉèÖà + } + else if(B_Channel_Top) + { + ADCON0 = C_AdcSet_Top; //¶¥²¿Î¶ÈAD¼ì²âÉèÖà + } + else if(B_Channel_VRef) + { + ADCON0 = C_AdcSet_VRef; //ÄÚ²¿²Î¿¼µçѹAD¼ì²âÉèÖà + } + else if(B_Channel_Gnd) + { + ADCON0 = C_AdcSet_Gnd; //GND-AD¼ì²âÉèÖà + } + else if(B_Channel_Vdd) + { + ADCON0 = C_AdcSet_Vdd; //VDD-AD¼ì²âÉèÖà + } + + NOP(); + NOP(); + GODONE = 1; +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_AD_End +* º¯Êý¹¦ÄÜ£ºADC½áÊø +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_AD_End() +{ + ADCON0 = 0; + ADCON1 = 0; + ADCON2 = 0; +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_AD_Ok +* º¯Êý¹¦ÄÜ£ºADCÍê³É +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_AD_Ok() +{ + Flag1_Adc = 0; + B_Adc_Ok = 1; + + Check_AD_End(); +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_AD_Error +* º¯Êý¹¦ÄÜ£ºADC´íÎó +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_AD_Error() +{ + Flag1_Adc = 0; + B_Adc_Error = 1; + + Check_AD_End(); +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_AD +* º¯Êý¹¦ÄÜ£ºAD¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖжϵ÷Óà +**************************************************************************/ +void Check_AD() +{ + volatile unsigned char i; + //--------------------------------------------------------------------- + if(B_Zero_Adc) + { //ADC¹ýÁã´¦Àí + B_Zero_Adc = 0; //ÿ´Î¹ýÁãÖÜÆÚ½øÀ´´¦ÀíÒ»´Î + + if(B_Adc_Curr || B_Adc_Vol) + { + if(!B_Adc_On && !B_Adc_Ok && !B_Adc_Error) + { //ÓÐADC²Ù×÷ʱ£¬Ìø¿ª±ÜÃâ³åÍ» + if(B_Adc_Curr) + { + Channel_Adc = 0x02; //ADCͨµÀÇл»Îª¼ì²â¹¤×÷µçÁ÷ + } + else + { + Channel_Adc = 0x01; //ADCͨµÀÇл»Îª¼ì²âÊеçµçѹ + } + + B_GetAD_MaxMin = 0; + B_GetAD_AllSum = 1; //ÇóAD×ܺÍÖµ + + Delay_Adc = 2; + Flag1_Adc = 0; + B_Adc_On = 1; + } + + B_Adc_Curr = 0; + B_Adc_Vol = 0; + } + } + //--------------------------------------------------------------------- + if(B_Adc_On) + { + if(Delay_Adc) + { //ADCÑÓʱ + if(--Delay_Adc) + { + Check_AD_Start(); //ÌáǰÆô¶¯£¬Îȶ¨ADCÄ£¿é + } + else + { + Flag1_Adc &= 0x01; + + AdcCount[0] = 0; + AdcCount[1] = 0; + AdcCount[2] = 0; + + AdcData[0] = 0; + AdcData[1] = 0; + AdcData[2] = 0; + + Check_AD_Start(); //ADCÆô¶¯ + } + } + else + { //ADC¿ªÆô + if(B_GetAD_AllSum) + { //ÇóAD×ܺÍÖµ + if(B_Zero_60Hz) + { + i = 8333/C_TimeUS_Int; //8.333ms + } + else + { + i = 10000/C_TimeUS_Int; //10ms + } + + if(++AdcCount[2] >= i) + { + AdcCount[2] = 0; + ADAUTO_SUM = 0; //½ûÖ¹ADC½á¹û×Ô¶¯ÀÛ¼Ó£¬ÀÛ¼Ó½á¹û±£³Ö + + AdcCount[0] = ADCCNTL; + AdcCount[1] = ADCCNTH; + + AdcData[0] = ADCSUM0; + AdcData[1] = ADCSUM1; + AdcData[2] = ADCSUM2; + + Check_AD_Ok(); + } + } + else if(B_GetAD_MaxMin) + { //ÇóAD×î´ó×îСֵ + if(GODONE) + { + Check_AD_Error(); //ÈôûÓÐÍê³É±êÖ¾Ôò±íʾ´íÎó£¬ÖØÐÂÉèÖÃADC + } + else + { + i = (((unsigned int)ADRESH << 8) + ADRESL) >> 2; //»ñµÃ8bit-ADC½á¹û + + if(0 == AdcCount[0]) + { + AdcData[1] = 0x00; //ADC×î´óÖµ + AdcData[0] = 0xFF; //ADC×îСֵ + } + if(i > AdcData[1]) + { + AdcData[1] = i; //¸üÐÂADC×î´óÖµ + } + if(i < AdcData[0]) + { + AdcData[0] = i; //¸üÐÂADC×îСֵ + } + + if(B_Zero_60Hz) + { + i = (8333+2000)/C_TimeUS_Int; //8.333ms+2ms + } + else + { + i = (10000+2000)/C_TimeUS_Int; //10ms+2ms + } + + if(++AdcCount[0] >= i) + { + AdcCount[0] = 0; + Check_AD_Ok(); //ADCÍê³É + } + else + { + Check_AD_Start(); //ADCÆô¶¯ + } + } + } + else + { //ÇóADƽ¾ùÖµ + if(ADCSUM_OV) + { + Check_AD_Error(); //ADC´íÎó + } + else + { + if(ADIF) + { + ADIF = 0; //ADC×Ô¶¯ÀÛ¼ÓÍê³É + + AdcData[0] = ADCSUM1; + AdcData[1] = ADCSUM2; + + Check_AD_Ok(); //ADCÍê³É + } + } + } + } + } + else + { + Check_AD_End(); + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºAdc_Channel_Set +* º¯Êý¹¦ÄÜ£ºADCͨµÀÉèÖà +* Èë¿Ú²ÎÊý£ºi = ADCͨµÀ£¨0=ÆäËû¡¢1=Êеçµçѹ¡¢2=¹¤×÷µçÁ÷£© +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Adc_Channel_Set(unsigned char i) +{ + Delay_AdcNoOk = 0; + + if(i & 0x03) + { //¼ì²âÊеçµçѹ»ò¹¤×÷µçÁ÷µÄAD + if(B_Zero_No) + { //ÎÞ¹ýÁã + if(i & 0x01) + { + Channel_Adc = 0x01; //ADCͨµÀÇл»Îª¼ì²âÊеçµçѹ + } + else + { + Channel_Adc = 0x02; //ADCͨµÀÇл»Îª¼ì²â¹¤×÷µçÁ÷ + } + + B_GetAD_MaxMin = 0; + B_GetAD_AllSum = 1; //ÇóAD×ܺÍÖµ + + Delay_Adc = 2; + Flag1_Adc = 0; + B_Adc_On = 1; + } + else + { //ÓйýÁã + Flag1_Adc = 0; + + if(!B_Adc_Auto) //·ÇADC×Ô¶¯¿ªÆô + { + if(i & 0x01) + { + B_Adc_Vol = 1; //¼ì²âÊеçµçѹAD + B_Adc_Curr = 0; + } + else + { + B_Adc_Vol = 0; + B_Adc_Curr = 1; //¼ì²â¹¤×÷µçÁ÷AD + } + } + } + } + else + { //¼ì²âÆäËûµÄAD + B_GetAD_MaxMin = 0; + B_GetAD_AllSum = 0; + + Delay_Adc = 2; + Flag1_Adc = 0; + B_Adc_On = 1; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºGet_AdResult +* º¯Êý¹¦ÄÜ£º»ñÈ¡AD½á¹û +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Get_AdResult() +{ + volatile unsigned int data; + volatile unsigned long temp; + //--------------------------------------------------------------------- + if(B_Adc_Ok) + { //ADCÍê³É£¬½øÐÐÊý¾Ý´¦Àí + if(B_GetAD_AllSum) + { //ÇóAD×ܺÍÖµ£¨´¦Àí½á¹ûΪ9bit£© + temp = (unsigned long)AdcData[2] << 16; + temp += (unsigned long)AdcData[1] << 8; + temp += AdcData[0]; + + data = (unsigned int)AdcCount[1] << 8; + data += AdcCount[0]; + + temp /= data; + data = temp >> 1; + } + else if(B_GetAD_MaxMin) + { //ÇóAD×î´ó×îСֵ£¨´¦Àí½á¹ûΪ8bit£© + data = ((unsigned int)AdcData[1] + AdcData[0]) >> 1; + } + else + { //ÇóADƽ¾ùÖµ£¨´¦Àí½á¹ûΪ9bit£© + data = (((unsigned int)AdcData[1] << 8) + AdcData[0]) >> 2; + } + + if(B_Channel_Vol) + { //¼ì²âÊеçµçѹADÖµ + if(AD_Volatage) + { + temp = data + AD_Volatage; + data = temp >> 1; + } + + AD_Volatage = data; + B_VolAdc_Once = 1; //ÊеçµçѹADCÍê³ÉÒ»´Î + } + else if(B_Channel_Curr) + { //¼ì²â¹¤×÷µçÁ÷ADÖµ + if(!B_CurrAdc_Fst) + { + if(data >> 8) + { + AD_Current_Fst = 0xFF; + } + else + { + AD_Current_Fst = data; //¹¤×÷µçÁ÷AD³õÖµ + } + + B_CurrAdc_Fst = 1; //¹¤×÷µçÁ÷AD³õÖµ¼ì²âÍê³É + } + else + { + if(data >= AD_Current_Fst) + { //¼õÈ¥¹¤×÷µçÁ÷AD³õÖµ + data -= AD_Current_Fst; + } + else + { + data = 0; + } + + if(AD_Current) + { + temp = data + AD_Current; + data = temp >> 1; + } + + AD_Current = data; + B_CurrAdc_Once = 1; //¹¤×÷µçÁ÷ADCÍê³ÉÒ»´Î + } + } + else if(B_Channel_Igbt) + { //¼ì²âIGBTζÈADÖµ + data >>= 1; //9bitתΪ8bit + + #if _UP_NTC_IGBT_ + AD_TmprIgbt = data; //NTCÉÏÀ­£¬AD½á¹û²»È¡·´ + #else + AD_TmprIgbt = ~data; //NTCÏÂÀ­£¬AD½á¹ûÈ¡·´ + #endif + } + else if(B_Channel_Pan) + { //¼ì²â¹øµ×ζÈADÖµ + data >>= 1; //9bitתΪ8bit + + #if _UP_NTC_PAN_ + AD_TmprPan = data; //NTCÉÏÀ­£¬AD½á¹û²»È¡·´ + #else + AD_TmprPan = ~data; //NTCÏÂÀ­£¬AD½á¹ûÈ¡·´ + #endif + } + else if(B_Channel_Top) + { //¼ì²â¶¥²¿Î¶ÈADÖµ + data >>= 1; //9bitתΪ8bit + + #if _UP_NTC_TOP_ + AD_TmprTop = data; //NTCÉÏÀ­£¬AD½á¹û²»È¡·´ + #else + AD_TmprTop = ~data; //NTCÏÂÀ­£¬AD½á¹ûÈ¡·´ + #endif + } + else if(B_Channel_VRef) + { //¼ì²âÄÚ²¿»ù×¼µçѹADÖµ + AD_VRef = data; + } + else if(B_Channel_Gnd) + { //¼ì²âGND-ADÖµ + data >>= 1; //9bitתΪ8bit + AD_Gnd = data; + } + else if(B_Channel_Vdd) + { //¼ì²âVDD-ADÖµ + data >>= 1; //9bitתΪ8bit + AD_Vdd = data; + } + } + //--------------------------------------------------------------------- + if(!B_Adc_On && !B_CurrAdc_Fst) + { //¹¤×÷µçÁ÷AD³õÖµ¼ì²âδÍê³É + Adc_Channel_Set(2); //¼ì²â¹¤×÷µçÁ÷AD + } + else if(B_Adc_Ok || B_Adc_Error || (++Delay_AdcNoOk >= 1000/C_TimeMS_Main)) + { //ADCÍê³É¡¢´íÎó¡¢³¬Ê±Î´Íê³É£¨1Ã룩 + if(!Channel_Adc || B_Channel_End) + { + Channel_Adc = 0x01; //ADCͨµÀÇл»Îª¼ì²âÊеçµçѹ + } + else + { + Channel_Adc <<= 1; //ADCͨµÀÇл» + } + + if(B_Channel_Vol) + { + Adc_Channel_Set(1); //¼ì²âÊеçµçѹAD + } + else if(B_Channel_Curr) + { + Adc_Channel_Set(2); //¼ì²â¹¤×÷µçÁ÷AD + } + else + { + Adc_Channel_Set(0); //¼ì²âÆäËûAD + } + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDelay_CheckError +* º¯Êý¹¦ÄÜ£ºÓ²¼þ¹ÊÕϼì²âÑÓʱ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Delay_CheckError() +{ + static unsigned int Delay_CheckError; + + if(!B_Heat_En) + { + B_Dly_CheckErr = 0; + Delay_CheckError = 0; + Min_CheckError = 0; + } + else + { + if(++Delay_CheckError >= 1000/C_TimeMS_Main*60) //1min + { + Delay_CheckError = 0; + Min_CheckError++; + } + + if(Min_CheckError >= 3) //3min + { + B_Dly_CheckErr = 1; //Ó²¼þ¹ÊÕϼì²âÑÓʱÍê³É + } + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_IgbtNtcOpen +* º¯Êý¹¦ÄÜ£ºIGBT-NTC¿ªÂ·¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_IgbtNtcOpen() +{ + static unsigned char CounterL,CounterH; + + if(AD_TmprIgbt >= C_AD_Igbt_OpenOut) + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + B_EIgbtOpen = 0; + } + } + else if(!B_Dly_CheckErr) //¹ÊÕϼì²âÑÓʱÍê³É£¬²Å¼ì²â¿ªÂ· + { + CounterL = 0; + CounterH = 0; + } + else if(AD_TmprIgbt <= C_AD_Igbt_OpenIn) + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_EIgbtOpen = 1; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_IgbtNtcClose +* º¯Êý¹¦ÄÜ£ºIGBT-NTC¶Ì·¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_IgbtNtcClose() +{ + static unsigned char CounterL,CounterH; + + if(AD_TmprIgbt >= C_AD_Igbt_CloseIn) + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + + if(B_Heat_En) + { + B_EIgbtClose = 1; + } + } + } + else if(AD_TmprIgbt <= C_AD_Igbt_CloseOut) + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_EIgbtClose = 0; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_IgbtNtcHigh +* º¯Êý¹¦ÄÜ£ºIGBT-NTC¸ßμì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óã¬Èç¹û¸ßξͽµ¹¦ÂÊ +**************************************************************************/ +void Check_IgbtNtcHigh() +{ + static unsigned char CounterL,CounterH; + static unsigned int Delay_IgbtDown; + //--------------------------------------------------------------------- + if(!B_Heat_En) + { + CounterL = 0; + CounterH = 0; + B_IgbtDown = 0; + } + else if(AD_TmprIgbt >= Buf_AD_Igbt_HighIn) + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + B_IgbtDown = 1; //IGBT¸ßνµ¹¦ÂÊ + } + } + else if(AD_TmprIgbt <= Buf_AD_Igbt_HighOut) + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_IgbtDown = 0; //IGBT¸ßνµ¹¦Âʻָ´ + } + } + else + { + CounterL = 0; + CounterH = 0; + } + //--------------------------------------------------------------------- + if(B_IgbtDown) + { + if(Delay_IgbtDown) + { + Delay_IgbtDown--; //¹¦ÂÊϽµ¼ÆÊ± + } + else + { + Delay_IgbtDown = 60000/C_TimeMS_Main; //1min + + if(Count_IgbtDown < 10) //×î´ó10´Î + { + Count_IgbtDown++; //¹¦ÂÊϽµ´ÎÊý+1 + } + } + } + else + { + Delay_IgbtDown = 0; + Count_IgbtDown = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_IgbtNtcOver +* º¯Êý¹¦ÄÜ£ºIGBT-NTC³¬Î¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óã¬Èç¹û¸ÉÉÕ¾ÍÍ£Ö¹¹¤×÷ +**************************************************************************/ +void Check_IgbtNtcOver() +{ + static unsigned char CounterL,CounterH; + + if(AD_TmprIgbt >= Buf_AD_Igbt_OverIn) + { + CounterL = 0; + + if(CounterH & 0x80) + { + if(B_Heat_En) + { + CounterH = 0; + B_EIgbtOver = 1; + } + } + else + { + CounterH++; + } + } + else if(AD_TmprIgbt <= Buf_AD_Igbt_OverOut) + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_EIgbtOver = 0; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_TopNtcOpen +* º¯Êý¹¦ÄÜ£º¶¥²¿NTC¿ªÂ·¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +#ifdef _pAD_TOP +void Check_TopNtcOpen() +{ + static unsigned char CounterL,CounterH; + + if(AD_TmprTop >= C_AD_Top_OpenOut) + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + B_ETopOpen = 0; + } + } + else if(!B_Dly_CheckErr) //¹ÊÕϼì²âÑÓʱÍê³É£¬²Å¼ì²â¿ªÂ· + { + CounterL = 0; + CounterH = 0; + } + else if(AD_TmprTop <= C_AD_Top_OpenIn) + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_ETopOpen = 1; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} +#endif + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_TopNtcClose +* º¯Êý¹¦ÄÜ£º¶¥²¿NTC¶Ì·¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +#ifdef _pAD_TOP +void Check_TopNtcClose() +{ + static unsigned char CounterL,CounterH; + + if(AD_TmprTop >= C_AD_Top_CloseIn) + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + + if(B_Heat_En) + { + B_ETopClose = 1; + } + } + } + else if(AD_TmprTop <= C_AD_Top_CloseOut) + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_ETopClose = 0; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} +#endif + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_PanNtcOpen +* º¯Êý¹¦ÄÜ£º¹øµ×NTC¿ªÂ·¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_PanNtcOpen() +{ + static unsigned char CounterL,CounterH; + + if(AD_TmprPan >= C_AD_Pan_OpenOut) + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + B_EPanOpen = 0; + } + } + else if(!B_Dly_CheckErr) //¹ÊÕϼì²âÑÓʱÍê³É£¬²Å¼ì²â¿ªÂ· + { + CounterL = 0; + CounterH = 0; + } + else if(AD_TmprPan <= C_AD_Pan_OpenIn) + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_EPanOpen = 1; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_PanNtcClose +* º¯Êý¹¦ÄÜ£º¹øµ×NTC¶Ì·¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_PanNtcClose() +{ + static unsigned char CounterL,CounterH; + + if(AD_TmprPan >= C_AD_Pan_CloseIn) + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + + if(B_Heat_En) + { + B_EPanClose = 1; + } + } + } + else if(AD_TmprPan <= C_AD_Pan_CloseOut) + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_EPanClose = 0; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_PanNtcOver +* º¯Êý¹¦ÄÜ£º¹øµ×NTC³¬Î¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_PanNtcOver() +{ + static unsigned char CounterL,CounterH; + + if(B_PanOver_Dis) + { + CounterL = 0; + CounterH = 0; + + B_EPanOver = 0; + } + else if(AD_TmprPan >= Buf_AD_Pan_OverIn) + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + + if(B_Heat_En) + { + B_EPanOver = 1; + } + } + } + else if(AD_TmprPan <= Buf_AD_Pan_OverOut) + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_EPanOver = 0; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_VolTooHigh +* º¯Êý¹¦ÄÜ£ºÊеçµçѹ¹ý¸ß¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_VolTooHigh() +{ + static unsigned char CounterL,CounterH; + + if(Vol.flo.integer <= Buf_Vol_HighErr_Out) //¸ßѹ»Ö¸´µçѹµã + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + B_EVolHigh = 0; + } + } + else if(Vol.flo.integer >= Buf_Vol_HighErr_In) //¸ßѹÅжϵçѹµã + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + + if(B_Heat_En) + { + B_EVolHigh = 1; + } + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_VolTooLow +* º¯Êý¹¦ÄÜ£ºÊеçµçѹ¹ýµÍ¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_VolTooLow() +{ + static unsigned char CounterL,CounterH; + + if(Vol.flo.integer >= Buf_Vol_LowErr_Out) //µÍѹ»Ö¸´µçѹµã + { + CounterL = 0; + + if(++CounterH & 0x80) + { + CounterH = 0; + B_EVolLow = 0; + } + } + else if(Vol.flo.integer <= Buf_Vol_LowErr_In) //µÍѹÅжϵçѹµã + { + CounterH = 0; + + if(++CounterL & 0x80) + { + CounterL = 0; + + if(B_Heat_En) + { + B_EVolLow = 1; + } + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_VolHigh +* º¯Êý¹¦ÄÜ£ºÊеç¸ßÑ¹Çø¼äÅÐ¶Ï +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_VolHigh() +{ + static unsigned char CounterL,CounterH; + + if(Vol.flo.integer >= (C_Vol_High - C_Vol_Comp)) + { + CounterL = 0; + + if(++CounterH & 0x04) + { + CounterH = 0; + B_Vol_High = 1; + } + } + else if(Vol.flo.integer <= (C_Vol_High - C_Vol_Comp - 5)) + { + CounterH = 0; + + if(++CounterL & 0x04) + { + CounterL = 0; + B_Vol_High = 0; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_VolMid +* º¯Êý¹¦ÄÜ£ºÊеçÖÐÑ¹Çø¼äÅÐ¶Ï +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_VolMid() +{ + static unsigned char CounterL,CounterH; + + if(Vol.flo.integer >= (C_Vol_Mid - C_Vol_Comp)) + { + CounterL = 0; + + if(++CounterH & 0x04) + { + CounterH = 0; + B_Vol_Mid = 0; + } + } + else if(Vol.flo.integer <= (C_Vol_Mid - C_Vol_Comp - 3)) + { + CounterH = 0; + + if(++CounterL & 0x04) + { + CounterL = 0; + B_Vol_Mid = 1; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_VolLow +* º¯Êý¹¦ÄÜ£ºÊеçµÍÑ¹Çø¼äÅÐ¶Ï +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_VolLow() +{ + static unsigned char CounterL,CounterH; + + if(Vol.flo.integer >= (C_Vol_Low - C_Vol_Comp)) + { + CounterL = 0; + + if(++CounterH & 0x04) + { + CounterH = 0; + B_Vol_Low = 0; + } + } + else if(Vol.flo.integer <= (C_Vol_Low - C_Vol_Comp - 3)) + { + CounterH = 0; + + if(++CounterL & 0x04) + { + CounterL = 0; + B_Vol_Low = 1; + } + } + else + { + CounterL = 0; + CounterH = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCalc_Volatage +* º¯Êý¹¦ÄÜ£º¼ÆËãÊеçµçѹ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Ó㬼ÆËã½á¹û·ÅÓÚVolatage½á¹¹ÖÐ +**************************************************************************/ +void Calc_Volatage() +{ + static unsigned char CounterL,CounterH; + + volatile VolElecType NowVol; + //--------------------------------------------------------------------- + if(AD_Volatage > C_AD_VolMax) + { + NowVol.flo.integer = C_Vol_Max - C_Vol_Comp; + NowVol.flo.radix = 0; + } + else if(AD_Volatage < C_AD_VolMin) + { + NowVol.all = 0; + } + else + { + NowVol.all = C_Slope_Volatage * (AD_Volatage - C_AD_VolMin); + } + //--------------------------------------------------------------------- + if(Vol.all) + { + if(Vol.flo.integer > NowVol.flo.integer) + { + CounterL = 0; + + if((Vol.flo.integer - NowVol.flo.integer) >= 5) + { + CounterH = 0; + Vol.all = NowVol.all; + } + else + { + if(++CounterH & 0x02) + { + CounterH = 0; + Vol.flo.integer--; + Vol.flo.radix = NowVol.flo.radix; + } + } + } + else if(Vol.flo.integer < NowVol.flo.integer) + { + CounterH = 0; + + if((NowVol.flo.integer - Vol.flo.integer) >= 5) + { + CounterL = 0; + Vol.all = NowVol.all; + } + else + { + if(++CounterL & 0x02) + { + CounterL = 0; + Vol.flo.integer++; + Vol.flo.radix = NowVol.flo.radix; + } + } + } + else + { + CounterL = 0; + CounterH = 0; + } + } + else + { + Vol.all = NowVol.all; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_TopNtcFail +* º¯Êý¹¦ÄÜ£º¶¥²¿NTCʧЧ¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +#ifdef _pAD_TOP +void Check_TopNtcFail() +{ + +} +#endif + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCheck_PanNtcFail +* º¯Êý¹¦ÄÜ£º¹øµ×NTCʧЧ¼ì²â +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Check_PanNtcFail() +{ + static unsigned char CounterL,CounterH; + + if(B_PanFail_Dis) + { + CounterL = 0; + CounterH = 0; + + B_EPanFail = 0; + } + else + { + + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_Adc +* º¯Êý¹¦ÄÜ£ºADC´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖ÷Ñ­»·µ÷Óà +**************************************************************************/ +void Deal_Adc() +{ + Get_AdResult(); //»ñÈ¡AD½á¹û + Delay_CheckError(); //Ó²¼þ¹ÊÕϼì²âÑÓʱ + + #if _MODE_IHDEBUG_ + if(!B_ErrorCheck_Dis) //½ûÖ¹Ó²¼þ¹ÊÕϼì²â + #endif + { + Check_IgbtNtcOpen(); //IGBT-NTC¿ªÂ·¼ì²â + Check_IgbtNtcClose(); //IGBT-NTC¶Ì·¼ì²â + Check_IgbtNtcOver(); //IGBT-NTC³¬Î¼ì²â + Check_IgbtNtcHigh(); //IGBT-NTC¸ßμì²â + + #ifdef _pAD_TOP + Check_TopNtcOpen(); //¶¥²¿NTC¿ªÂ·¼ì²â + Check_TopNtcClose(); //¶¥²¿NTC¶Ì·¼ì²â + Check_TopNtcFail(); //¶¥²¿NTCʧЧ¼ì²â + #endif + + Check_PanNtcOpen(); //¹øµ×NTC¿ªÂ·¼ì²â + Check_PanNtcClose(); //¹øµ×NTC¶Ì·¼ì²â + Check_PanNtcOver(); //¹øµ×NTC³¬Î¼ì²â + Check_PanNtcFail(); //¹øµ×NTCʧЧ¼ì²â + + Check_VolTooHigh(); //Êеçµçѹ¹ý¸ß¼ì²â + Check_VolTooLow(); //Êеçµçѹ¹ýµÍ¼ì²â + } + #if _MODE_IHDEBUG_ + else + { + Flag1_Error = 0; + Flag2_Error = 0; + } + #endif + + if(B_VolAdc_Once) + { + B_VolAdc_Once = 0; //ÊеçµçѹADCÍê³ÉÒ»´Î£¬½øÈë´¦ÀíÒ»´Î + + Calc_Volatage(); //¼ÆËãÊеçµçѹ + Check_VolHigh(); //Êеç¸ßÑ¹Çø¼ä¼ì²â + Check_VolMid(); //ÊеçÖÐÑ¹Çø¼ä¼ì²â + Check_VolLow(); //ÊеçµÍÑ¹Çø¼ä¼ì²â + } +} + + \ No newline at end of file diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Communicate.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Communicate.c new file mode 100644 index 0000000..fae9831 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Communicate.c @@ -0,0 +1,498 @@ +/************************************************************************** +**************************************************************************/ +#include "Define_Global.h" +#if !_MODE_IHDEBUG_ && !_MODE_COMM_NO_ + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCommunicate +* º¯Êý¹¦ÄÜ£ºÐ¾Æ¬Í¨ÐÅ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖжϵ÷Óà +**************************************************************************/ +void Communicate() +{ + //ÊÕÂëÏà¹Ø¼Ä´æÆ÷¶¨Òå + static unsigned char TimeRece_High,TimeRece_Low,CountRece; + static CommType DataRece; + static bit B_Rece_Old; + + //·¢ÂëÏà¹Ø¼Ä´æÆ÷¶¨Òå + static unsigned char TimeSend,CountSend; + static CommType DataSend; + static bit B_Send_Start,B_Send_Bak; + + volatile unsigned char i; + + /********************************************************************** + ÊÕÂë + **********************************************************************/ + if(!B_Comm_No) //ÎÞͨÐÅ£¬²»ÊÕÂë + { + if(!Pin_CommIn && !Pin_CommIn && !Pin_CommIn && !Pin_CommIn && !Pin_CommIn) + { + TimeRece_Low++; //µÍµçƽ¼ÆÊ± + + if(!B_Rece_Old) + { + TimeRece_High = 0; + } + else + { //ϽµÑؽÓÊÕÊý¾Ý + B_Rece_Old = 0; //ÊÕÂëµçƽ¾ÉÖµ£¨µÍ£© + + if(1 == TimeRece_Low) + { //µÚÒ»´ÎϽµÑØ + CountRece = 32; + } + else + { //·ÇµÚÒ»´ÎϽµÑØ + DataRece.all <<= 1; + + if(TimeRece_Low >= TimeRece_High) + { //µÍµçƽ>¸ßµçƽΪ1£¬·ñÔòΪ0 + DataRece.one[0] |= 0x01; + } + + TimeRece_High = 0; + TimeRece_Low = 1; + + if(0 == --CountRece) + { + B_Deal_DataRece = 1; //ÊÕÂëÊý¾Ý´¦Àí + + Buf_DataRece[3] = DataRece.one[3]; + Buf_DataRece[2] = DataRece.one[2]; + Buf_DataRece[1] = DataRece.one[1]; + Buf_DataRece[0] = DataRece.one[0]; + } + } + } + } + else if(Pin_CommIn && Pin_CommIn && Pin_CommIn && Pin_CommIn && Pin_CommIn) + { + B_Rece_Old = 1; //ÊÕÂëµçƽ¾ÉÖµ£¨¸ß£© + + if(TimeRece_High >= 5000/C_TimeUS_Int) //5ms + { //³¤Ê±¼ä¸ßµçƽ£¬ÖØÐÂÊÕÂë + TimeRece_Low = 0; + CountRece = 32; + } + else + { + TimeRece_High++; //¸ßµçƽ¼ÆÊ± + } + } + } + + /********************************************************************** + ·¢Âë + **********************************************************************/ + if(B_Comm_Have) //ÓÐͨÐÅ£¬²Å·¢Âë + { + if(B_Send_Start) + { + if(0 == --TimeSend) + { //ÒÑ·¢ÍêһλÂë + Pin_CommOut = 0; //Êä³öµÍµçƽ + + if(0 == CountSend) + { + B_Send_Start = 0; //·¢ÂëÍê³É + TimeSend = 0; + } + else + { //·¢ËÍÏÂһλÊý¾Ý + CountSend--; + TimeSend = 2000/C_TimeUS_Int; //2ms + + if(DataSend.one[3] & 0x80) + { + B_Send_Bak = 1; //·¢1 + } + else + { + B_Send_Bak = 0; //·¢0 + } + + DataSend.all <<= 1; + } + } + else + { //»¹Ã»Óз¢ÍêһλÂë + if(B_Send_Bak) + { + i = 500/C_TimeUS_Int; //0.5ms + } + else + { + i = 1500/C_TimeUS_Int; //1.5ms + } + + if(TimeSend > i) + { + Pin_CommOut = 0; //Êä³öµÍµçƽ + } + else + { + Pin_CommOut = 1; //Êä³ö¸ßµçƽ + } + } + } + else + { + if(TimeSend >= 10000/C_TimeUS_Int) //10ms + { + B_Send_Start = 1; //·¢Â뿪ʼ + + TimeSend = 1; + CountSend = 32; //·¢ÂëÊý¾ÝλÊý£º32bit + + DataSend.one[3] = Buf_DataSend[3]; + DataSend.one[2] = Buf_DataSend[2]; + DataSend.one[1] = Buf_DataSend[1]; + DataSend.one[0] = Buf_DataSend[0]; + + B_Refrsh_DataSend = 1; //·¢ÂëÊý¾ÝˢР+ } + else + { + TimeSend++; + } + + if(TimeSend >= 500/C_TimeUS_Int) //0.5ms + { + Pin_CommOut = 1; //Êä³ö¸ßµçƽ + } + else + { + Pin_CommOut = 0; //Êä³öµÍµçƽ + } + } + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_CommData +* º¯Êý¹¦ÄÜ£ºÍ¨ÐÅÊý¾Ý´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖ÷Ñ­»·µ÷Óà +**************************************************************************/ +void Deal_CommData() +{ + static unsigned int Time_NoComm; + static unsigned char Num_CommSend; + + volatile unsigned char i,j; + + /********************************************************************** + ·¢ÂëÊý¾Ý´¦Àí + **********************************************************************/ + if(B_Comm_Have && B_Refrsh_DataSend) + { //·¢ÂëÊý¾ÝˢР+ i = 0; + if(B_Pan_Error) SetBit(i,0); //¼ì¹ø¹ÊÕÏ£¨Î´½ÓÏßÅÌ£© + if(B_Pan_No) SetBit(i,1); //ÎÞ¹ø + if(B_Pan_Have) SetBit(i,2); //Óйø + if(B_Pan_Steel) SetBit(i,3); //¸Ö¹ø + if(B_Pan_Iron) SetBit(i,4); //Ìú¹ø + if(B_Zero_No) SetBit(i,5); //ÎÞ¹ýÁã + if(B_Zero_60Hz) SetBit(i,6); //¹ýÁãÆµÂÊ = 60Hz + if(B_Protect_BackPress) SetBit(i,7); //¹ýѹ±£»¤ + + Status1_Work = i; //ˢй¤×÷״̬1 + //----------------------------------------------------------------- + i = 0; + if(B_Protect_Stop) SetBit(i,0); //±£»¤Í£Ö¹¼ÓÈÈ + if(B_PPGStop_CheckPan) SetBit(i,1); //¼ÓÈÈÔÝÍ£µ«¼ì¹ø + if(B_PPGStop_NoCheck) SetBit(i,2); //¼ÓÈÈÔÝÍ£²»¼ì¹ø + if(Status_PPGDP & 0x02) SetBit(i,3); //¶¶Æµ¿ªÆô + if(Status_LxLow & 0x02) SetBit(i,4); //Á¬ÐøµÍ¹¦ÂÊ¿ªÆô + + Status2_Work = i; //ˢй¤×÷״̬2 + //----------------------------------------------------------------- + switch(Num_CommSend) + { + case 0: + { + Buf_DataSend[3] = 0xA0; //ÃüÁî×Ö + Buf_DataSend[2] = Status1_Work; //¹¤×÷״̬1 + Buf_DataSend[1] = Status2_Work; //¹¤×÷״̬2 + } + break; + case 1: + { + Buf_DataSend[3] = 0xA1; //ÃüÁî×Ö + Buf_DataSend[2] = Flag1_Error; //Ó²¼þ¹ÊÕϱêÖ¾1 + Buf_DataSend[1] = Flag2_Error; //Ó²¼þ¹ÊÕϱêÖ¾2 + } + break; + case 2: + { + Buf_DataSend[3] = 0xA2; //ÃüÁî×Ö + Buf_DataSend[2] = Status_PPGStop; //±£»¤×´Ì¬ + + i = (AD_Volatage >> 4) & 0xF0; //ÊеçµçѹAD£¨¸ß4룩 + i |= (AD_Current >> 8) & 0x0F; //¹¤×÷µçÁ÷AD£¨¸ß4룩 + Buf_DataSend[1] = i; + } + break; + case 3: + { + Buf_DataSend[3] = 0xA3; //ÃüÁî×Ö + Buf_DataSend[2] = AD_Volatage; //ÊеçµçѹAD£¨µÍ8룩 + Buf_DataSend[1] = AD_Current; //¹¤×÷µçÁ÷AD£¨µÍ8룩 + } + break; + case 4: + { + Buf_DataSend[3] = 0xA4; //ÃüÁî×Ö + Buf_DataSend[2] = AD_TmprPan; //¹øµ×ζÈAD + Buf_DataSend[1] = AD_TmprIgbt; //IGBTζÈAD + } + break; + case 5: + { + Buf_DataSend[3] = 0xA5; //ÃüÁî×Ö + Buf_DataSend[2] = AD_TmprTop; //¶¥²¿Î¶ÈAD + Buf_DataSend[1] = AD_VRef; //ÄÚ²¿»ù×¼µçѹ£¨1.2V£©AD + } + break; + case 6: + { + Buf_DataSend[3] = 0xA6; //ÃüÁî×Ö + Buf_DataSend[2] = Vol.flo.integer; //Êеçµçѹ - 80V + Buf_DataSend[1] = Count_Syn; //¼ì¹øÕñµ´¸öÊý + } + break; + case 7: + { + Buf_DataSend[3] = 0xA7; //ÃüÁî×Ö + Buf_DataSend[2] = Time_Syn >> 8; //¼ì¹øÕñµ´Âö¿í£¨¸ß8룩 + Buf_DataSend[1] = Time_Syn; //¼ì¹øÕñµ´Âö¿í£¨µÍ8룩 + } + break; + case 8: + { + Buf_DataSend[3] = 0xA8; //ÃüÁî×Ö + Buf_DataSend[2] = PowerReal >> 8; //ʵ¼ÊÊä³ö¹¦ÂÊ£¨¸ß8룩 + Buf_DataSend[1] = PowerReal; //ʵ¼ÊÊä³ö¹¦ÂÊ£¨µÍ8룩 + } + break; + case 9: + { + Buf_DataSend[3] = 0xA9; //ÃüÁî×Ö + Buf_DataSend[2] = Buf_PPGTMR >> 8; //µ±Ç°PPGµ¼Í¨Öµ£¨¸ß8룩 + Buf_DataSend[1] = Buf_PPGTMR; //µ±Ç°PPGµ¼Í¨Öµ£¨µÍ8룩 + } + break; + case 10: + { + Buf_DataSend[3] = 0xAA; //ÃüÁî×Ö + Buf_DataSend[2] = Count_BackPress >> 8; //1¼¶¹ýѹ±£»¤¼ÆÊý£¨¸ß8룩 + Buf_DataSend[1] = Count_BackPress; //1¼¶¹ýѹ±£»¤¼ÆÊý£¨µÍ8룩 + } + break; + case 11: + { + Buf_DataSend[3] = 0xAB; //ÃüÁî×Ö + Buf_DataSend[2] = Count_IgbtProtect >> 8; //IGBTÓ²¼þ±£»¤¼ÆÊý£¨¸ß8룩 + Buf_DataSend[1] = Count_IgbtProtect; //IGBTÓ²¼þ±£»¤¼ÆÊý£¨µÍ8룩 + } + break; + case 12: + { + Buf_DataSend[3] = 0xAC; //ÃüÁî×Ö + Buf_DataSend[2] = Elec.flo.integer; //µçÁ¿¸ßλ + Buf_DataSend[1] = Elec.flo.radix; //µçÁ¿µÍλ + } + break; + default:break; + } + + i = (unsigned)Buf_DataSend[1] + Buf_DataSend[2] + Buf_DataSend[3]; + Buf_DataSend[0] = (unsigned)~i; //УÑéºÍ + //----------------------------------------------------------------- + B_Refrsh_DataSend = 0; //·¢ÂëÊý¾ÝË¢ÐÂÍê³É + + if(++Num_CommSend >= 13) //·¢ÂëÇл» + { + Num_CommSend = 0; + } + } + + /********************************************************************** + ÊÕÂëÊý¾Ý´¦Àí + **********************************************************************/ + if(!B_Comm_No && B_Deal_DataRece) + { + B_Deal_DataRece = 0; //ÊÕÂëÊý¾Ý´¦ÀíÍê³É + + i = (unsigned)Buf_DataRece[1] + Buf_DataRece[2] + Buf_DataRece[3]; + i = (unsigned)~i; + j = (unsigned)Buf_DataRece[3] & 0xF0; + + if((i == Buf_DataRece[0]) && ((0xB0 == j) || (0xD0 == j))) //Êý¾ÝУÑé + { + B_Comm_Have = 1; //ÓÐͨÐÅ + B_Comm_Error = 0; //ÇåͨÐŹÊÕϱêÖ¾ + Time_NoComm = 0; //ÇåÎÞͨÐżÆÊ± + + if(0xB0 == Buf_DataRece[3]) + { + Flag1_Work = Buf_DataRece[2]; //¹¤×÷±êÖ¾1 + Flag2_Work = Buf_DataRece[1]; //¹¤×÷±êÖ¾2 + } + else if(0xB1 == Buf_DataRece[3]) + { + PowerWork = Buf_DataRece[2]; //¼ÓÈȹ¦ÂÊÖµ + + } + else if(0xB2 == Buf_DataRece[3]) + { + Num_LxLowOn = Buf_DataRece[2]; //Á¬ÐøµÍ¹¦ÂÊ¿ª¸öÊý + Num_LxLowOff = Buf_DataRece[1]; //Á¬ÐøµÍ¹¦ÂʹظöÊý + } + else if(0xD0 == Buf_DataRece[3]) + { + i = (unsigned)~Buf_DataRece[1]; + if(Buf_DataRece[2] == i) + { + SlopeCurr_Adjust = Buf_DataRece[2]; //µçÁ÷бÂʵ÷ÕûÖµ + } + } + } + //----------------------------------------------------------------- + if(TestOne(Flag1_Work,0)) + { + B_Heat_En = 1; //¼ÓÈÈʹÄÜ + B_Fan_En = 1; //·çÉÈʹÄÜ + } + else + { + B_Heat_En = 0; //¼ÓÈÈ¹Ø±Õ + B_Fan_En = 0; //·çÉÈ¹Ø±Õ + } + + if(TestOne(Flag1_Work,1)) + { + B_Fan_En = 1; //·çÉÈʹÄÜ + } + else + { + B_Fan_En = 0; //·çÉÈ¹Ø±Õ + } + + if(TestOne(Flag1_Work,2)) + { + B_Buzz_En = 1; //·äÃùÆ÷ʹÄÜ + } + else + { + B_Buzz_En = 0; //·äÃùÆ÷¹Ø±Õ + } + + if(TestOne(Flag1_Work,3)) + { + if(!B_Buzz_Out) + { + Buzz_Short_One(); //·äÃùÆ÷¶ÌÃù1Éù£¨200ms£© + } + } + + if(TestOne(Flag1_Work,4)) + { + if(!B_Buzz_Out) + { + Buzz_Long_One(); //·äÃùÆ÷³¤Ãù1Éù£¨400ms£© + } + } + + if(TestOne(Flag1_Work,5)) + { + B_HeatStop_CheckPan = 1; //²»¼ÓÈȵ«¼ì¹ø + } + else + { + B_HeatStop_CheckPan = 0; + } + + if(TestOne(Flag1_Work,6)) + { + B_HeatStop_NoCheck = 1; //²»¼ÓÈȲ»¼ì¹ø + } + else + { + B_HeatStop_NoCheck = 0; + } + + if(TestOne(Flag1_Work,7)) + { + B_PPGDP_Dis = 1; //PPG¶¶Æµ½ûÖ¹ + } + else + { + B_PPGDP_Dis = 0; + } + //----------------------------------------------------------------- + if(TestOne(Flag2_Work,0)) + { + B_PanOver_Dis = 1; //¹øµ×NTC³¬ÎÂÅжϽûÖ¹ + } + else + { + B_PanOver_Dis = 0; + } + + if(TestOne(Flag2_Work,1)) + { + B_PanFail_Dis = 1; //¹øµ×NTCʧЧÅжϽûÖ¹ + } + else + { + B_PanFail_Dis = 0; + } + + if(TestOne(Flag2_Work,7)) + { + B_PPGDP_Can = 1; //PPG¶¶ÆµÇ¿ÖÆÊ¹ÄÜ + } + else + { + B_PPGDP_Can = 0; + } + } + + /********************************************************************** + ͨÐÅ״̬ȷÈÏ + **********************************************************************/ + if(B_Comm_Have) + { //ÒÑÈ·ÈÏÓÐͨÐÅ + if(++Time_NoComm > 2000/C_TimeMS_Main) //2s + { + Time_NoComm = 0; + + B_Comm_Error = 1; //ͨÐŹÊÕÏ + Buzz_Short_One(); //·äÃùÆ÷¶ÌÃù1Éù + } + } + else if(!B_Comm_No) + { //δȷÈÏÓÐÎÞͨÐÅ + if(++Time_NoComm > 250/C_TimeMS_Main) //250ms + { + Time_NoComm = 0; + B_Comm_No = 1; //ÎÞͨÐÅ + } + } + else + { //ÒÑÈ·ÈÏÎÞͨÐÅ + Time_NoComm = 0; + } +} + +/************************************************************************** +**************************************************************************/ +#endif + + \ No newline at end of file diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Communicate.h b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Communicate.h new file mode 100644 index 0000000..ba76a66 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Communicate.h @@ -0,0 +1,30 @@ +/************************************************************************** +**************************************************************************/ +#ifndef _COMMUNICATE_H_ +#define _COMMUNICATE_H_ +#if !_MODE_IHDEBUG_ && !_MODE_COMM_NO_ + +/************************************************************************** +--------------------------------- º¯ÊýÉùÃ÷ -------------------------------- +**************************************************************************/ +void Communicate(); +void Deal_CommData(); + +/************************************************************************** +--------------------------------- ±äÁ¿¶¨Òå -------------------------------- +**************************************************************************/ +volatile unsigned char Buf_DataSend[4]; +volatile unsigned char Buf_DataRece[4]; + +volatile unsigned char Flag1_Work,Flag2_Work; +volatile unsigned char Status1_Work,Status2_Work; + +volatile bit B_Deal_DataRece,B_Refrsh_DataSend; +#endif +//------------------------------------------------------------------------- +volatile bit B_Comm_No,B_Comm_Have; + +/************************************************************************** +**************************************************************************/ +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Communicate_Uart.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Communicate_Uart.c new file mode 100644 index 0000000..2d8bfc0 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Communicate_Uart.c @@ -0,0 +1,461 @@ +/************************************************************************** +**************************************************************************/ +#include "Define_Global.h" +#if !_MODE_IHDEBUG_ && !_MODE_COMM_NO_ + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCommunicate +* º¯Êý¹¦ÄÜ£ºÐ¾Æ¬Í¨Ñ¶ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖжϵ÷Óà +**************************************************************************/ +void Communicate() +{ + //ÊÕÂëÏà¹Ø¼Ä´æÆ÷¶¨Òå + static unsigned int CntReceNo; + static unsigned char CountRece; + static unsigned char DataRece[4]; + + //·¢ÂëÏà¹Ø¼Ä´æÆ÷¶¨Òå + static unsigned char TimeSend,CountSend; + static unsigned char DataSend[4]; + + /********************************************************************** + ÊÕÂë + **********************************************************************/ + if(!B_Comm_No) //ÎÞͨѶ£¬²»ÊÕÂë + { + if(RCIF) + { + if(FERR) + { + RCREG; //Ö¡´íÎó + } + else + { + CntReceNo = 0; + DataRece[CountRece] = RCREG; //½«½ÓÊÕ»º³åÇøÄÚÈݶÁ³ö + + if(++CountRece >= sizeof(DataRece)) //½ÓÊÕÍêÒ»Ö¡Êý¾Ý£¬´¦ÀíÊý¾Ý + { + CountRece = 0; + B_Deal_DataRece = 1; //ÊÕÂëÊý¾Ý´¦Àí + + Buf_DataRece[0] = DataRece[3]; + Buf_DataRece[1] = DataRece[2]; + Buf_DataRece[2] = DataRece[1]; + Buf_DataRece[3] = DataRece[0]; + } + + if(OERR) //Èç¹ûÓÐÒç³ö´íÎó + { + CREN = 0; //ÇåÁãCRENλ¿É½«OERRλÇåÁã + CREN = 1; //Ôٴν«CRENÖÃÒ»£¬ÒÔÔÊÐí¼ÌÐø½ÓÊÕ + } + } + } + + if(++CntReceNo >= 5000/C_TimeUS_Int) //5ms + { + CountRece = 0; + } + else if(CntReceNo >= 15000/C_TimeUS_Int) //15ms + { + CntReceNo = 0; + + CREN = 0; + SPBRG = 103; //ÉèÖò¨ÌØÂÊΪ9600bps£¬Îó²î0% + STOPBIT = 0; //ֹͣλΪ1bit + SYNC = 0; //0ΪÒ첽ģʽ£¬1Ϊͬ²½Ä£Ê½ + SCKP = 0; + //SPEN = 1; //ÔÊÐí´®¿Ú²Ù×÷ + RX9EN = 0; //0Ϊ8λ½ÓÊÕ£¬1Ϊ9λ½ÓÊÕ + CREN = 1; //0Ϊ½ûÖ¹½ÓÊÕ£¬1ΪʹÄܽÓÊÕ + + /*if(!SPEN) + { + SPEN = 1; + }*/ + } + } + + /********************************************************************** + ·¢Âë + **********************************************************************/ + if(B_Comm_Have) //ÓÐͨѶ£¬²Å·¢Âë + { + if(TXIF) + { + if(CountSend) + { + TXREG = DataSend[(unsigned)CountSend - 1]; + CountSend--; + } + } + + if(CountSend) + { + TimeSend = 0; + } + else if(++TimeSend >= 10000/C_TimeUS_Int) //10ms + { + TimeSend = 0; + CountSend = sizeof(DataSend); //·¢ÂëÊý¾Ý×Ö½ÚÊý + + DataSend[0] = Buf_DataSend[0]; + DataSend[1] = Buf_DataSend[1]; + DataSend[2] = Buf_DataSend[2]; + DataSend[3] = Buf_DataSend[3]; + + B_Refrsh_DataSend = 1; //·¢ÂëÊý¾ÝˢР+ } + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_CommData +* º¯Êý¹¦ÄÜ£ºÍ¨Ñ¶Êý¾Ý´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖ÷Ñ­»·µ÷Óà +**************************************************************************/ +void Deal_CommData() +{ + static unsigned int Time_NoComm; + static unsigned char Num_CommSend; + static bit B_Init_Uart; + + volatile unsigned char i,j; + + /********************************************************************** + UART³õʼ»¯ + **********************************************************************/ + if(!B_Init_Uart) + { + B_Init_Uart = 1; //UART³õʼ»¯Íê³É + + SPBRG = 103; //ÉèÖò¨ÌØÂÊΪ9600bps£¬Îó²î0% + STOPBIT =0; //ֹͣλΪ1bit + SYNC = 0; //0ΪÒ첽ģʽ£¬1Ϊͬ²½Ä£Ê½ + SCKP = 0; + SPEN = 1; //ÔÊÐí´®¿Ú²Ù×÷ + RX9EN = 0; //0Ϊ8λ½ÓÊÕ£¬1Ϊ9λ½ÓÊÕ + TX9EN = 0; //0Ϊ8λ·¢ËÍ£¬1Ϊ9λ·¢ËÍ + CREN = 1; //0Ϊ½ûÖ¹½ÓÊÕ£¬1ΪʹÄܽÓÊÕ + TXEN = 1; //0Ϊ½ûÖ¹·¢ËÍ£¬1ΪʹÄÜ·¢ËÍ + } + + /********************************************************************** + ·¢ÂëÊý¾Ý´¦Àí + **********************************************************************/ + if(B_Comm_Have && B_Refrsh_DataSend) + { //·¢ÂëÊý¾ÝˢР+ i = 0; + if(B_Pan_Error) SetBit(i,0); //¼ì¹ø¹ÊÕÏ£¨Î´½ÓÏßÅÌ£© + if(B_Pan_No) SetBit(i,1); //ÎÞ¹ø + if(B_Pan_Have) SetBit(i,2); //Óйø + if(B_Pan_Steel) SetBit(i,3); //¸Ö¹ø + if(B_Pan_Iron) SetBit(i,4); //Ìú¹ø + if(B_Zero_No) SetBit(i,5); //ÎÞ¹ýÁã + if(B_Zero_60Hz) SetBit(i,6); //¹ýÁãÆµÂÊ = 60Hz + if(B_Protect_BackPress) SetBit(i,7); //¹ýѹ±£»¤ + + Status1_Work = i; //ˢй¤×÷״̬1 + //----------------------------------------------------------------- + i = 0; + if(B_Protect_Stop) SetBit(i,0); //±£»¤Í£Ö¹¼ÓÈÈ + if(B_PPGStop_CheckPan) SetBit(i,1); //¼ÓÈÈÔÝÍ£µ«¼ì¹ø + if(B_PPGStop_NoCheck) SetBit(i,2); //¼ÓÈÈÔÝÍ£²»¼ì¹ø + if(Status_PPGDP & 0x02) SetBit(i,3); //¶¶Æµ¿ªÆô + if(Status_LxLow & 0x02) SetBit(i,4); //Á¬ÐøµÍ¹¦ÂÊ¿ªÆô + + Status2_Work = i; //ˢй¤×÷״̬2 + //----------------------------------------------------------------- + switch(Num_CommSend) + { + case 0: + { + Buf_DataSend[3] = 0xA0; //ÃüÁî×Ö + Buf_DataSend[2] = Status1_Work; //¹¤×÷״̬1 + Buf_DataSend[1] = Status2_Work; //¹¤×÷״̬2 + } + break; + case 1: + { + Buf_DataSend[3] = 0xA1; //ÃüÁî×Ö + Buf_DataSend[2] = Flag1_Error; //Ó²¼þ¹ÊÕϱêÖ¾1 + Buf_DataSend[1] = Flag2_Error; //Ó²¼þ¹ÊÕϱêÖ¾2 + } + break; + case 2: + { + Buf_DataSend[3] = 0xA2; //ÃüÁî×Ö + Buf_DataSend[2] = Status_PPGStop; //±£»¤×´Ì¬ + + i = (AD_Volatage >> 4) & 0xF0; //ÊеçµçѹAD£¨¸ß4룩 + i |= (AD_Current >> 8) & 0x0F; //¹¤×÷µçÁ÷AD£¨¸ß4룩 + Buf_DataSend[1] = i; + } + break; + case 3: + { + Buf_DataSend[3] = 0xA3; //ÃüÁî×Ö + Buf_DataSend[2] = AD_Volatage; //ÊеçµçѹAD£¨µÍ8룩 + Buf_DataSend[1] = AD_Current; //¹¤×÷µçÁ÷AD£¨µÍ8룩 + } + break; + case 4: + { + Buf_DataSend[3] = 0xA4; //ÃüÁî×Ö + Buf_DataSend[2] = AD_TmprPan; //¹øµ×ζÈAD + Buf_DataSend[1] = AD_TmprIgbt; //IGBTζÈAD + } + break; + case 5: + { + Buf_DataSend[3] = 0xA5; //ÃüÁî×Ö + Buf_DataSend[2] = AD_TmprTop; //¶¥²¿Î¶ÈAD + Buf_DataSend[1] = AD_VRef; //ÄÚ²¿»ù×¼µçѹ£¨1.2V£©AD + } + break; + case 6: + { + Buf_DataSend[3] = 0xA6; //ÃüÁî×Ö + Buf_DataSend[2] = Vol.flo.integer; //Êеçµçѹ - 80V + Buf_DataSend[1] = Count_Syn; //¼ì¹øÕñµ´¸öÊý + } + break; + case 7: + { + Buf_DataSend[3] = 0xA7; //ÃüÁî×Ö + Buf_DataSend[2] = Time_Syn >> 8; //¼ì¹øÕñµ´Âö¿í£¨¸ß8룩 + Buf_DataSend[1] = Time_Syn; //¼ì¹øÕñµ´Âö¿í£¨µÍ8룩 + } + break; + case 8: + { + Buf_DataSend[3] = 0xA8; //ÃüÁî×Ö + Buf_DataSend[2] = PowerReal >> 8; //ʵ¼ÊÊä³ö¹¦ÂÊ£¨¸ß8룩 + Buf_DataSend[1] = PowerReal; //ʵ¼ÊÊä³ö¹¦ÂÊ£¨µÍ8룩 + } + break; + case 9: + { + Buf_DataSend[3] = 0xA9; //ÃüÁî×Ö + Buf_DataSend[2] = Buf_PPGTMR >> 8; //µ±Ç°PPGµ¼Í¨Öµ£¨¸ß8룩 + Buf_DataSend[1] = Buf_PPGTMR; //µ±Ç°PPGµ¼Í¨Öµ£¨µÍ8룩 + } + break; + case 10: + { + Buf_DataSend[3] = 0xAA; //ÃüÁî×Ö + Buf_DataSend[2] = Count_BackPress >> 8; //1¼¶¹ýѹ±£»¤¼ÆÊý£¨¸ß8룩 + Buf_DataSend[1] = Count_BackPress; //1¼¶¹ýѹ±£»¤¼ÆÊý£¨µÍ8룩 + } + break; + case 11: + { + Buf_DataSend[3] = 0xAB; //ÃüÁî×Ö + Buf_DataSend[2] = Count_IgbtProtect >> 8; //IGBTÓ²¼þ±£»¤¼ÆÊý£¨¸ß8룩 + Buf_DataSend[1] = Count_IgbtProtect; //IGBTÓ²¼þ±£»¤¼ÆÊý£¨µÍ8룩 + } + break; + case 12: + { + Buf_DataSend[3] = 0xAC; //ÃüÁî×Ö + Buf_DataSend[2] = Elec.flo.integer; //µçÁ¿¸ßλ + Buf_DataSend[1] = Elec.flo.radix; //µçÁ¿µÍλ + } + break; + default:break; + } + + i = (unsigned)Buf_DataSend[1] + Buf_DataSend[2] + Buf_DataSend[3]; + Buf_DataSend[0] = (unsigned)~i; //УÑéºÍ + //----------------------------------------------------------------- + B_Refrsh_DataSend = 0; //·¢ÂëÊý¾ÝË¢ÐÂÍê³É + + if(++Num_CommSend >= 13) //·¢ÂëÇл» + { + Num_CommSend = 0; + } + } + + /********************************************************************** + ÊÕÂëÊý¾Ý´¦Àí + **********************************************************************/ + if(!B_Comm_No && B_Deal_DataRece) + { + B_Deal_DataRece = 0; //ÊÕÂëÊý¾Ý´¦ÀíÍê³É + + i = (unsigned)Buf_DataRece[1] + Buf_DataRece[2] + Buf_DataRece[3]; + i = (unsigned)~i; + j = (unsigned)Buf_DataRece[3] & 0xF0; + + if((i == Buf_DataRece[0]) && ((0xB0 == j) || (0xD0 == j))) //Êý¾ÝУÑé + { + B_Comm_Have = 1; //ÓÐͨѶ + B_Comm_Error = 0; //ÇåͨѶ¹ÊÕϱêÖ¾ + Time_NoComm = 0; //ÇåÎÞͨѶ¼ÆÊ± + + if(0xB0 == Buf_DataRece[3]) + { + Flag1_Work = Buf_DataRece[2]; //¹¤×÷±êÖ¾1 + Flag2_Work = Buf_DataRece[1]; //¹¤×÷±êÖ¾2 + } + else if(0xB1 == Buf_DataRece[3]) + { + PowerWork = Buf_DataRece[2]; //¼ÓÈȹ¦ÂÊÖµ + + } + else if(0xB2 == Buf_DataRece[3]) + { + Num_LxLowOn = Buf_DataRece[2]; //Á¬ÐøµÍ¹¦ÂÊ¿ª¸öÊý + Num_LxLowOff = Buf_DataRece[1]; //Á¬ÐøµÍ¹¦ÂʹظöÊý + } + else if(0xD0 == Buf_DataRece[3]) + { + i = (unsigned)~Buf_DataRece[1]; + if(Buf_DataRece[2] == i) + { + SlopeCurr_Adjust = Buf_DataRece[2]; //µçÁ÷бÂʵ÷ÕûÖµ + } + } + } + //----------------------------------------------------------------- + if(TestOne(Flag1_Work,0)) + { + B_Heat_En = 1; //¼ÓÈÈʹÄÜ + B_Fan_En = 1; //·çÉÈʹÄÜ + } + else + { + B_Heat_En = 0; //¼ÓÈÈ¹Ø±Õ + B_Fan_En = 0; //·çÉÈ¹Ø±Õ + } + + if(TestOne(Flag1_Work,1)) + { + B_Fan_En = 1; //·çÉÈʹÄÜ + } + else + { + B_Fan_En = 0; //·çÉÈ¹Ø±Õ + } + + if(TestOne(Flag1_Work,2)) + { + B_Buzz_En = 1; //·äÃùÆ÷ʹÄÜ + } + else + { + B_Buzz_En = 0; //·äÃùÆ÷¹Ø±Õ + } + + if(TestOne(Flag1_Work,3)) + { + if(!B_Buzz_Out) + { + Buzz_Short_One(); //·äÃùÆ÷¶ÌÃù1Éù£¨200ms£© + } + } + + if(TestOne(Flag1_Work,4)) + { + if(!B_Buzz_Out) + { + Buzz_Long_One(); //·äÃùÆ÷³¤Ãù1Éù£¨400ms£© + } + } + + if(TestOne(Flag1_Work,5)) + { + B_HeatStop_CheckPan = 1; //²»¼ÓÈȵ«¼ì¹ø + } + else + { + B_HeatStop_CheckPan = 0; + } + + if(TestOne(Flag1_Work,6)) + { + B_HeatStop_NoCheck = 1; //²»¼ÓÈȲ»¼ì¹ø + } + else + { + B_HeatStop_NoCheck = 0; + } + + if(TestOne(Flag1_Work,7)) + { + B_PPGDP_Dis = 1; //PPG¶¶Æµ½ûÖ¹ + } + else + { + B_PPGDP_Dis = 0; + } + //----------------------------------------------------------------- + if(TestOne(Flag2_Work,0)) + { + B_PanOver_Dis = 1; //¹øµ×NTC³¬ÎÂÅжϽûÖ¹ + } + else + { + B_PanOver_Dis = 0; + } + + if(TestOne(Flag2_Work,1)) + { + B_PanFail_Dis = 1; //¹øµ×NTCʧЧÅжϽûÖ¹ + } + else + { + B_PanFail_Dis = 0; + } + + if(TestOne(Flag2_Work,7)) + { + B_PPGDP_Can = 1; //PPG¶¶ÆµÇ¿ÖÆÊ¹ÄÜ + } + else + { + B_PPGDP_Can = 0; + } + } + + /********************************************************************** + ͨѶ״̬ȷÈÏ + **********************************************************************/ + if(B_Comm_Have) + { //ÒÑÈ·ÈÏÓÐͨѶ + if(++Time_NoComm > 2000/C_TimeMS_Main) //2s + { + Time_NoComm = 0; + + B_Comm_Error = 1; //ͨѶ¹ÊÕÏ + Buzz_Short_One(); //·äÃùÆ÷¶ÌÃù1Éù + } + } + else if(!B_Comm_No) + { //δȷÈÏÓÐÎÞͨѶ + if(++Time_NoComm > 250/C_TimeMS_Main) //250ms + { + Time_NoComm = 0; + B_Comm_No = 1; //ÎÞͨѶ + + TXSTA = 0; //¹Ø±ÕUARTÄ£¿é + RCSTA = 0; + } + } + else + { //ÒÑÈ·ÈÏÎÞͨѶ + Time_NoComm = 0; + } +} + +/************************************************************************** +**************************************************************************/ +#endif + + \ No newline at end of file diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Define_Global.h b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Define_Global.h new file mode 100644 index 0000000..dd774c5 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Define_Global.h @@ -0,0 +1,215 @@ +/************************************************************************** +**************************************************************************/ +#ifndef _DEFINE_GLOBAL_H_ +#define _DEFINE_GLOBAL_H_ +#pragma warning disable 752 + +/************************************************************************** +---------------------------------- Í·Îļþ --------------------------------- +**************************************************************************/ +#include +#include "Define_Type.h" +#include "Setup_Global.h" +#include "Setup_IO.h" + +#include "__REL_IhDebug.h" +#include "__CMS_IhPlus.h" +#include "Communicate.h" +#include "HMI.h" + +/************************************************************************** +--------------------------------- º¯ÊýÉùÃ÷ -------------------------------- +**************************************************************************/ +unsigned char Memory_Write(unsigned char addr,unsigned char value); +unsigned char Memory_Read(unsigned char addr); + +void Delay_Xus(unsigned char x); +void Delay_Xms(unsigned int x); +//------------------------------------------------------------------------- +void Buzz_Short_One(); +void Buzz_Long_One(); +//------------------------------------------------------------------------- +void Check_AD(); +void Deal_Adc(); +void Set_OutPut(); +void Set_PPGWork(); + +/************************************************************************** +--------------------------------- ±äÁ¿¶¨Òå -------------------------------- +**************************************************************************/ +volatile unsigned char Time_HMI; //ÈË»ú½çÃæ´¦Àí¼ÆÊ± +volatile unsigned char Time_BackPress; //¹ýѹ±£»¤´¦Àí¼ÆÊ± +volatile unsigned char Status_PPGStop; //PPGֹͣ״̬ +/*************************************************************************/ +volatile unsigned char AdcCount[3]; //ADC¼ÆÊý +volatile unsigned char AdcData[3]; //ADCÊý¾Ý +volatile unsigned char Delay_Adc; //ADCÑÓʱ¼ÆÊ± +volatile unsigned char Delay_AdcNoOk; //ADCδÍê³ÉÑÓʱ¼ÆÊ± + +volatile unsigned int AD_VRef; //ÄÚ²¿»ù×¼µçѹADÖµ +volatile unsigned char AD_Vdd; //VDD-ADÖµ +volatile unsigned char AD_Gnd; //GND-ADÖµ + +volatile unsigned char AD_Current_Fst; //¹¤×÷µçÁ÷AD³õÖµ +volatile unsigned int AD_Current; //¹¤×÷µçÁ÷ADÖµ + +volatile unsigned int AD_Volatage; //ÊеçµçѹADÖµ + +volatile unsigned char AD_TmprIgbt; //IGBTζÈADÖµ +volatile unsigned char AD_TmprPan; //¹øµ×ζÈADÖµ +volatile unsigned char AD_TmprTop; //¶¥²¿Î¶ÈADÖµ + +volatile unsigned char Count_IgbtDown; //IGBT¸ßνµ¹¦ÂÊ´ÎÊý +volatile VolElecType Vol; //µçѹ¼ÆËã½á¹û + +volatile unsigned char Min_CheckError; //¹ÊÕϼì²â¼Æ·Ö +//------------------------------------------------------------------------- +volatile bit B_PanOver_Dis; //¹øµ×NTC³¬ÎÂÅжϽûÖ¹ +volatile bit B_PanFail_Dis; //¹øµ×NTCʧЧÅжϽûÖ¹ +volatile bit B_Dly_CheckErr; //Ó²¼þ¹ÊÕϼì²âÑÓʱ +volatile bit B_IgbtDown; //IGBT¸ßνµ¹¦ÂÊ + +volatile bits AdcF1; +#define Flag1_Adc AdcF1.all +#define B_Adc_On AdcF1.one.b0 //ADC¿ªÆô +#define B_Adc_Ok AdcF1.one.b1 //ADCÍê³É +#define B_Adc_Error AdcF1.one.b2 //ADC´íÎó +#define B_Adc_SetOk AdcF1.one.b3 //ADCÉèÖÃÍê³É + +volatile bits AdcF2; +#define Flag2_Adc AdcF2.all +#define B_GetAD_MaxMin AdcF2.one.b0 //ÇóAD×î´ó×îСֵ +#define B_GetAD_AllSum AdcF2.one.b1 //ÇóAD×ܺÍÖµ +#define B_CurrAdc_Fst AdcF2.one.b2 //¹¤×÷µçÁ÷AD³õÖµ¼ì²âÍê³É +#define B_CurrAdc_Once AdcF2.one.b3 //¹¤×÷µçÁ÷ADCÍê³ÉÒ»´Î +#define B_VolAdc_Once AdcF2.one.b4 //ÊеçµçѹADCÍê³ÉÒ»´Î + +volatile bits AdcCH; +#define Channel_Adc AdcCH.all //AD¼ì²âͨµÀ +#define B_Channel_Vol AdcCH.one.b0 //Êеçµçѹ +#define B_Channel_Curr AdcCH.one.b1 //¹¤×÷µçÁ÷ +#define B_Channel_Igbt AdcCH.one.b2 //IGBTÎÂ¶È +#define B_Channel_Pan AdcCH.one.b3 //¹øµ×ÎÂ¶È +#define B_Channel_Top AdcCH.one.b4 //¶¥²¿ÎÂ¶È +#define B_Channel_VRef AdcCH.one.b5 //ÄÚ²¿»ù×¼µçѹ +#define B_Channel_Gnd AdcCH.one.b6 //GND +#define B_Channel_Vdd AdcCH.one.b7 //VDD +#define B_Channel_End B_Channel_Vdd //¡¾×îºóÒ»¸öADCͨµÀ¡¿ + +volatile bits ErrorF1; +#define Flag1_Error ErrorF1.all //Ó²¼þ¹ÊÕϱêÖ¾1 +#define B_EVolLow ErrorF1.one.b0 //Êеçµçѹ¹ýµÍ +#define B_EVolHigh ErrorF1.one.b1 //Êеçµçѹ¹ý¸ß +#define B_EIgbtOpen ErrorF1.one.b2 //IGBT-NTC¿ªÂ· +#define B_EIgbtClose ErrorF1.one.b3 //IGBT-NTC¶Ì· +#define B_EIgbtOver ErrorF1.one.b4 //IGBT-NTC³¬Î +#define B_EPanOpen ErrorF1.one.b5 //¹øµ×NTC¿ªÂ· +#define B_EPanClose ErrorF1.one.b6 //¹øµ×NTC¶Ì· +#define B_EPanOver ErrorF1.one.b7 //¹øµ×NTC³¬Î + +volatile bits ErrorF2; +#define Flag2_Error ErrorF2.all //Ó²¼þ¹ÊÕϱêÖ¾2 +#define B_EPanFail ErrorF2.one.b0 //¹øµ×NTCʧЧ +#define B_ETopOpen ErrorF2.one.b1 //¶¥²¿NTC¿ªÂ· +#define B_ETopClose ErrorF2.one.b2 //¶¥²¿NTC¶Ì· +#define B_ETopFail ErrorF2.one.b3 //¶¥²¿NTCʧЧ +#define B_Comm_Error ErrorF2.one.b7 //ͨÐŹÊÕÏ +/*************************************************************************/ +volatile unsigned int PwmPeriod_Fan; //·çÉÈPWMÖÜÆÚ +volatile unsigned int PwmDuty_Fan; //·çÉÈPWMÕ¼¿Õ±È + +volatile unsigned int PwmPeriod_Buzz; //·äÃùÆ÷PWMÖÜÆÚ +volatile unsigned int PwmDuty_Buzz; //·äÃùÆ÷PWMÕ¼¿Õ±È + +volatile unsigned char TimeBuzz; //·äÃùÆ÷Ãù½Ðʱ¼ä +//------------------------------------------------------------------------- +volatile bits OutPutF; +#define Flag_OutPut OutPutF.all //Êä³ö¿ØÖƱêÖ¾ +#define B_Fan_En OutPutF.one.b0 //·çÉÈʹÄÜ +#define B_Buzz_En OutPutF.one.b1 //·äÃùÆ÷ʹÄÜ +#define B_Buzz_Out OutPutF.one.b2 //·äÃùÆ÷Êä³ö +#define B_HeatStop_CheckPan OutPutF.one.b4 //²»¼ÓÈȵ«¼ì¹ø +#define B_HeatStop_NoCheck OutPutF.one.b5 //²»¼ÓÈȲ»¼ì¹ø +/*************************************************************************/ +volatile VolElecType Elec; //µçÁ¿¼ÆËã½á¹û + +volatile unsigned int Delay_ProtectStop; //IGBTÓ²¼þ±£»¤Í£Ö¹ÑÓʱ +volatile unsigned int Count_IgbtProtect; //IGBTÓ²¼þ±£»¤¼ÆÊý + +volatile unsigned int SlopeCurr; //µçÁ÷бÂÊ +volatile unsigned char SlopeCurr_Adjust; //µçÁ÷бÂʵ÷½ÚÖµ + +volatile unsigned int CurrentReal; //ʵ¼Ê¹¤×÷µçÁ÷ +volatile unsigned int PowerReal; //ʵ¼ÊÊä³ö¹¦ÂÊ +volatile unsigned int PowerSet; //Ä¿±êÊä³ö¹¦ÂÊ +//------------------------------------------------------------------------- +volatile bit B_PPGTMR_Adjust; //PPGTMRµ÷Õû +volatile bit B_Adjust_SlopeCurr; //µçÁ÷бÂʵ÷½Ú + +volatile bits PPGF; +#define Flag_PPG PPGF.all //PPG¿ØÖƱêÖ¾ +#define B_PPG_En PPGF.one.b0 //PPGʹÄÜ +#define B_PPGStop_CheckPan PPGF.one.b1 //PPGÔÝÍ£µ«¼ì¹ø +#define B_PPGStop_NoCheck PPGF.one.b2 //PPGÔÝÍ£²»¼ì¹ø + +/************************************************************************** +--------------------------------- ÅäÖûº´æ -------------------------------- +**************************************************************************/ +volatile unsigned int Buf_PPGMin; +volatile unsigned int Buf_PPGMax; +volatile unsigned int Buf_PPGMax_Steel; +volatile unsigned int Buf_PPGMax_Iron; + +volatile unsigned int Buf_Power_CurrerConst; +volatile unsigned int Buf_PowerLose_VHigh; +volatile unsigned int Buf_PowerLose_VLow; + +volatile unsigned char Buf_Vol_LowErr_In; +volatile unsigned char Buf_Vol_LowErr_Out; +volatile unsigned char Buf_Vol_HighErr_In; +volatile unsigned char Buf_Vol_HighErr_Out; + +volatile unsigned char Buf_AD_Pan_FanOn; +volatile unsigned char Buf_AD_Pan_FanOff; +volatile unsigned char Buf_AD_Pan_OverIn; +volatile unsigned char Buf_AD_Pan_OverOut; + +volatile unsigned char Buf_AD_Igbt_FanOn; +volatile unsigned char Buf_AD_Igbt_FanOff; +volatile unsigned char Buf_AD_Igbt_OverIn; +volatile unsigned char Buf_AD_Igbt_OverOut; +volatile unsigned char Buf_AD_Igbt_HighIn; +volatile unsigned char Buf_AD_Igbt_HighOut; + +/************************************************************************** +--------------------------- ÌØÊ⹦ÄܼĴæÆ÷×Ô¶¨Òå -------------------------- +**************************************************************************/ +volatile unsigned char INTCON2 @ 0x08; + +volatile unsigned char PIR1 @ 0x0C; +volatile bit ADIF @ ((unsigned)&PIR1*8)+6; +volatile bit RCIF @ ((unsigned)&PIR1*8)+5; +volatile bit TXIF @ ((unsigned)&PIR1*8)+4; +volatile bit TMR2IF @ ((unsigned)&PIR1*8)+1; +volatile bit TMR1IF @ ((unsigned)&PIR1*8)+0; + +volatile unsigned char PIR2 @ 0x0D; +volatile bit PPGWDTIF @ ((unsigned)&PIR2*8)+1; + +volatile unsigned char PIE1 @ 0x13; +volatile bit TMR2IE @ ((unsigned)&PIE1*8)+1; + +volatile unsigned char ADCON0 @ 0x9E; +volatile bit GODONE @ ((unsigned)&ADCON0*8)+1; +volatile bit ADON @ ((unsigned)&ADCON0*8)+0; + +volatile unsigned char CM1CON1 @ 0x117; +volatile bit CM1COF @ ((unsigned)&CM1CON1*8)+3; + +volatile unsigned char PPGTMRL @ 0x190; +volatile unsigned char PPGTMRH @ 0x191; + +/************************************************************************** +**************************************************************************/ +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Define_Type.h b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Define_Type.h new file mode 100644 index 0000000..4f21f63 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Define_Type.h @@ -0,0 +1,64 @@ +/************************************************************************** +**************************************************************************/ +#ifndef _DEFINE_TYPE_H_ +#define _DEFINE_TYPE_H_ + +/************************************************************************** +**************************************************************************/ +#define uchar unsigned char +#define uint unsigned int +#define ulong unsigned long +//------------------------------------------------------------------------- +#define ExteralPin(Ram,Bit,Name) volatile bit Name @((unsigned)&Ram*8)+Bit +//------------------------------------------------------------------------- +#define BOOL unsigned char //²¼¶ûÐÍ + +#define TRUE 1 //Õæ +#define FALSE 0 //¼Ù +//------------------------------------------------------------------------- +#define SetBit(x,y) x |= (1< 0; i--) + { + Pin_SCK = 0; + + if(data & 0x1) + { + Pin_SDA = 1; + } + else + { + Pin_SDA = 0; + } + data >>= 1; + + NOP(); + NOP(); + Pin_SCK = 1; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDisplay +* º¯Êý¹¦ÄÜ£ºÏÔʾÊä³ö +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Display() +{ + volatile unsigned char cnt; + + Pin_STB = 1; + WriteData8Bits(0x03); //7*10 + Pin_STB = 1; + + WriteData8Bits(0x40); //µØÖ·×ÔÔö¡¢ËÍÊý¾Ý + Pin_STB = 1; + + WriteData8Bits(0xC0); //´Ó00HµØÖ·¿ªÊ¼ËÍÊý¾Ý + + for(cnt = 0; cnt < 14; cnt++) + { + WriteData8Bits(ShowData[cnt]); + } + Pin_STB = 1; + + WriteData8Bits(0x8A); //°´ÕÕÉèÖÃÁÁ¶È£¬ÏÔʾÊä³ö + Pin_STB = 1; +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºKeyScan +* º¯Êý¹¦ÄÜ£º°´¼üɨÃè +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void KeyScan() +{ + static unsigned char CntKey_Old,Delay_KeyScan; + + volatile unsigned char cnt,i; + volatile unsigned char data[5]; + //--------------------------------------------------------------------- + Io_SDA = 0; + Pin_STB = 1; + WriteData8Bits(0x42); //¶Áɨ¼üÊý¾Ý + + Io_SDA = 1; + Pin_SCK = 1; + Pin_STB = 0; + Delay_Xus(40); //ÑÓʱ40us + + for(cnt = 40; cnt > 0;) + { + Pin_SCK = 0; + Delay_Xus(10); //ÑÓʱ10us + data[0] >>= 1; + + if(Pin_SDA) + { + SetBit(data[0],7); + } + Pin_SCK = 1; + Delay_Xus(10); //ÑÓʱ10us + + cnt--; + if(0 == (cnt & 0x07)) + { + if(0xFF != data[0]) + { + i = (unsigned)cnt >> 3; + data[i] = data[0]; + } + } + } + + Pin_STB = 1; + Io_SDA = 0; + //--------------------------------------------------------------------- + while(1) + { + cnt = 0; + cnt++; if(C_Key_OnOff) break; //¿ª¹Ø¼ü + cnt++; if(C_Key_Add) break; //¼Ó¼ü + cnt++; if(C_Key_Sub) break; //¼õ¼ü + cnt++; if(C_Key_Time) break; //ʱ¼ä¼ü + cnt = 0; break; + } + //--------------------------------------------------------------------- + if(cnt == CntKey_Old) + { + if(++Delay_KeyScan & 0x08) //Ïû¶¶ + { + Delay_KeyScan = 0; + KeyValue = CntKey_Old; + } + } + else + { + CntKey_Old = cnt; + Delay_KeyScan = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDealKey_Com +* º¯Êý¹¦ÄÜ£º°´¼ü¹²Óô¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void DealKey_Com() +{ + Delay_Sec = Delay_5S = 0; + Delay_NoPan = Delay_Error = 0; + Wait_Flash = Delay_Flash = 0; + B_DispFlash = 0; + + if(!B_KeyLong) + { + Buzz_Short_One(); //·äÃùÆ÷¶ÌÃù1Éù + } +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºDealKey_OnOff +* º¯Êý¹¦ÄÜ£º¿ª¹Ø¼ü´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void DealKey_OnOff() +{ + DealMode_CleanRam(); //Çåģʽ´¦Àí¼Ä´æÆ÷ + + if(B_Adjust_SlopeCurr) + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + SlopeCurr_Adjust = 0x80; //µçÁ÷бÂʵ÷ÕûÖµ»Øµ½Ä¬ÈÏÖµ + } + else if(B_OnOff) + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + + Flag1_Error = 0; //ÇåÓ²¼þ¹ÊÕϱêÖ¾ + B_OnOff = 0; //¹Ø»ú + DangWei = 0; + + B_DingShi = 0; //Í˳ö¶¨Ê±¹¦ÄÜ + B_TimeSet = 0; //Í˳öʱ¼äÉ趨 + + Hour_Set = Min_Set = 0; + Delay_DS = 0; + } + else + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + + B_OnOff = 1; + DangWei = 10; //ĬÈϹ¤×÷¹¦ÂÊ + + B_DingShi = 0; //Í˳ö¶¨Ê±¹¦ÄÜ + B_TimeSet = 0; //Í˳öʱ¼äÉ趨 + + Min_Set = 0; //ĬÈ϶¨Ê±Ê±¼äΪ2Сʱ + Hour_Set = 2; + Delay_DS = 0; + } +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºDealKey_Time +* º¯Êý¹¦ÄÜ£ºÊ±¼ä¼ü´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void DealKey_Time() +{ + if(B_KeyLong) + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + Buzz_Short_One(); //·äÃùÆ÷¶ÌÃù1Éù + + B_Adjust_SlopeCurr = 1; //µçÁ÷бÂʵ÷½Ú + } + else if(B_OnOff) //¹Ø»ú£¬²»½øÈë´¦Àí + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + + if(!B_DingShi) + { + B_DingShi = 1; //¿ªÆô¶¨Ê±¹¦ÄÜ + B_TimeSet = 1; //½øÐÐʱ¼äÉ趨 + + Min_Set = Hour_Set = 0; + Delay_DS = 0; + } + else if(!B_TimeSet) + { + B_DingShi = 1; //¿ªÆô¶¨Ê±¹¦ÄÜ + B_TimeSet = 1; //½øÐÐʱ¼äÉ趨 + Delay_DS = 0; + } + else + { + B_DingShi = 0; //Í˳ö¶¨Ê±¹¦ÄÜ + B_TimeSet = 0; //Í˳öʱ¼äÉ趨 + + Min_Set = 0; //ĬÈ϶¨Ê±Ê±¼äΪ2Сʱ + Hour_Set = 2; + Delay_DS = 0; + } + } +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºDealKey_Add +* º¯Êý¹¦ÄÜ£º¼Ó¼ü´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void DealKey_Add() +{ + if(B_Adjust_SlopeCurr) + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + SlopeCurr_Adjust--; //µçÁ÷бÂʵ÷ÕûÖµ-1£¨¹¦ÂÊÔö¼Ó£© + } + else if(B_OnOff) //¹Ø»ú£¬²»½øÈë´¦Àí + { + if(B_TimeSet) + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + Delay_DS = 0; + + if(B_KeyLong) + { + Min_Set += 10; //+10 + } + else + { + Min_Set++; //+1 + } + + if(B_DingShi && (Hour_Set >= 3)) + { + Min_Set = Hour_Set = 0; + } + else if(Min_Set >= 60) + { + if(B_DingShi && (Hour_Set < 3)) //¶¨Ê±×î´óʱ¼äΪ3:00 + { + Min_Set = 0; + Hour_Set++; + } + else + { + Min_Set = Hour_Set = 0; + } + } + } + else if(!B_KeyLong) //³¤°´¼üÎÞЧ + { + if(DangWei < 20) //×î´ó¹¤×÷µµÎ»=20 + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + + B_DispTurn = 0; //ÏÔʾ¹¦ÂÊ + DangWei++; //µµÎ»+1 + + DealMode_CleanRam(); //Çåģʽ´¦Àí¼Ä´æÆ÷ + } + } + } +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºDealKey_Sub +* º¯Êý¹¦ÄÜ£º¼õ¼ü´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void DealKey_Sub() +{ + if(B_Adjust_SlopeCurr) + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + SlopeCurr_Adjust++; //µçÁ÷бÂʵ÷ÕûÖµ+1£¨¹¦ÂʼõС£© + } + else if(B_OnOff) //¹Ø»ú£¬²»½øÈë´¦Àí + { + if(B_TimeSet) + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + Delay_DS = 0; + + if(B_KeyLong) + { + Min_Set -= 10; //-10 + } + else + { + Min_Set--; //-1 + } + + if(Min_Set >= 60) + { + if(Hour_Set) //×îСÉ趨¶¨Ê±Ê±¼äΪ0:00 + { + Min_Set -= 196; + Hour_Set--; + } + else + { + Min_Set = 0; + Hour_Set = 3; //¶¨Ê±×î´óʱ¼ä3:00 + } + } + } + else if(!B_KeyLong) //³¤°´¼üÎÞЧ + { + if(DangWei > 1) + { + DealKey_Com(); //°´¼üÓÐЧ£¬½øÐÐÏàÓ¦´¦Àí + + B_DispTurn = 0; //ÏÔʾ¹¦ÂÊ + DangWei--; //µµÎ»-1 + + DealMode_CleanRam(); //Çåģʽ´¦Àí¼Ä´æÆ÷ + } + } + } +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_Key +* º¯Êý¹¦ÄÜ£º°´¼ü´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Deal_Key() +{ + static unsigned int KeyValue_Old; + static unsigned int Del_KeyLong; + + volatile unsigned char i; + //--------------------------------------------------------------------- + if((!B_Dly_PowerOn && (C_KeyValue_Time != KeyValue)) || + ((Flag1_Error || Flag2_Error) && (C_KeyValue_OnOff != KeyValue))) + { //ÉϵçÑÓʱ²¢ÇÒ·Çʱ¼ä¼ü¡¢Í¨ÐŹÊÕÏ¡¢Ó²¼þ¹ÊÕϲ¢ÇÒ·Ç¿ª¹Ø¼ü + i = 0; //°´¼üÎÞЧ + } + else + { + i = KeyValue; + } + //--------------------------------------------------------------------- + if(i) + { + if(B_TimeSet && ((C_KeyValue_Add == i) || (C_KeyValue_Sub == i))) + { + Wait_Flash = Delay_Flash = 0; + B_DispFlash = 0; + } + + if(i != KeyValue_Old) + { + B_KeyLong = 0; + + if(C_KeyValue_Time == i) + { + Del_KeyLong = 950/C_TimeMS_Main; //950ms + } + else + { + Del_KeyLong = 300/C_TimeMS_Main; //300ms + } + + switch(i) + { + case 1: DealKey_OnOff(); break; //¿ª¹Ø¼ü + case 2: DealKey_Add(); break; //¼Ó¼ü + case 3: DealKey_Sub(); break; //¼õ¼ü + case 4: DealKey_Time(); break; //ʱ¼ä¼ü + default: break; + } + + KeyValue_Old = i; + } + else if(Del_KeyLong) + { + Del_KeyLong--; + } + else + { + if(C_KeyValue_Time == i) + { + if(!B_KeyLong && !B_Dly_PowerOn) + { + B_KeyLong = 1; + DealKey_Time(); //ʱ¼ä¼ü³¤°´ + } + } + else if((C_KeyValue_Add == i) || (C_KeyValue_Sub == i)) + { + Del_KeyLong = 100/C_TimeMS_Main; //100ms + B_KeyLong = 1; + + if(C_KeyValue_Add == i) + { + DealKey_Add(); //¼Ó¼ü³¤°´ + } + else + { + DealKey_Sub(); //¼õ¼ü³¤°´ + } + } + } + } + else + { + KeyValue_Old = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDec_to_Hex +* º¯Êý¹¦ÄÜ£º256ÒÔÄÚHEXתBCD +* Èë¿Ú²ÎÊý£ºdata=±»×ª»»µÄÊý¾Ý +* ³ö¿Ú²ÎÊý£ºi=ת»»½á¹û +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +unsigned int Dec_to_Hex(unsigned char data) +{ + volatile unsigned int i = 0; + + while(data > 99) + { + data -= 100; + i += 0x100; + } + while(data > 9) + { + data -= 10; + i += 0x10; + } + i += data; + return i; +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºSetDispPower +* º¯Êý¹¦ÄÜ£º¹¦ÂÊÏÔʾ +* Èë¿Ú²ÎÊý£ºi=¹¦ÂʵµÎ» +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void SetDispPower(unsigned char i) +{ + volatile unsigned char x; + + x = (unsigned)Tab_DispPower[i] & 0xF0; + if(x) + { + x = ((unsigned)Tab_DispPower[i] >> 4) & 0x0F; + Smg_Data1 = Tab_Smg[x]; //¹¦ÂÊÏÔʾ + } + x = (unsigned)Tab_DispPower[i] & 0x0F; + Smg_Data2 = Tab_Smg[x]; + + Smg_Data3 = SMG_0; + Smg_Data4 = SMG_0; +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºSetDispTime +* º¯Êý¹¦ÄÜ£ºÊ±¼äÏÔʾ +* Èë¿Ú²ÎÊý£ºi=ʱ£¬j=·Ö +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void SetDispTime(unsigned char i,unsigned char j) +{ + volatile unsigned char x; + + if(i >= 10) + { + x = (Dec_to_Hex(i) >> 4) & 0x0F; + Smg_Data1 = Tab_Smg[x]; //ʱÏÔʾ + } + x = Dec_to_Hex(i) & 0x0F; + Smg_Data2 = Tab_Smg[x]; + + x = (Dec_to_Hex(j) >> 4) & 0x0F; + Smg_Data3 = Tab_Smg[x]; //·ÖÏÔʾ + x = Dec_to_Hex(j) & 0x0F; + Smg_Data4 = Tab_Smg[x]; +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºSet_DispData +* º¯Êý¹¦ÄÜ£ºÏÔʾÊý¾ÝÉèÖà +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Set_DispData() +{ + volatile unsigned char i,j; + + for(i = 0; i < sizeof(ShowData); i++) + { + ShowData[i] = 0; //ÇåÏÔʾ¼Ä´æÆ÷ + } + /********************************************************************** + ²âÊÔÏÔʾ + **********************************************************************/ + #ifdef _TEST_DISP_ + static unsigned char TestRam[2]; + static unsigned int Delay_TestDisp; + //--------------------------------------------------------------------- + if(++Delay_TestDisp & 0x100) + { + TestRam[0] = C_Data1_TestDisp >> 8; + TestRam[1] = C_Data1_TestDisp; + } + else + { + TestRam[0] = C_Data2_TestDisp >> 8; + TestRam[1] = C_Data2_TestDisp; + } + //--------------------------------------------------------------------- + i = (TestRam[0] >> 4) & 0x0F; + j = TestRam[0] & 0x0F; + + Smg_Data1 = Tab_Smg[i]; //¸ß2λ + Smg_Data2 = Tab_Smg[j]; + + i = (TestRam[1] >> 4) & 0x0F; + j = TestRam[1] & 0x0F; + + Smg_Data3 = Tab_Smg[i]; //µÍ2λ + Smg_Data4 = Tab_Smg[j]; + //--------------------------------------------------------------------- + if(B_PPGDP_Dis) On_Led_M1; //M1ָʾµÆ + if(Status_PPGDP & 0x02) On_Led_M2; //M2ָʾµÆ + if(B_Pan_Iron) On_Led_M3; //M3ָʾµÆ + if(B_Protect_BackPress) On_Led_M4; //M4ָʾµÆ + if(B_Zero_No) On_Led_M5; //M5ָʾµÆ + if(B_Zero_60Hz) On_Led_M6; //M6ָʾµÆ + if(B_Pan_No) On_Led_M7; //M7ָʾµÆ + + return; + #endif + /********************************************************************** + µçÁ÷бÂʵ÷½ÚÏÔʾ + **********************************************************************/ + if(B_Adjust_SlopeCurr) + { + i = ((unsigned)PowerWork >> 4) & 0x0F; + j = (unsigned)PowerWork & 0x0F; + + Smg_Data1 = Tab_Smg[i]; //¸ß2λ + Smg_Data2 = Tab_Smg[j]; + + i = ((unsigned)SlopeCurr_Adjust >> 4) & 0x0F; + j = (unsigned)SlopeCurr_Adjust & 0x0F; + + Smg_Data3 = Tab_Smg[i]; //µÍ2λ + Smg_Data4 = Tab_Smg[j]; + + Led_Data1 = 0xFF; + Led_Data2 = 0xFF; + Led_Data3 = 0xFF; + return; + } + /********************************************************************** + ÉϵçÏÔʾ + **********************************************************************/ + if(!B_Dly_PowerOn) //ÉϵçÑÓʱ£¬ÏÔʾȫÁÁ + { + Smg_Data1 = 0xFF; + Smg_Data2 = 0xFF; + Smg_Data3 = 0xFF; + Smg_Data4 = 0xFF; + + Led_Data1 = 0xFF; + Led_Data2 = 0xFF; + Led_Data3 = 0xFF; + return; + } + /********************************************************************** + Õý³£ÏÔʾ + **********************************************************************/ + if(Flag1_Error || Flag2_Error) //¹ÊÕÏÏÔʾ + { + if(!B_DispFlash) + { + Smg_Data2 = SMG_E; + + if(B_EPanOpen) Smg_Data3 = SMG_2; //¹øµ×NTC¿ªÂ·¹ÊÕÏ + else if(B_EPanClose) Smg_Data3 = SMG_2; //¹øµ×NTC¶Ì·¹ÊÕÏ + else if(B_EIgbtOpen) Smg_Data3 = SMG_1; //IGBT-NTC¿ªÂ·¹ÊÕÏ + else if(B_EIgbtClose) Smg_Data3 = SMG_1; //IGBT-NTC¶Ì·¹ÊÕÏ + else if(B_EVolHigh) Smg_Data3 = SMG_3; //Êеç¸ßѹ¹ÊÕÏ + else if(B_EVolLow) Smg_Data3 = SMG_4; //ÊеçµÍѹ¹ÊÕÏ + else if(B_EPanOver) Smg_Data3 = SMG_5; //¹øµ×NTC³¬Î¹ÊÕÏ + else if(B_EIgbtOver) Smg_Data3 = SMG_6; //IGBT-NTC³¬Î¹ÊÕÏ + + else if(B_Comm_Error) Smg_Data3 = SMG_C; //ͨÐŹÊÕÏ + } + } + else if(B_OnOff) //¿ª»úÏÔʾ + { + if(B_Pan_No) //ÎÞ¹øÏÔʾ + { + if(!B_DispFlash) + { + Smg_Data2 = SMG_E; + Smg_Data3 = SMG_0; //ÎÞ¹øÏÔʾE0 + } + } + else if(B_TimeSet || (B_DingShi && B_DispTurn)) //¶¨Ê±ÏÔʾ + { + if(!B_TimeSet || !B_DispFlash) + { + SetDispTime(Hour_Set,Min_Set); //ÏÔʾʱ¼ä + } + if(B_TimeSet || !B_DispFlash) + { + On_Smg_MH; //ÊýÂë¹ÜðºÅ + } + } + else + { + SetDispPower(DangWei); + } + } + else + { + Smg_Data1 = SMG_GG; + Smg_Data2 = SMG_GG; + Smg_Data3 = SMG_GG; + Smg_Data4 = SMG_GG; + } + //--------------------------------------------------------------------- + if(B_PPGDP_Dis) On_Led_M1; //M1ָʾµÆ + if(Status_PPGDP & 0x02) On_Led_M2; //M2ָʾµÆ + if(B_Pan_Iron) On_Led_M3; //M3ָʾµÆ + if(B_Protect_BackPress) On_Led_M4; //M4ָʾµÆ + if(B_Zero_No) On_Led_M5; //M5ָʾµÆ + if(B_Zero_60Hz) On_Led_M6; //M6ָʾµÆ + if(B_Pan_No) On_Led_M7; //M7ָʾµÆ +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDealMode_HandCom +* º¯Êý¹¦ÄÜ£ºÊÖ¶¯Ä£Ê½´¦Àí +* Èë¿Ú²ÎÊý£ºdang=¹¤×÷µµÎ»£¬tmproff=¸ßÎÂֹͣζÈADÖµ£¬tmpron=¸ßλָ´Î¶ÈADÖµ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void DealMode_HandCom(unsigned char dang,unsigned char tmproff,unsigned char tmpron) +{ + volatile unsigned int data; + //--------------------------------------------------------------------- + DangOut = dang; //¹¤×÷¹¦ÂÊ + + if(dang >= 10) + { //>=10µµ + Num_LxLowOn = 0; + Num_LxLowOff = 0; + } + else + { //<10µµ + Num_LxLowOn = Tab_LxLowNum[dang]; //Á¬ÐøµÍ¹¦ÂÊ¿ª¸öÊý + Num_LxLowOff = Tab_LxLowNum[dang] >> 8; //Á¬ÐøµÍ¹¦ÂʹظöÊý + } + //--------------------------------------------------------------------- + if(AD_TmprPan <= tmpron) + { + Cnt2_Mode = 0; + + if(++Cnt1_Mode & 0x04) //Ïû¶¶ + { + Cnt1_Mode = 0; + B_TmprStop = 0; //¹øµ×¸ßλָ´ + } + } + else if(AD_TmprPan >= tmproff) + { + Cnt1_Mode = 0; + + if(++Cnt2_Mode & 0x04) //Ïû¶¶ + { + Cnt2_Mode = 0; + B_TmprStop = 1; //¹øµ×¸ßΠ+ } + } + else + { + Cnt1_Mode = Cnt2_Mode = 0; + } +} +/************************************************************************** +* º¯ÊýÃû³Æ£ºDealMode_HandTmpr +* º¯Êý¹¦ÄÜ£ºÊÖ¶¯Î¶Èģʽ´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +/*void DealMode_HandTmpr() +{ + DealMode_HandCom(DangWei,Tab_ModeTmpr[DangWei]>>8,Tab_ModeTmpr[DangWei]); +}*/ +/************************************************************************** +* º¯ÊýÃû³Æ£ºDealMode_HandPower +* º¯Êý¹¦ÄÜ£ºÊÖ¶¯¹¦ÂÊģʽ´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +/*void DealMode_HandPower() +{ + DealMode_HandCom(DangWei,C_TmprPan_120C,C_TmprPan_110C); +}*/ +/************************************************************************** +* º¯ÊýÃû³Æ£ºDealMode_Water +* º¯Êý¹¦ÄÜ£ºÉÕˮģʽ´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +/*void DealMode_Water() +{ + volatile unsigned char dang; + + if(++Sec_Mode >= 60000/C_TimeMS_Main) //1min + { + Sec_Mode = 0; + Min_Mode++; + } + + if(Min_Mode >= 20) //20min + { + Min_Mode = 0; + DealKey_OnOff(); //ʱ¼äµ½£¬×Ô¶¯¹Ø»ú + } + else + { + if(Min_Mode >= 15) //15min + { + dang = 8; //µÚ8µµ¹¦ÂÊ + } + else + { + dang = 20; //µÚ20µµ¹¦ÂÊ + } + + DealMode_HandCom(dang,C_TmprPan_120C,C_TmprPan_110C); + } +}*/ +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_Mode +* º¯Êý¹¦ÄÜ£ºÄ£Ê½´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Deal_Mode() +{ + if(!B_Heat_En) + { + DangOut = 0; + DealMode_CleanRam(); //Çåģʽ´¦Àí¼Ä´æÆ÷ + } + else + { + DealMode_HandCom(DangWei,C_TmprPan_180C,C_TmprPan_170C); + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_Time +* º¯Êý¹¦ÄÜ£ºÊ±¼ä´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Deal_Time() +{ + volatile unsigned char i; + //--------------------------------------------------------------------- + if(++Delay_Flash >= 500/C_TimeMS_Main) //0.5s + { + Delay_Flash = 0; + + if(Wait_Flash) + { + Wait_Flash--; + } + else + { + B_DispFlash = ~B_DispFlash; //ÏÔʾÉÁ˸ + } + } + //--------------------------------------------------------------------- + if(++Delay_Sec >= 1000/C_TimeMS_Main) //1s + { + Delay_Sec = 0; + B_Dly_PowerOn = 1; //ÉϵçÑÓʱÍê³É + + if(++Delay_5S >= 5) //5s + { + Delay_5S = 0; + + B_Adjust_SlopeCurr = 0; //Í˳öµçÁ÷бÂʵ÷½Ú + B_DispTurn = ~B_DispTurn; //ÏÔʾ½»Ìæ + + if(B_DingShi && B_TimeSet) + { + B_TimeSet = 0; //Í˳öʱ¼äÉ趨 + Delay_DS = 0; + + if(Min_Set || Hour_Set) + { + B_DispTurn = 1; //ÏÔʾʱ¼ä + } + else + { + B_DingShi = 0; //Í˳ö¶¨Ê±¹¦ÄÜ + + Min_Set = 0; //ĬÈ϶¨Ê±Ê±¼äΪ2Сʱ + Hour_Set = 2; + } + } + } + + if(B_OnOff && B_Pan_No) + { + if(++Delay_NoPan >= 60) + { + Delay_NoPan = 0; + DealKey_OnOff(); //ÎÞ¹ø£¬×Ô¶¯¹Ø»ú + } + + if(Delay_NoPan & 0x01) //ÿ2Ãë + { + Buzz_Short_One(); //·äÃùÆ÷¶ÌÃù1Éù + } + } + else + { + Delay_NoPan = 0; + } + + if(B_OnOff && Flag1_Error) + { + if(++Delay_Error >= 60) + { + Delay_Error = 0; + DealKey_OnOff(); //Ó²¼þ¹ÊÕÏ£¬×Ô¶¯¹Ø»ú + } + + if(Delay_Error & 0x01) //ÿ2Ãë + { + Buzz_Short_One(); //·äÃùÆ÷¶ÌÃù1Éù + } + } + else + { + Delay_Error = 0; + } + } + //--------------------------------------------------------------------- + if(Flag1_Error || Flag2_Error || !B_OnOff || B_TimeSet) + { + Time_HMI = 0; + Delay_DS = 0; //¹ÊÕÏ¡¢¹Ø»ú¡¢Ê±¼äÉèÖÃÖÐ + } + else + { + if(!B_Zero_60Hz || B_Zero_No) + { + i = 100; //10ms*100=1s + } + else + { + i = 120; //8.333ms*120=1s + } + + if(Time_HMI >= i) + { + Time_HMI = 0; + + if(++Delay_DS >= 60) //1min + { + Delay_DS = 0; + + if(Min_Set) + { + Min_Set--; + } + else if(Hour_Set) + { + Min_Set = 59; + Hour_Set--; + } + } + } + + if((0 == Min_Set) && (0 == Hour_Set)) + { + if(B_OnOff) + { + DealKey_OnOff(); //¶¨Ê±Ê±¼äµ½£¬×Ô¶¯¹Ø»ú + } + } + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºSet_Work +* º¯Êý¹¦ÄÜ£º¹¤×÷ÉèÖà +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Set_Work() +{ + if(B_Adjust_SlopeCurr) + { + PowerWork = Tab_DangOut[10]; //¹¤×÷¹¦ÂÊÖµ + + B_Heat_En = 1; //¼ÓÈÈʹÄÜ + B_Fan_En = 1; //·çÉÈʹÄÜ + + B_HeatStop_NoCheck = 0; + B_HeatStop_CheckPan = 0; + } + else + { + PowerWork = Tab_DangOut[DangOut]; //¹¤×÷¹¦ÂÊÖµ + + B_HeatStop_CheckPan = 0; + + if(B_OnOff && !Flag1_Error && !Flag2_Error) + { + B_Heat_En = 1; //¼ÓÈÈʹÄÜ + B_Fan_En = 1; //·çÉÈʹÄÜ + + if(B_TmprStop) + { + B_HeatStop_NoCheck = 1; //²»¼ÓÈȲ»¼ì¹ø + } + else + { + B_HeatStop_NoCheck = 0; + } + } + else + { + B_Heat_En = 0; //¼ÓÈÈ¹Ø±Õ + B_Fan_En = 0; //·çÉÈ¹Ø±Õ + + B_HeatStop_NoCheck = 0; + } + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºInit_HMI +* º¯Êý¹¦ÄÜ£º³õʼ»¯ÈË»ú½çÃæ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£º³õʼ»¯µ÷Óà +**************************************************************************/ +void Init_HMI() +{ + volatile unsigned char i; + + for(i = 0; i < sizeof(ShowData); i++) + { + ShowData[i] = 0xFF; //ÏÔʾȫÁÁ + } + Display(); //ÏÔʾÊä³ö +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_HMI +* º¯Êý¹¦ÄÜ£ºÈË»ú½çÃæ´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖ÷Ñ­»·µ÷Óà +**************************************************************************/ +void Deal_HMI() +{ + KeyScan(); //°´¼üɨÃè + Display(); //ÏÔʾÊä³ö + Set_DispData(); //ÏÔʾÊý¾ÝÉèÖà + Deal_Key(); //°´¼ü´¦Àí + + Deal_Time(); //ʱ¼ä´¦Àí + Deal_Mode(); //ģʽ´¦Àí + Set_Work(); //¹¤×÷ÉèÖà +} + +/************************************************************************** +**************************************************************************/ +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/HMI.h b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/HMI.h new file mode 100644 index 0000000..aacd0c5 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/HMI.h @@ -0,0 +1,341 @@ +/************************************************************************** +**************************************************************************/ +#if !_MODE_IHDEBUG_ && (_MODE_COMM_NO_ || !_MODE_COMM_HAVE_) +#ifndef _HMI_H_ +#define _HMI_H_ + +/************************************************************************** +--------------------------------- ²âÊÔÉèÖà -------------------------------- +**************************************************************************/ +//ÉèÖÃ˵Ã÷£ºÓж¨Òå = ²âÊÔÏÔʾ£¬ÎÞ¶¨Òå = Õý³£ÏÔʾ +//#define _TEST_DISP_ +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º²âÊÔÏÔʾÊý¾Ý1 +//²ÎÊý˵Ã÷£ºÊý¾ÝΪ16bit +//#define C_Data1_TestDisp SlopeCurr +#define C_Data1_TestDisp (AD_TmprIgbt << 8) + AD_TmprPan +//#define C_Data1_TestDisp AD_Current_Fst +//#define C_Data1_TestDisp AD_Current +//#define C_Data1_TestDisp AD_Volatage +//#define C_Data1_TestDisp (AD_Volatage << 8) + Vol.flo.integer +//#define C_Data1_TestDisp (Time_Syn << 8) + Count_Syn +//#define C_Data1_TestDisp Buf_PPGTMR +//#define C_Data1_TestDisp Status_PPGStop//PowerWork +//#define C_Data1_TestDisp RealPower//(AD_Current << 8) + PPGTMRL +//#define C_Data1_TestDisp (PPGTMRH << 8) + PPGTMRL +//#define C_Data1_TestDisp (Flag2_Error << 8) + Flag1_Error +//#define C_Data1_TestDisp (AD_VRef<< 8) + AD_Vdd +//#define C_Data1_TestDisp (Num_LxLowOn << 8) + Num_LxLowOff +//#define C_Data1_TestDisp (AD_Current << 8) + AD_Volatage +//#define C_Data1_TestDisp (AD_VRef << 8) + AD_Volatage +//#define C_Data1_TestDisp (Status_PPGStop << 8) + AD_TmprIgbt + +//²ÎÊýÃû³Æ£º²âÊÔÏÔʾÊý¾Ý2 +//²ÎÊý˵Ã÷£ºÊý¾ÝΪ16bit +#define C_Data2_TestDisp C_Data1_TestDisp//(AD_Current << 8) + AD_Volatage// + +/************************************************************************** +--------------------------------- °´¼üÉèÖà -------------------------------- +**************************************************************************/ +#define C_Key_OnOff TestOne(data[4],0) //¿ª¹Ø¼ü +#define C_Key_Add TestOne(data[4],3) //¼Ó¼ü +#define C_Key_Sub TestOne(data[3],3) //¼õ¼ü +#define C_Key_Time TestOne(data[3],0) //ʱ¼ä¼ü +//------------------------------------------------------------------------- +#define C_KeyValue_OnOff 1 //¿ª¹Ø¼ü +#define C_KeyValue_Add 2 //¼Ó¼ü +#define C_KeyValue_Sub 3 //¼õ¼ü +#define C_KeyValue_Time 4 //ʱ¼ä¼ü + +/************************************************************************** +--------------------------------- ÏÔʾÉèÖà -------------------------------- +**************************************************************************/ +#define Smg_Data1 ShowData[0] //ÊýÂë¹Ü1 +#define Smg_Data2 ShowData[2] //ÊýÂë¹Ü2 +#define Smg_Data3 ShowData[4] //ÊýÂë¹Ü3 +#define Smg_Data4 ShowData[6] //ÊýÂë¹Ü4 + +#define Led_Data1 ShowData[8] //LED1 +#define Led_Data2 ShowData[10] //LED2 +#define Led_Data3 ShowData[12] //LED3 +//------------------------------------------------------------------------- +#define On_Smg_XSD SetBit(Smg_Data1,4) //ÊýÂë¹ÜСÊýµã +#define On_Smg_MH SetBit(Smg_Data2,4) //ÊýÂë¹ÜðºÅ + +#define On_Led_M1 SetBit(Led_Data1,2) //M1ָʾµÆ +#define On_Led_M2 SetBit(Led_Data1,3) //M2ָʾµÆ +#define On_Led_M3 SetBit(Led_Data1,4) //M3ָʾµÆ +#define On_Led_M4 SetBit(Led_Data1,5) //M4ָʾµÆ +#define On_Led_M5 SetBit(Led_Data1,6) //M5ָʾµÆ +#define On_Led_M6 SetBit(Led_Data1,1) //M6ָʾµÆ +#define On_Led_M7 SetBit(Led_Data1,0) //M7ָʾµÆ + +/************************************************************************** +* ÊýÂë¹ÜÏÔʾ±àÂ룺bgc_deaf +**************************************************************************/ +#define Aa 0x02 +#define Bb 0x80 +#define Cc 0x20 +#define Dd 0x08 +#define Ee 0x04 +#define Ff 0x01 +#define Gg 0x40 +//------------------------------------------------------------------------- +#define SMG_0 Aa|Bb|Cc|Dd|Ee|Ff +#define SMG_1 Bb|Cc +#define SMG_2 Aa|Bb|Dd|Ee|Gg +#define SMG_3 Aa|Bb|Cc|Dd|Gg +#define SMG_4 Bb|Cc|Ff|Gg +#define SMG_5 Aa|Cc|Dd|Ff|Gg +#define SMG_6 Aa|Cc|Dd|Ee|Ff|Gg +#define SMG_7 Aa|Bb|Cc +#define SMG_8 Aa|Bb|Cc|Dd|Ee|Ff|Gg +#define SMG_9 Aa|Bb|Cc|Dd|Ff|Gg +#define SMG_A Aa|Bb|Cc|Ee|Ff|Gg +#define SMG_B Cc|Dd|Ee|Ff|Gg +#define SMG_C Aa|Dd|Ee|Ff +#define SMG_D Bb|Cc|Dd|Ee|Gg +#define SMG_E Aa|Dd|Ee|Ff|Gg +#define SMG_F Aa|Ee|Ff|Gg + +#define SMG_GG Gg +#define SMG_L Dd|Ee|Ff +#define SMG_O_MIN Cc|Dd|Ee|Gg +#define SMG_C_MIN Dd|Ee|Gg +#define SMG_K_MIN Dd|Ee|Ff|Gg + +/************************************************************************** +* ¹øµ×ζȶÔÓ¦ADÖµ +**************************************************************************/ +#define C_TmprPan_300C 245 +#define C_TmprPan_270C 225 +#define C_TmprPan_260C 220 +#define C_TmprPan_240C 219 +#define C_TmprPan_230C 217 +#define C_TmprPan_220C 216 +#define C_TmprPan_210C 210 +#define C_TmprPan_200C 208 +#define C_TmprPan_190C 204 +#define C_TmprPan_180C 195 +#define C_TmprPan_170C 192 +#define C_TmprPan_160C 188 +#define C_TmprPan_150C 179 +#define C_TmprPan_140C 170 +#define C_TmprPan_135C 163 +#define C_TmprPan_130C 155 +#define C_TmprPan_120C 142 +#define C_TmprPan_110C 125 +#define C_TmprPan_100C 111 +#define C_TmprPan_90C 94 +#define C_TmprPan_80C 74 +#define C_TmprPan_70C 62 +#define C_TmprPan_60C 55 +#define C_TmprPan_56C 53 +#define C_TmprPan_50C 37 +#define C_TmprPan_40C 16 + +/************************************************************************** +* Á¬ÐøµÍ¹¦ÂÊʱ¼ä +**************************************************************************/ +#define C_Num_LxLowOn_1D 1 +#define C_Num_LxLowOff_1D 9 + +#define C_Num_LxLowOn_2D 2 +#define C_Num_LxLowOff_2D 8 + +#define C_Num_LxLowOn_3D 3 +#define C_Num_LxLowOff_3D 7 + +#define C_Num_LxLowOn_4D 4 +#define C_Num_LxLowOff_4D 6 + +#define C_Num_LxLowOn_5D 5 +#define C_Num_LxLowOff_5D 5 + +#define C_Num_LxLowOn_6D 6 +#define C_Num_LxLowOff_6D 4 + +#define C_Num_LxLowOn_7D 7 +#define C_Num_LxLowOff_7D 3 + +#define C_Num_LxLowOn_8D 8 +#define C_Num_LxLowOff_8D 2 + +#define C_Num_LxLowOn_9D 9 +#define C_Num_LxLowOff_9D 1 + +#define C_Num_LxLowOn_10D 0 +#define C_Num_LxLowOff_10D 0 +//------------------------------------------------------------------------- +#define C_Num_LxLow_1D (C_Num_LxLowOff_1D<<8) + C_Num_LxLowOn_1D +#define C_Num_LxLow_2D (C_Num_LxLowOff_2D<<8) + C_Num_LxLowOn_2D +#define C_Num_LxLow_3D (C_Num_LxLowOff_3D<<8) + C_Num_LxLowOn_3D +#define C_Num_LxLow_4D (C_Num_LxLowOff_4D<<8) + C_Num_LxLowOn_4D +#define C_Num_LxLow_5D (C_Num_LxLowOff_5D<<8) + C_Num_LxLowOn_5D +#define C_Num_LxLow_6D (C_Num_LxLowOff_6D<<8) + C_Num_LxLowOn_6D +#define C_Num_LxLow_7D (C_Num_LxLowOff_7D<<8) + C_Num_LxLowOn_7D +#define C_Num_LxLow_8D (C_Num_LxLowOff_8D<<8) + C_Num_LxLowOn_8D +#define C_Num_LxLow_9D (C_Num_LxLowOff_9D<<8) + C_Num_LxLowOn_9D +#define C_Num_LxLow_10D (C_Num_LxLowOff_10D<<8)+ C_Num_LxLowOn_10D + +/************************************************************************** +* ÊýÂë¹Ü±àÂë±í¸ñ +**************************************************************************/ +const unsigned char Tab_Smg[] = +{ + SMG_0, // 0 + SMG_1, // 1 + SMG_2, // 2 + SMG_3, // 3 + SMG_4, // 4 + SMG_5, // 5 + SMG_6, // 6 + SMG_7, // 7 + SMG_8, // 8 + SMG_9, // 9 + SMG_A, // A + SMG_B, // B + SMG_C, // C + SMG_D, // D + SMG_E, // E + SMG_F, // F +}; + +/************************************************************************** +* ¹¦ÂÊÏÔʾ±í¸ñ +**************************************************************************/ +const unsigned char Tab_DispPower[] = +{ + 0, + 0x01, // 1µµ--100W + 0x02, // 2µµ--200W + 0x03, // 3µµ--300W + 0x04, // 4µµ--400W + 0x05, // 5µµ--500W + 0x06, // 6µµ--600W + 0x07, // 7µµ--700W + 0x08, // 8µµ--800W + 0x09, // 9µµ--900W + 0x10, //10µµ--1000W + 0x11, //11µµ--1100W + 0x12, //12µµ--1200W + 0x13, //13µµ--1300W + 0x14, //14µµ--1400W + 0x15, //15µµ--1500W + 0x16, //16µµ--1600W + 0x17, //17µµ--1700W + 0x18, //18µµ--1800W + 0x19, //19µµ--1900W + 0x20, //20µµ--2000W +}; + +/************************************************************************** +* Á¬ÐøµÍ¹¦ÂʸöÊý±í¸ñ +**************************************************************************/ +const unsigned int Tab_LxLowNum[] = +{ + 0, + C_Num_LxLow_1D, // 1µµ + C_Num_LxLow_2D, // 2µµ + C_Num_LxLow_3D, // 3µµ + C_Num_LxLow_4D, // 4µµ + C_Num_LxLow_5D, // 5µµ + C_Num_LxLow_6D, // 6µµ + C_Num_LxLow_7D, // 7µµ + C_Num_LxLow_8D, // 8µµ + C_Num_LxLow_9D, // 9µµ + C_Num_LxLow_10D, //10µµ +}; + +/************************************************************************** +* ζȿØÖƱí¸ñ +**************************************************************************/ +/*const unsigned int Tab_ModeTmpr[] = +{ + 0, + (unsigned int)(65 <<8) + 60, // 1µµ + (unsigned int)(75 <<8) + 70, // 2µµ + (unsigned int)(85 <<8) + 80, // 3µµ + (unsigned int)(95 <<8) + 90, // 4µµ + (unsigned int)(105 <<8) + 100, // 5µµ + (unsigned int)(115 <<8) + 110, // 6µµ + (unsigned int)(125 <<8) + 120, // 7µµ + (unsigned int)(135 <<8) + 130, // 8µµ + (unsigned int)(145 <<8) + 140, // 9µµ + (unsigned int)(155 <<8) + 150, //10µµ + (unsigned int)(165 <<8) + 160, //11µµ + (unsigned int)(175 <<8) + 170, //12µµ + (unsigned int)(185 <<8) + 180, //13µµ + (unsigned int)(195 <<8) + 190, //14µµ + (unsigned int)(205 <<8) + 200, //15µµ + (unsigned int)(210 <<8) + 205, //16µµ + (unsigned int)(215 <<8) + 210, //17µµ + (unsigned int)(220 <<8) + 215, //18µµ + (unsigned int)(225 <<8) + 220, //19µµ + (unsigned int)(230 <<8) + 225, //20µµ +};*/ + +/************************************************************************** +* ¹¦ÂÊÊä³ö±í¸ñ +**************************************************************************/ +const unsigned char Tab_DangOut[] = +{ + 0, + 1000/C_Mult_Power, // 1µµ--100W + 1000/C_Mult_Power, // 2µµ--200W + 1000/C_Mult_Power, // 3µµ--300W + 1000/C_Mult_Power, // 4µµ--400W + 1000/C_Mult_Power, // 5µµ--500W + 1000/C_Mult_Power, // 6µµ--600W + 1000/C_Mult_Power, // 7µµ--700W + 1000/C_Mult_Power, // 8µµ--800W + 1000/C_Mult_Power, // 9µµ--900W + 1000/C_Mult_Power, //10µµ--1000W + 1100/C_Mult_Power, //11µµ--1100W + 1200/C_Mult_Power, //12µµ--1200W + 1300/C_Mult_Power, //13µµ--1300W + 1400/C_Mult_Power, //14µµ--1400W + 1500/C_Mult_Power, //15µµ--1500W + 1600/C_Mult_Power, //16µµ--1600W + 1700/C_Mult_Power, //17µµ--1700W + 1800/C_Mult_Power, //18µµ--1800W + 1900/C_Mult_Power, //19µµ--1900W + 2000/C_Mult_Power, //20µµ--2000W +}; + +/************************************************************************** +--------------------------------- º¯ÊýÉùÃ÷ -------------------------------- +**************************************************************************/ +void Init_HMI(); +void Deal_HMI(); + +/************************************************************************** +--------------------------------- ±äÁ¿¶¨Òå -------------------------------- +**************************************************************************/ +volatile unsigned char ShowData[14]; +volatile unsigned char KeyValue; + +volatile unsigned char DangWei,DangOut; + +volatile unsigned char Delay_Flash,Wait_Flash; +volatile unsigned char Delay_Sec,Delay_5S; +volatile unsigned char Delay_NoPan,Delay_Error; + +volatile unsigned char Delay_DS; +volatile unsigned char Min_Set,Hour_Set; + +volatile unsigned int Sec_Mode; +volatile unsigned char Min_Mode; +volatile unsigned char Cnt1_Mode,Cnt2_Mode; + +volatile bit B_OnOff; +volatile bit B_KeyLong; +volatile bit B_DingShi,B_TimeSet; +volatile bit B_Dly_PowerOn,B_DispFlash,B_DispTurn; +volatile bit B_TmprStop; + +/************************************************************************** +**************************************************************************/ +#endif +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/IH-CMS79F53X5-C-V1.0.cmw b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/IH-CMS79F53X5-C-V1.0.cmw new file mode 100644 index 0000000..492f9cb --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/IH-CMS79F53X5-C-V1.0.cmw @@ -0,0 +1,31 @@ +[PROJECT] +Version=2.03.25.5 +Compile=1 +Device=CMS79F5335 +OptValue=-local,-asmfile,+asm,-speed,+space,-debug +RuntimeValue= +WarningValue=-9 +config=F7FD,F9EF, +[FILE] +SourceFile=Subfunction.c +SourceFile=Setup_IO.c +SourceFile=Main.c +SourceFile=IRQ.c +SourceFile=ADC.c +SourceFile=PPG.c +SourceFile=OutPut.c +SourceFile=HMI.c +SourceFile=Communicate_Uart.c +SourceFile=__REL_IhDebug.c +HeadFile=Setup_IO.h +HeadFile=Setup_Global.h +HeadFile=Define_Type.h +HeadFile=Define_Global.h +HeadFile=HMI.h +HeadFile=Communicate.h +HeadFile=__CMS_IhPlus.h +HeadFile=__REL_IhDebug.h +LibraryFile=__REL_IhDebug_Comm_V1.0.0.lpp +LibraryFile=__CMS_IhPlus_CMS79F53x5_V1.0.0.lpp +OtherFile=¹¤³Ì°æ±¾ËµÃ÷.txt +OtherFile=¿â°æ±¾ËµÃ÷.txt \ No newline at end of file diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/IH-CMS79F53X5-C-V1.0.cmx b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/IH-CMS79F53X5-C-V1.0.cmx new file mode 100644 index 0000000..4595c5d Binary files /dev/null and b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/IH-CMS79F53X5-C-V1.0.cmx differ diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/IRQ.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/IRQ.c new file mode 100644 index 0000000..312bdc7 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/IRQ.c @@ -0,0 +1,100 @@ +/************************************************************************** +**************************************************************************/ +#include "Define_Global.h" + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_BackPress +* º¯Êý¹¦ÄÜ£º¹ýѹ´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖжϵ÷Óà +**************************************************************************/ +void Deal_BackPress() +{ + if(CM1IF) + { //1¼¶¹ýѹ + CM1IF = 0; + + B_Protect_BackPress = 1; //½øÈë¹ýѹ±£»¤ + Time_BackPress = 0; + } + //--------------------------------------------------------------------- + if(Time_BackPress >= 10) //83.33ms\100ms£¬¹ýѹ±£»¤ÑÓʱ¼ÆÊ± + { + B_Protect_BackPress = 0; //Í˳ö¹ýѹ±£»¤ + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_IgbtOVUV +* º¯Êý¹¦ÄÜ£ºIGBTÇý¶¯¹ýǷѹ´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖжϵ÷Óà +**************************************************************************/ +void Deal_IgbtOVUV() +{ + if(!Pin_Igbt_OVUV) //¼ì²â¿ÚΪµÍµçƽ + { //IGBTÇý¶¯¹ýǷѹ±£»¤ + B_Protect_Stop = 1; //Ó²¼þ±£»¤Í£Ö¹ + Delay_ProtectStop = 0; + + Flag_PPG = 0; //PPGÊä³ö¹Ø±Õ + B_PPG_On = B_PPG_Out = 0; + B_Pan_Error = B_Pan_No = B_Pan_Have = 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDeal_IntTime +* º¯Êý¹¦ÄÜ£ºÖжÏʱ¼ä´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖжϵ÷Óà +**************************************************************************/ +void Deal_IntTime() +{ + static unsigned char Delay_IntTime; + //--------------------------------------------------------------------- + if(B_Zero_No) + { //ÎÞ¹ýÁãÐźŠ+ if(++Delay_IntTime >= 10000/C_TimeUS_Int) //10ms + { + B_Zero_Time = 1; //¹ýÁ㷭ת£¨Ê±¼ä´¦Àí£© + } + } + //--------------------------------------------------------------------- + if(B_Zero_Time) //60Hz=8.333ms£¬50Hz\ÎÞ¹ýÁã=10ms + { + B_Zero_Time = 0; + Delay_IntTime = 0; + + Time_BackPress++; //¹ýѹ±£»¤´¦Àí¼ÆÊ± + Time_HMI++; //ÈË»ú½çÃæ´¦Àí¼ÆÊ± + } +} + +/************************************************************************** +--------------------------------- Öжϴ¦Àí -------------------------------- +**************************************************************************/ +void interrupt Isr_Timer() +{ //¶¨Ê±Æ÷ÖÐ¶Ï + if(TMR2IF) + { + TMR2IF = 0; //ÇåÖжϱêÖ¾ + + Deal_BackPress(); //¹ýѹ´¦Àí + Deal_IgbtOVUV(); //IGBTÇý¶¯¹ýǷѹ´¦Àí + Deal_IntTime(); //ÖжÏʱ¼ä´¦Àí + + __CMS_Plus_Interrupt(); //ÖжÏÔöÇ¿´¦Àí + Check_AD(); //AD¼ì²â + + #if _MODE_IHDEBUG_ + REL_IhDebug_Int(); //IHµ÷ÊÔ´¦Àí£¨Öжϣ© + #elif !_MODE_COMM_NO_ + Communicate(); //оƬͨÐÅ + #endif + } +} + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Main.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Main.c new file mode 100644 index 0000000..54975cb --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Main.c @@ -0,0 +1,306 @@ +/************************************************************************** +**************************************************************************/ +#include "Define_Global.h" + +/************************************************************************** +* º¯ÊýÃû³Æ£ºInit_UserRam +* º¯Êý¹¦ÄÜ£º³õʼ»¯Óû§¼Ä´æÆ÷ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£º³õʼ»¯µ÷Óà +**************************************************************************/ +void Init_UserRam() +{ + #if _MODE_COMM_NO_ + B_Comm_No = 1; //ÎÞͨÐÅģʽ + #elif _MODE_COMM_HAVE_ + B_Comm_Have = 1; //ÓÐͨÐÅģʽ + #endif + + Buzz_Long_One(); //·äÃùÆ÷³¤Ãù1Éù + B_Adc_Curr = 1; //¼ì²â¹¤×÷µçÁ÷AD + //--------------------------------------------------------------------- + //ÅäÖûº´æ³õʼ»¯£º + Buf_PPGMin = C_PPGMin; + Buf_PPGMax = C_PPGMax; + Buf_PPGMax_Steel = C_PPGMax_Steel; + Buf_PPGMax_Iron = C_PPGMax_Iron; + + Buf_Power_CurrerConst = (unsigned int)(C_Vol_Low * C_Currer_Const); + Buf_PowerLose_VHigh = C_PowerLose_VHigh; + Buf_PowerLose_VLow = C_PowerLose_VLow; + + Buf_Vol_LowErr_In = C_Vol_LowErr_In - C_Vol_Comp; + Buf_Vol_LowErr_Out = C_Vol_LowErr_Out - C_Vol_Comp; + Buf_Vol_HighErr_In = C_Vol_HighErr_In - C_Vol_Comp; + Buf_Vol_HighErr_Out = C_Vol_HighErr_Out - C_Vol_Comp; + + Buf_AD_Pan_FanOn = C_AD_Pan_FanOn; + Buf_AD_Pan_FanOff = C_AD_Pan_FanOff; + Buf_AD_Pan_OverIn = C_AD_Pan_OverIn; + Buf_AD_Pan_OverOut = C_AD_Pan_OverOut; + + Buf_AD_Igbt_FanOn = C_AD_Igbt_FanOn; + Buf_AD_Igbt_FanOff = C_AD_Igbt_FanOff; + Buf_AD_Igbt_OverIn = C_AD_Igbt_OverIn; + Buf_AD_Igbt_OverOut = C_AD_Igbt_OverOut; + Buf_AD_Igbt_HighIn = C_AD_Igbt_HighIn; + Buf_AD_Igbt_HighOut = C_AD_Igbt_HighOut; + //--------------------------------------------------------------------- + ValueOPA_Set = 0B00000000; + + #ifdef _TEST_PGAOUT_ + ValuePGA_Set = 0B10000010 | ((C_Times_PGA & 0x03) << 5); + #else + ValuePGA_Set = 0B10000000 | ((C_Times_PGA & 0x03) << 5); + #endif + + #ifdef _TEST_CMPOUT_ + ValueCM_Test = 0x08 | (C_CMOUTEN_Num & 0x07); + #else + ValueCM_Test = 0; + #endif + + ValuePPG_Single = C_PPGSingle; + ValueCnt_HaveNoPan = C_Vaule_HaveNoPan; + + ValueTime_PPGDly = C_PPGDly; + + ValueVol_VolSurge = C_Vol_VolSurge; + ValueVol_CurrSurge = C_Vol_CurrSurge; + ValueVol_OnStep = C_Vol_OnStep; + + ValueVol_BackPress1 = C_Vol_BackPress1; + ValuePPG_BackPress1 = C_PPG_BackPress1; + ValueVol_BackPress2 = C_Vol_BackPress2; +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºClean_Ram +* º¯Êý¹¦ÄÜ£ºÇåͨÓüĴæÆ÷ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£º³õʼ»¯µ÷Óà +**************************************************************************/ +void Clean_Ram() +{ + CLRWDT(); //Çå¿´ÃŹ· + + for(FSR = 0x20; FSR < 0x7F; FSR++) + { + INDF = 0; + } + for(FSR = 0xA0; FSR < 0xEF; FSR++) + { + INDF = 0; + } + IRP = 1; + + for(FSR = 0x20; FSR < 0x7F; FSR++) + { + INDF = 0; + } + for(FSR = 0xA0; FSR < 0xEF; FSR++) + { + INDF = 0; + } + IRP = 0; +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºInit_System +* º¯Êý¹¦ÄÜ£º³õʼ»¯ÏµÍ³ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£º³õʼ»¯µ÷Óà +**************************************************************************/ +void Init_System() +{ + NOP(); + INTCON = 0; //ÖжϽûÖ¹ + NOP(); + NOP(); + NOP(); + NOP(); + CLRWDT(); //Çå¿´ÃŹ· + + OSCCON = 0x70; //ÄÚ²¿Õñµ´ÆµÂÊΪ32MHz£¨Ä¬ÈÏΪ16MHz£© + OPTION_REG = 0B00001100; //WDT·ÖƵ£º1/16 + + PORTA = C_Init_PORTA; + PORTB = C_Init_PORTB; //³õʼ»¯IOµçƽ + PORTC = C_Init_PORTC; + + #if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_ + WPUA = SetWPUX_CommNo(0xA); + WPUB = SetWPUX_CommNo(0xB); //³õʼ»¯IOÉÏÀ­ + WPUC = SetWPUX_CommNo(0xC); + + TRISA = SetTRISX_CommNo(0xA); + TRISB = SetTRISX_CommNo(0xB); //³õʼ»¯IO·½Ïò + TRISC = SetTRISX_CommNo(0xC); + #else + WPUA = SetWPUX_CommHave(0xA); + WPUB = SetWPUX_CommHave(0xB); //³õʼ»¯IOÉÏÀ­ + WPUC = SetWPUX_CommHave(0xC); + + TRISA = SetTRISX_CommHave(0xA); + TRISB = SetTRISX_CommHave(0xB); //³õʼ»¯IO·½Ïò + TRISC = SetTRISX_CommHave(0xC); + #endif + + PORTA = C_Init_PORTA; + PORTB = C_Init_PORTB; //³õʼ»¯IOµçƽ + PORTC = C_Init_PORTC; + + INTCON = 0; //ÖжϽûÖ¹ + INTCON2 = 0; + PIR1 = 0; //ÇåÖжÏÇëÇó±êÖ¾ + PIR2 = 0; + PIR3 = 0; + PIE1 = 0; //ÇåÖжÏÔÊÐí±êÖ¾ + PIE2 = 0; + PIE3 = 0; + + OPTION_REG = 0B00000111; //Timer0·ÖƵ£º1/256 + TMR0 = 0; + + TMR1H = 0; + TMR1L = 0; + T1CON = 0B00110001; //ʹÄÜTimer1£¬Ô¤·ÖƵ=8 + + PR2 = C_TimeUS_Int * 4; //ÉèÖÃTimer2ʱ¼ä + T2CON = 0B00001100; //ʹÄÜTimer2£¬Ô¤·ÖƵ=1£¬ºó·ÖƵ=2 + TMR2IE = 1; //Timer2ÖжÏʹÄÜ + + INTCON = 0xC0; //ÖжÏʹÄÜ +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºRefurbish_IO +* º¯Êý¹¦ÄÜ£ºË¢ÐÂIO +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖ÷Ñ­»·µ÷Ó㬿ÉÔöÇ¿¿¹¸ÉÈÅÄÜÁ¦ +*¡¾×¢ Òâ¡¿£ºRB1±ØÐëÉèÎªÍÆÍìÊä³ö£¬RB2±ØÐëÉèΪÉÏÀ­ÊäÈ루³ÌÐòĬÈÏÉèÖ㬿ɲ»¸Ä¶¯£© +**************************************************************************/ +void Refresh_IO() +{ + #if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_ + if(B_Comm_No) + #endif + #if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_ + { + WPUA = SetWPUX_CommNo(0xA); + WPUB = SetWPUX_CommNo(0xB); + WPUC = SetWPUX_CommNo(0xC); + + TRISA = SetTRISX_CommNo(0xA); + TRISB = SetTRISX_CommNo(0xB); + TRISC = SetTRISX_CommNo(0xC); + } + #endif + #if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_ + else + #endif + #if !_MODE_COMM_NO_ + { + WPUA = SetWPUX_CommHave(0xA); + WPUB = SetWPUX_CommHave(0xB); + WPUC = SetWPUX_CommHave(0xC); + + TRISA = SetTRISX_CommHave(0xA); + TRISB = SetTRISX_CommHave(0xB); + TRISC = SetTRISX_CommHave(0xC); + } + #endif +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºRefurbish_Sfr +* º¯Êý¹¦ÄÜ£ºË¢ÐÂÌØÊ⹦ÄܼĴæÆ÷ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖ÷Ñ­»·µ÷Ó㬿ÉÔöÇ¿¿¹¸ÉÈÅÄÜÁ¦ +**************************************************************************/ +void Refresh_Sfr() +{ + PIE1 = 0x02; + PIE2 = 0; + PIE3 = 0; + INTCON = 0xC0; //ÖжÏʹÄÜ + INTCON2 = 0; + + OPTION_REG = 0B00000111; //Timer0·ÖƵ£º1/256 + + if(0B00110001 != T1CON) //T1CONÖµ²»±ä¾Í²»Ð´ + { //д²Ù×÷»áÓ°Ïì¼ÆÊ±£¬ÔÚT1CONûÓÐÂÒµÄʱºò²»Ð´ + T1CON = 0B00110000; + T1CON |= 0x01; + } + + PR2 = C_TimeUS_Int * 4; //ÉèÖÃTimer2ʱ¼ä + if(0B00001100 != T2CON) //T2CONÖµ²»±ä¾Í²»Ð´ + { //д²Ù×÷»áÓ°Ïì¼ÆÊ±£¬ÔÚT2CONûÓÐÂÒµÄʱºò²»Ð´ + T2CON = 0B00001000; + T2CON |= 0x04; + } +} + +/************************************************************************** +-------------------------------- Ö÷Ñ­»·´¦Àí ------------------------------- +**************************************************************************/ +void main() @0x0800 +{ + CRCDL--;CRCDH--; + + Clean_Ram(); //ÇåͨÓüĴæÆ÷ + Init_System(); //³õʼ»¯ÏµÍ³ + + #if !_MODE_IHDEBUG_ && (_MODE_COMM_NO_ || !_MODE_COMM_HAVE_) + Init_HMI(); //³õʼ»¯ÈË»ú½çÃæ + #endif + Delay_Xms(200); //ÉϵçÑÓʱ + Init_UserRam(); //³õʼ»¯Óû§¼Ä´æÆ÷ + + while(1) + { + if(TMR1IF) + { + TMR1IF = 0; + TMR1L = 0xFFFF - C_TimeMS_Main * 4000; + TMR1H = (0xFFFF - C_TimeMS_Main * 4000) >> 8; + + CLRWDT(); //Çå¿´ÃŹ· + Refresh_IO(); //Ë¢ÐÂIO + Refresh_Sfr(); //Ë¢ÐÂÌØÊ⹦ÄܼĴæÆ÷ + + Deal_Adc(); //ADC´¦Àí + Set_OutPut(); //Êä³öÉèÖà + Set_PPGWork(); //PPG¹¤×÷ÉèÖà + + #if _MODE_IHDEBUG_ + REL_IhDebug_Main(); //IHµ÷ÊÔ´¦Àí£¨Ö÷Ñ­»·£© + #else + #if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_ + if(B_Comm_No) + #endif + #if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_ + { + Deal_HMI(); //ÈË»ú½çÃæ´¦Àí + } + #endif + #if !_MODE_COMM_NO_ && !_MODE_COMM_HAVE_ + else + #endif + #if !_MODE_COMM_NO_ + { + Deal_CommData(); //ͨÐÅÊý¾Ý´¦Àí + } + #endif + #endif + } + } +} + + \ No newline at end of file diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/OutPut.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/OutPut.c new file mode 100644 index 0000000..9e23ce7 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/OutPut.c @@ -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(); //·äÃùÆ÷Êä³ö +} + + \ No newline at end of file diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/PPG.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/PPG.c new file mode 100644 index 0000000..2280a7d --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/PPG.c @@ -0,0 +1,580 @@ +/************************************************************************** +**************************************************************************/ +#include "Define_Global.h" + +/************************************************************************** +* º¯ÊýÃû³Æ£ºCalc_Electric +* º¯Êý¹¦ÄÜ£º¼ÆË㹤×÷µçÁ¿ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Ó㬼ÆËã½á¹û·ÅÓÚElec½á¹¹ÖÐ +* P*t = 0.01¶È = 1¶È/100 = 1KW.h/100 = 36000W.s +* P*7/1000 = 36*7 = 252 +**************************************************************************/ +void Calc_Electric() +{ + static unsigned char ElecTime,ElecBasic; + //--------------------------------------------------------------------- + if(B_PPG_Out && (0 == --ElecTime)) + { + //256*256*256*7/1000/2 = 0xE560£¬·Å´ó256^3±¶ + //ÔËËã½á¹ûÈ¡×î¸ßλ»¹Ô­Êý¾Ý + ElecBasic += ((unsigned long)0xE560 * PowerReal) >> 24; + + //1sΪ7¸öÖµ£¬Îó²î²¹³¥4s¼´28¸öÖµ£¬252-4*7=224 + if(ElecBasic >= 224) + { + ElecBasic -= 224; + + if(++Elec.flo.radix >= 100) //0.01¶È + { + Elec.flo.radix = 0; + Elec.flo.integer++; //1¶È + } + } + + ElecTime = 500/C_TimeMS_Main; //0.5s + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºIgbt_Protect +* º¯Êý¹¦ÄÜ£ºIGBTÓ²¼þ±£»¤ +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Igbt_Protect() +{ + static bit B_Bak_IgbtProtect; + + volatile unsigned char i; + //--------------------------------------------------------------------- + if(CM1COF || CM2IF || CM3IF || CM4IF || CM5IF || PPGWDTIF) + { + i = 0; + if(CM1COF) SetBit(i,0); //1¼¶¹ýѹ±È½ÏÆ÷¼ÆÊýÒç³ö + if(CM2IF) SetBit(i,1); //µçѹÀËÓ¿ + if(CM3IF) SetBit(i,2); //µçÁ÷ÀËÓ¿ + if(CM4IF) SetBit(i,3); //2¼¶¹ýѹ + if(CM5IF) SetBit(i,4); //µ¼Í¨Ì¨½×¹ý¸ß + if(PPGWDTIF) SetBit(i,5); //PPG¿´ÃŹ·Òç³ö + + Status_PPGStop = i; //PPGֹͣ״̬ + + B_ProtectCM_Restart = 1; //±£»¤±È½ÏÆ÷ÖØÆô + B_Protect_Stop = 1; //Ó²¼þ±£»¤Í£Ö¹ + Delay_ProtectStop = 0; + + if(!B_Bak_IgbtProtect) + { + if(Count_IgbtProtect < 0xFFFF) + { + Count_IgbtProtect++; //IGBTÓ²¼þ±£»¤¼ÆÊý+1 + } + } + B_Bak_IgbtProtect = 1; //±¸·Ý״̬ + } + else + { + B_Bak_IgbtProtect = 0; //±¸·Ý״̬ + } + //--------------------------------------------------------------------- + if(B_Protect_Stop) + { //Ó²¼þ±£»¤Í£Ö¹ + Flag_PPG = 0; //PPGÊä³ö¹Ø±Õ + B_PPG_On = B_PPG_Out = 0; + B_Pan_Error = B_Pan_No = B_Pan_Have = 0; + + if(++Delay_ProtectStop > 2000/C_TimeMS_Main) //2s + { + Delay_ProtectStop = 0; + + B_Protect_Stop = 0; //Í˳öÓ²¼þ±£»¤Í£Ö¹×´Ì¬ + Status_PPGStop = 0; + } + } + //--------------------------------------------------------------------- + CM1COF = 0; //Çå±È½ÏÆ÷±êÖ¾ + CM2IF = 0; + CM3IF = 0; + CM4IF = 0; + CM5IF = 0; + PPGWDTIF = 0; + + if(!B_Heat_En) + { //¼ÓÈÈ¹Ø±Õ + Count_IgbtProtect = 0; //ÇåIGBTÓ²¼þ±£»¤¼ÆÊý + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºSet_SlopeCurr +* º¯Êý¹¦ÄÜ£ºµçÁ÷бÂÊÉèÖà +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Set_SlopeCurr() +{ + static unsigned char OldAdjust; + static bit B_Init_CurrSlope; + + volatile unsigned char i,j; + //--------------------------------------------------------------------- + if(!B_Init_CurrSlope) //µçÁ÷бÂʵ÷ÕûÖµ³õʼ»¯ + { + i = Memory_Read(C_EEAddr_CheckAA); + j = Memory_Read(C_EEAddr_Check55); + + if((0xAA == i) && (0x55 == j)) + { + i = Memory_Read(C_EEAddr_DataP); + j = (unsigned)~Memory_Read(C_EEAddr_DataI); + + if(i == j) + { + SlopeCurr_Adjust = i; //EEÊý¾ÝУÑéͨ¹ý£¬Ñ¡ÓÃEE¶Áȡֵ + } + else + { + SlopeCurr_Adjust = 0x80; //EEÊý¾ÝУÑ鲻ͨ¹ý£¬Ñ¡ÓÃĬÈÏÖµ + } + } + else + { + SlopeCurr_Adjust = 0x80; //EEÊý¾ÝУÑ鲻ͨ¹ý£¬Ñ¡ÓÃĬÈÏÖµ + } + + OldAdjust = SlopeCurr_Adjust; + B_Init_CurrSlope = 1; //³õʼ»¯Íê³É + } + //--------------------------------------------------------------------- + if(OldAdjust != SlopeCurr_Adjust) //µçÁ÷бÂʵ÷ÕûֵдÈëEE + { + i = 0; + i |= Memory_Write(C_EEAddr_CheckAA,0xAA); + i |= Memory_Write(C_EEAddr_Check55,0x55); + i |= Memory_Write(C_EEAddr_DataP,SlopeCurr_Adjust); + i |= Memory_Write(C_EEAddr_DataI,(unsigned)~SlopeCurr_Adjust); + + if(0 == i) + { //дÈëEE³É¹¦ + OldAdjust = SlopeCurr_Adjust; //¸üеçÁ÷бÂʵ÷ÕûÖµ¾ÉÖµ + } + } + //--------------------------------------------------------------------- + if(SlopeCurr_Adjust & 0x80) //µçÁ÷бÂʵ÷Õû + { + SlopeCurr = SlopeCurr_Set + (((unsigned int)SlopeCurr_Adjust & 0x7F) << 4); + } + else + { + SlopeCurr = SlopeCurr_Set - (((unsigned int)0x80 - SlopeCurr_Adjust) << 4); + } + + #if _MODE_IHDEBUG_ + if(B_Test_SlopeCurr) //µçÁ÷бÂʲâÊÔ + { + SlopeCurr = SlopeCurr_Test; //²âÊÔµçÁ÷бÂÊ + } + #endif +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºSet_PPGPower +* º¯Êý¹¦ÄÜ£ºPPG¹¦ÂÊÉèÖà +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +void Set_PPGPower() +{ + static unsigned char Cnt_AddPPG,Cnt_SubPPG; + static unsigned int Delay_LosePan; + static bit B_PPGStop1,B_PPGStop2; + + volatile unsigned int realpower,setpower; + volatile unsigned int data; + volatile unsigned char i,j,x,y; + /*********************************************************************/ + if(!B_CurrAdc_Fst || !B_PPG_En) + { //µçÁ÷AD³õÖµ¼ì²âδÍê³É¡¢Î´Ê¹ÄÜPPGÊä³ö + B_PPG_On = 0; //PPGÍ£Ö¹ + B_PPG_Out = 0; //PPGÊä³ö¹Ø±Õ + + B_PPGStop1 = 1; //PPGÍ£Ö¹ + B_PPGStop2 = 0; + + Delay_CheckPan = 0; //Çå¼ì¹øÑÓʱʱ¼ä + } + else if(B_PPGStop_CheckPan || B_PPGStop_NoCheck) + { + B_PPG_On = 0; //PPGÍ£Ö¹ + B_PPG_Out = 0; //PPGÊä³ö¹Ø±Õ + + B_PPGStop1 = 0; + B_PPGStop2 = 1; //PPGÔÝÍ£ + + if(B_PPGStop_CheckPan || B_Pan_No) + { + if(Delay_CheckPan) + { //¼ì¹øÑÓʱ¼ÆÊ± + Delay_CheckPan--; + } + else + { //¼ì¹øÑÓʱÍê³É + Delay_CheckPan = C_Time_StopCheck; //PPGÔÝÍ£¼ì¹ø¼ä¸ôʱ¼ä + + B_Pan_Check = 1; //¼ì¹ø + } + } + else + { + Delay_CheckPan = 0; //Çå¼ì¹øÑÓʱʱ¼ä + } + } + else + { + if(!B_Pan_Have || B_PPGStop1 || B_PPGStop2) + { + B_PPG_Out = 0; //PPGÊä³ö¹Ø±Õ + + if(!Delay_CheckPan || B_PPGStop2) + { //¼ì¹øÑÓʱÍê³É + Delay_CheckPan = C_Time_CheckPan; //Õý³£¹¤×÷¼ì¹ø¼ä¸ôʱ¼ä + + B_Pan_Check = 1; //¼ì¹ø + } + else + { //¼ì¹øÑÓʱ¼ÆÊ± + Delay_CheckPan--; + } + + B_PPGStop1 = B_PPGStop2 = 0; + } + else if(B_Pan_Check) + { + B_PPG_Out = 0; + } + else + { + Delay_CheckPan = 0; //Çå¼ì¹øÑÓʱʱ¼ä + + if(!B_PPG_Out) + { + B_PPG_Out = 1; //PPGÊä³ö + + B_PPGTMR_WriteLock = 1; //дÉÏËø + if(B_Vol_Low) + { + if(B_Pan_Iron) + { + Buf_PPGTMR = C_PPGFirst_VL_Iron; + } + else + { + Buf_PPGTMR = C_PPGFirst_VL_Steel; + } + } + else + { + if(B_Pan_Iron) + { + Buf_PPGTMR = C_PPGFirst_Iron; + } + else + { + Buf_PPGTMR = C_PPGFirst_Steel; + } + } + B_PPGTMR_WriteLock = 0; //д½âËø + } + } + + B_PPG_On = 1; //PPG¿ªÆô + } + //--------------------------------------------------------------------- + if(!B_PPG_Out) + { //PPGÊä³ö¹Ø±Õ + B_CurrAdc_Once = 0; + CurrentReal = PowerReal = 0; + + B_Pan_LoseDly = 0; + return; + } + /*********************************************************************/ + //ʵ¼Ê¹¦ÂʼÆËã + //бÂÊ·Å´óÁË256^2±¶£¬ÔËËã½á¹ûÈ¡Öмä2×Ö½ÚÏ൱ÓÚʵ¼ÊµçÁ÷·Å´óÁË256±¶ + CurrentReal = ((unsigned long)SlopeCurr * AD_Current) >> 8; + i = SlopeCurr >> 8; + + if(B_Vol_Low) + { //µÍÑ¹Çø¼äµÄʵ¼Ê¹¦ÂʼÆËã + PowerReal = ((unsigned long)C_Vol_Low * CurrentReal) >> 8; + realpower = ((unsigned long)C_Vol_Low * (CurrentReal + i)) >> 8; + } + else + { + PowerReal = (((unsigned long)Vol.all + (C_Vol_Comp << 8)) * CurrentReal) >> 16; + realpower = (((unsigned long)Vol.all + (C_Vol_Comp << 8)) * (CurrentReal + i)) >> 16; + } + //--------------------------------------------------------------------- + //É趨¹¦ÂʼÆËã + PowerSet = (unsigned int)PowerWork * C_Mult_Power; //ÆäËûÇø¼äµÄÉ趨¹¦ÂÊÖµ¼ÆËã + + if(B_Vol_Low) + { //µÍÑ¹Çø¼äµÄÉ趨¹¦ÂÊÖµ¼ÆËã + PowerSet = Buf_Power_CurrerConst; + } + else if(B_Vol_Mid) + { //µÍÖÐÑ¹Çø¼äµÄÉ趨¹¦ÂÊÖµ¼ÆËã + if(Vol.flo.integer < (C_Vol_Low - C_Vol_Comp)) + { + PowerSet = Buf_Power_CurrerConst; + } + else if(Vol.flo.integer <= (C_Vol_Mid - C_Vol_Comp)) + { //ÏßÐÔϽµ¹¦ÂÊ£¬ÏàͬµµÎ»Ï£¬²»Í¬µÄµçѹ²ÉÓò»Í¬µÄ¹¦ÂÊ + if(PowerSet > Buf_Power_CurrerConst) + { + data = PowerSet - Buf_Power_CurrerConst; + data = (unsigned long)data * 256 / (C_Vol_Mid - C_Vol_Low); + data = ((unsigned long)data * (unsigned char)(C_Vol_Mid - C_Vol_Comp - Vol.flo.integer)) >> 8; + + PowerSet -= data; + } + } + } + /*********************************************************************/ + if(!B_Pan_LoseDly) + { //µçÁ÷¶ª¹ø¼ì²âÑÓʱδÍê³É + B_CurrAdc_Once = 0; + } + #ifdef _TEST_PPGOUT_ //PPGÊä³ö²âÊÔ + else if(1) + { + B_CurrAdc_Once = 0; + + B_PPGTMR_WriteLock = 1; //дÉÏËø + Buf_PPGTMR = _TEST_PPGOUT_; + B_PPGTMR_WriteLock = 0; //д½âËø + } + #elif _MODE_IHDEBUG_ + else if(B_Test_PPGOut && PPGTMR_TestPPG) + { + B_CurrAdc_Once = 0; + + B_PPGTMR_WriteLock = 1; //дÉÏËø + Buf_PPGTMR = PPGTMR_TestPPG; + B_PPGTMR_WriteLock = 0; //д½âËø + } + #endif + //--------------------------------------------------------------------- + //µ÷Õû¹¦ÂÊ£º¸ù¾Ýʵ¼Ê¹¦ÂʺÍÉ趨¹¦ÂÊ£¬Êä³öPPG + else if(B_CurrAdc_Once) + { + B_CurrAdc_Once = 0; //¹¤×÷µçÁ÷ADCÍê³ÉÒ»´Î£¬µ÷ÕûÒ»´Î¹¦ÂÊ + + B_PPGTMR_ReadLock = 1; //¶ÁÉÏËø + Value_PPGTMR = Buf_PPGTMR; //¶ÁÈ¡µ±Ç°PPGTMRÖµ + B_PPGTMR_ReadLock = 0; //¶Á½âËø + + B_PPGTMR_Adjust = 1; //PPGTMRµ÷Õû + + if((PowerReal < PowerSet) && (realpower < PowerSet)) + { //ʵ¼Ê¹¦ÂʱÈÉ趨¹¦ÂÊС£¬Ôö¼ÓPPG + Cnt_SubPPG = 0; + + data = PowerSet - PowerReal; //»ñµÃ¹¦ÂʲîÖµ + x = data; + y = data >> 8; + + if(0 == y) + { + {i = 2; j = 1;} //¹¦ÂʲîÖµ<8W + if(x & 0x08) {i = 2; j = 1;} //¹¦ÂʲîÖµ>=8W + if(x & 0x10) {i = 2; j = 2;} //¹¦ÂʲîÖµ>=16W + if(x & 0x20) {i = 1; j = 3;} //¹¦ÂʲîÖµ>=32W + if(x & 0x40) {i = 1; j = 4;} //¹¦ÂʲîÖµ>=64W + if(x & 0x80) {i = 1; j = 5;} //¹¦ÂʲîÖµ>=128W + } + else + { //¹¦ÂʲîÖµ>=256W + i = 0; j = 10; + } + + if(B_Protect_BackPress) + { //¹ýѹ±£»¤ + Cnt_AddPPG = 0; + } + else if(++Cnt_AddPPG >= i) + { + Cnt_AddPPG = 0; + Value_PPGTMR += j; //PPGÔö¼Ó + + if(B_Pan_Iron) data = Buf_PPGMax_Iron; + else if(B_Pan_Steel) data = Buf_PPGMax_Steel; + else data = Buf_PPGMax; + + if(Value_PPGTMR > data) //ÅжÏÊÇ·ñÒÑ´ïµ½É趨×î´óÖµ + { + Value_PPGTMR = data; + } + } + } + else if((PowerReal > PowerSet) && (realpower > PowerSet)) + { //ʵ¼Ê¹¦ÂʱÈÉ趨¹¦Âʴ󣬼õСPPG + Cnt_AddPPG = 0; + + data = realpower - PowerSet; //»ñµÃ¹¦ÂʲîÖµ + x = data; + y = data >> 8; + + if(0 == y) + { + {i = 4; j = 1;} //¹¦ÂʲîÖµ<8W + if(x & 0x08) {i = 4; j = 1;} //¹¦ÂʲîÖµ>=8W + if(x & 0x10) {i = 4; j = 2;} //¹¦ÂʲîÖµ>=16W + if(x & 0x20) {i = 2; j = 3;} //¹¦ÂʲîÖµ>=32W + if(x & 0x40) {i = 1; j = 16;} //¹¦ÂʲîÖµ>=64W + if(x & 0x80) {i = 0; j = 32;} //¹¦ÂʲîÖµ>=128W + } + else + { //¹¦ÂʲîÖµ>=256W + i = 0; j = 64; + } + + if(++Cnt_SubPPG >= i) + { + Cnt_SubPPG = 0; + Value_PPGTMR -= j; //PPG¼õС + + data = Buf_PPGMin; + + if(Value_PPGTMR < data) //ÅжÏÊÇ·ñÒÑ´ïµ½É趨×îСֵ + { + Value_PPGTMR = data; + } + } + } + else + { //ʵ¼Ê¹¦ÂʸúÉ趨¹¦ÂÊÏàµÈ + Cnt_AddPPG = 0; + Cnt_SubPPG = 0; + } + + if(B_PPGTMR_Adjust) + { + B_PPGTMR_Adjust = 0; + + B_PPGTMR_WriteLock = 1; //дÉÏËø + Buf_PPGTMR = Value_PPGTMR; //д»Øµ±Ç°PPGTMRÖµ + B_PPGTMR_WriteLock = 0; //д½âËø + } + } + /*********************************************************************/ + //µçÁ÷¶ª¹øÅжϣº + if(!B_Pan_LoseDly) //¿ªÆôPPGÑÓʱһ¶¨Ê±¼ä£¬²Å¼ì²â¶ª¹ø + { + if(B_Vol_Low) + { + if(B_Pan_Iron) + { + data = C_PPGStart_VL_Iron; + } + else + { + data = C_PPGStart_VL_Steel; + } + } + else + { + if(B_Pan_Iron) + { + data = C_PPGStart_Iron; + } + else + { + data = C_PPGStart_Steel; + } + } + + B_PPGTMR_ReadLock = 1; //¶ÁÉÏËø + Value_PPGTMR = Buf_PPGTMR; //¶ÁÈ¡µ±Ç°PPGTMRÖµ + B_PPGTMR_ReadLock = 0; //¶Á½âËø + + if(Value_PPGTMR < data) //¹¦ÂÊÅÀÉý + { + B_PPGTMR_WriteLock = 1; //дÉÏËø + Buf_PPGTMR += 4; + B_PPGTMR_WriteLock = 0; //д½âËø + } + else + { + B_Pan_LoseDly = 1; //ÑÓʱÍê³É + Delay_LosePan = 1500/C_TimeMS_Main; //1.5s + } + } + #if _MODE_IHDEBUG_ + else if(B_LosePanCheck_Dis) //½ûÖ¹µçÁ÷¶ª¹ø¼ì²â + { + Delay_LosePan = 1000/C_TimeMS_Main; //1s + } + #endif + else + { //¿ªÊ¼ÅÐ¶Ï + if(!B_Vol_Mid) + { //ÆäËûÇø¼ä£¬µçÁ÷¶ª¹øÖµ¼ÆËã + setpower = Buf_PowerLose_VHigh; //·ÇµÍѹµçÁ÷¶ª¹øÅжϹ¦ÂÊ + i = C_Vol_High; + } + else + { //µÍѹ\µÍÖÐÑ¹Çø¼ä£¬µçÁ÷¶ª¹øÖµ¼ÆËã + setpower = Buf_PowerLose_VLow; //µÍѹµçÁ÷¶ª¹øÅжϹ¦ÂÊ + i = C_Vol_Low; + } + realpower = ((unsigned long)i * CurrentReal) >> 8; + + if(setpower > realpower) + { + if(Delay_LosePan) + { + Delay_LosePan--; + } + else + { + B_Pan_LoseDly = 0; + + B_Pan_No = 1; //ÎÞ¹ø×´Ì¬ + B_Pan_Have = 0; + } + } + else if(Delay_LosePan > 500/C_TimeMS_Main) + { + Delay_LosePan--; + } + else + { + Delay_LosePan = 500/C_TimeMS_Main; //500ms + } + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºSet_PPGWork +* º¯Êý¹¦ÄÜ£ºPPG¹¤×÷ÉèÖà +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖ÷Ñ­»·µ÷Óà +**************************************************************************/ +void Set_PPGWork() +{ + __CMS_Plus_PPG(); //PPGÔöÇ¿´¦Àí + + Igbt_Protect(); //IGBTÓ²¼þ±£»¤ + Set_SlopeCurr(); //µçÁ÷бÂÊÉèÖà + Set_PPGPower(); //PPG¹¦ÂÊÉèÖà + + Calc_Electric(); //¼ÆË㹤×÷µçÁ¿ +} + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Setup_Global.h b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Setup_Global.h new file mode 100644 index 0000000..e357385 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Setup_Global.h @@ -0,0 +1,359 @@ +/************************************************************************** +**************************************************************************/ +#ifndef _SETUP_GLOBAL_H_ +#define _SETUP_GLOBAL_H_ + +/************************************************************************** +--------------------------------- Ó²¼þÅäÖà -------------------------------- +**************************************************************************/ +//ÅäÖÃÄÚÈÝ£º²âÎÂNTCÉÏÏÂÀ­ +//ÅäÖÃ˵Ã÷£º1 = IGBT²âÎÂNTCΪÉÏÀ­£¬0 = ÏÂÀ­ +#define _UP_NTC_IGBT_ 0 +//ÅäÖÃ˵Ã÷£º1 = ¹øµ×²âÎÂNTCΪÉÏÀ­£¬0 = ÏÂÀ­ +#define _UP_NTC_PAN_ 1 +//ÅäÖÃ˵Ã÷£º1 = ¶¥²¿²âÎÂNTCΪÉÏÀ­£¬0 = ÏÂÀ­ +#define _UP_NTC_TOP_ 0 + +/************************************************************************** +--------------------------------- Èí¼þÅäÖà -------------------------------- +**************************************************************************/ +//ÅäÖÃÄÚÈÝ£º¹¤×÷ģʽ +//ÅäÖÃ˵Ã÷£º1 = µ÷ÊÔģʽ£¬0 = ·Çµ÷ÊÔģʽ +#define _MODE_IHDEBUG_ 0 +//------------------------------------------------------------------------- +//ÅäÖÃÄÚÈÝ£ºÍ¨ÐÅģʽ +//ÅäÖÃ˵Ã÷£º00 = ϵͳ×Ô¶¯Ê¶±ð +// 01 = Ç¿ÖÆÎªÓÐͨÐÅģʽ +// 1x = Ç¿ÖÆÎªÎÞͨÐÅģʽ +#define _MODE_COMM_NO_ 0 +#define _MODE_COMM_HAVE_ 1 +//------------------------------------------------------------------------- +//ÅäÖÃÄÚÈÝ£º·çÉÈÊä³öģʽ +//ÅäÖÃ˵Ã÷£º1 = PWMÊä³ö£¬0 = ÆÕͨIOÊä³ö +#define _FAN_OUT_PWM_ 0 + +/************************************************************************** +--------------------------------- Êеçµçѹ -------------------------------- +**************************************************************************/ +//¡¾Êеçµçѹ¶ÔÓ¦ADÖµ¡¿£º + +//²ÎÊýÃû³Æ£ºÊеçµçѹ¶ÔÓ¦ADÖµ +//²ÎÊý˵Ã÷£ºÍ¨¹ýÉϵçʵ²â»ñÈ¡ +#define C_AD_V290 219 +#define C_AD_V220 167 +#define C_AD_V160 121 +#define C_AD_V100 75 +#define C_AD_V80 59 +//------------------------------------------------------------------------- +//¡¾Êеçµçѹ¹ÊÕÏ¡¿£º + +//²ÎÊýÃû³Æ£º¸ßѹ¹ÊÕÏÅжϵçѹֵ£¨V£© +#define C_Vol_HighErr_In 285 +//²ÎÊýÃû³Æ£º¸ßѹ¹ÊÕϻָ´µçѹֵ£¨V£© +#define C_Vol_HighErr_Out 260 + +//²ÎÊýÃû³Æ£ºµÍѹ¹ÊÕϻָ´µçѹֵ£¨V£© +#define C_Vol_LowErr_Out 115 +//²ÎÊýÃû³Æ£ºµÍѹ¹ÊÕÏÅжϵçѹֵ£¨V£© +#define C_Vol_LowErr_In 100 +//------------------------------------------------------------------------- +//¡¾ÊеçµçÑ¹Çø¼ä¡¿£º + +//²ÎÊýÃû³Æ£ºµÍÑ¹Çø¼äÅжϵçѹֵ£¨V£© +#define C_Vol_Low 160 +//²ÎÊýÃû³Æ£ºÖÐÑ¹Çø¼äÅжϵçѹֵ£¨V£© +#define C_Vol_Mid 210 +//²ÎÊýÃû³Æ£º¸ßÑ¹Çø¼äÅжϵçѹֵ£¨V£© +#define C_Vol_High 240 +//------------------------------------------------------------------------- +//¡¾Êеçµçѹ¼ÆËã¡¿£º + +//²ÎÊýÃû³Æ£º×î´ó´¦Àíµçѹֵ£¨V£© +#define C_Vol_Max 290 +//²ÎÊýÃû³Æ£º×îС´¦Àíµçѹֵ£¨V£© +#define C_Vol_Min 80 + +//²ÎÊýÃû³Æ£º¼ÆËã²¹³¥µçѹֵ£¨V£© +//²ÎÊý˵Ã÷£º±ãÓÚʹÓÃ8bit¼Ä´æÆ÷±£´æµçѹֵ +#define C_Vol_Comp C_Vol_Min + +//²ÎÊýÃû³Æ£º×î´ó´¦ÀíµçѹADÖµ +#define C_AD_VolMax C_AD_V290 +//²ÎÊýÃû³Æ£º×îС´¦ÀíµçѹADÖµ +#define C_AD_VolMin C_AD_V80 + +//²ÎÊýÃû³Æ£ºµçѹбÂÊ +//¼ÆË㹫ʽ£º256 *£¨×î´ó´¦Àíµçѹֵ-×îС´¦Àíµçѹֵ£©/£¨×î´ó´¦ÀíµçѹADÖµ-×îС´¦ÀíµçѹADÖµ£© +#define C_Slope_Volatage (unsigned int)256 * (C_Vol_Max - C_Vol_Min) / (C_AD_VolMax - C_AD_VolMin) + +/************************************************************************** +--------------------------------- ¹¤×÷µçÁ÷ -------------------------------- +**************************************************************************/ +//¼ÆË㹫ʽ£ºµçÁ÷бÂÊ = 256 * 256 * ʵ¼ÊµçÁ÷ / ¼ì²âµÄµçÁ÷AD +//²ÎÊý˵Ã÷£ºµçÁ÷бÂÊÔ½´ó£¬¹¦ÂÊԽС + +//²ÎÊýÃû³Æ£ºÌú¹øµçÁ÷бÂÊ +#define C_SlopeIron_Curr 5900 +//²ÎÊýÃû³Æ£º¸Ö¹øµçÁ÷бÂÊ +#define C_SlopeSteel_Curr 5900 + +/************************************************************************** +--------------------------------- ¹ø¾ß¼ì²â -------------------------------- +**************************************************************************/ +//²ÎÊýÃû³Æ£ºÓÐÎÞ¹øÅжÏÖµ +//²ÎÊý˵Ã÷£º>´ËÅжÏÖµ£¬¼´ÅжÏΪÎÞ¹ø +#define C_Vaule_HaveNoPan 5 + +//²ÎÊýÃû³Æ£º¸ÖÌú¹øÅжÏÖµ +//²ÎÊý˵Ã÷£º<=´ËÅжÏÖµ£¬¼´ÅжÏΪ¸Ö¹ø£¬·ñÔòΪÌú¹ø +//ʵ¼ÊÊý¾Ý£ºÌú=215~239¡¢¸Ö=187~192 +#define C_Vaule_SteelIron (215+192)/2 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º¼ì¹ø¼ä¸ôʱ¼ä£¨Êµ¼Ê£º2Ã룩 +#define C_Time_CheckPan 2000/C_TimeMS_Main + +//²ÎÊýÃû³Æ£ºÍ£Ö¹¼ÓÈÈ¼ì¹ø¼ä¸ôʱ¼ä£¨Êµ¼Ê£º2Ã룩 +#define C_Time_StopCheck 2000/C_TimeMS_Main + +/************************************************************************** +---------------------------------- PPGÊä³ö -------------------------------- +**************************************************************************/ +//²ÎÊýÃû³Æ£ºPPGµ¼Í¨ÑÓʱֵ +//ȡֵ·¶Î§£º0~15 +//¶ÔÓ¦¹ØÏµ£º0=²»ÑÓʱ£¬1=4~5*125ns£¬2=8~9*125ns£¬¡­¡­15=64~65*125ns +#define C_PPGDly 0 +//------------------------------------------------------------------------- +//ȡֵ·¶Î§£º0~4095 +//¼ÆË㹫ʽ£ºPPGµ¼Í¨Ê±¼ä = PPGµ¼Í¨Öµ / 32MHz + +//²ÎÊýÃû³Æ£ºµ¥´Î¼ì¹øPPGµ¼Í¨Öµ +#define C_PPGSingle 192 + +//²ÎÊýÃû³Æ£ºÌú¹øµã»ðPPGµ¼Í¨Öµ +#define C_PPGFirst_Iron 250 +//²ÎÊýÃû³Æ£º¸Ö¹øµã»ðPPGµ¼Í¨Öµ +#define C_PPGFirst_Steel 250 +//²ÎÊýÃû³Æ£ºµÍѹÌú¹øµã»ðPPGµ¼Í¨Öµ +#define C_PPGFirst_VL_Iron 400 +//²ÎÊýÃû³Æ£ºµÍѹ¸Ö¹øµã»ðPPGµ¼Í¨Öµ +#define C_PPGFirst_VL_Steel 400 + +//²ÎÊýÃû³Æ£ºÌú¹øÆðʼPPGµ¼Í¨Öµ +#define C_PPGStart_Iron 350 +//²ÎÊýÃû³Æ£º¸Ö¹øÆðʼPPGµ¼Í¨Öµ +#define C_PPGStart_Steel 280 +//²ÎÊýÃû³Æ£ºµÍѹÌú¹øÆðʼPPGµ¼Í¨Öµ +#define C_PPGStart_VL_Iron 550 +//²ÎÊýÃû³Æ£ºµÍѹ¸Ö¹øÆðʼPPGµ¼Í¨Öµ +#define C_PPGStart_VL_Steel 550 +//------------------------------------------------------------------------- +//ȡֵ·¶Î§£º0~4095 +//¼ÆË㹫ʽ£ºPPGµ¼Í¨Ê±¼ä = PPGµ¼Í¨Öµ / 32MHz + +//²ÎÊýÃû³Æ£ºÄ¬ÈÏ×î´óPPGµ¼Í¨Öµ +#define C_PPGMax 960 +//²ÎÊýÃû³Æ£ºÌú¹ø×î´óPPGµ¼Í¨Öµ +#define C_PPGMax_Iron 960 +//²ÎÊýÃû³Æ£º¸Ö¹ø×î´óPPGµ¼Í¨Öµ +#define C_PPGMax_Steel 780 + +//²ÎÊýÃû³Æ£º×îСPPGµ¼Í¨Öµ +#define C_PPGMin 150 + +/************************************************************************** +--------------------------------- ¹¦ÂÊ´¦Àí -------------------------------- +**************************************************************************/ +//²ÎÊýÃû³Æ£º¹¦ÂÊ´¦ÀíÒòÊý +#define C_Mult_Power 10 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ººãÁ÷½×¶ÎµçÁ÷£¨A£© +#define C_Currer_Const 6.0 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºµÍѹµçÁ÷¶ª¹øÅжϹ¦ÂÊ£¨W£© +#define C_PowerLose_VLow 350 +//²ÎÊýÃû³Æ£º·ÇµÍѹµçÁ÷¶ª¹øÅжϹ¦ÂÊ£¨W£© +#define C_PowerLose_VHigh 650 + +/************************************************************************** +---------------------------------- ±È½ÏÆ÷ --------------------------------- +**************************************************************************/ +//²ÎÊýÃû³Æ£ºµçѹÀËÓ¿±£»¤ÉèÖÃÖµ +//ȡֵ·¶Î§£º0~24 +//¶ÔÓ¦¹ØÏµ£º1.6V~4V£¨¹²25µµ£¬Ã¿µµ0.1V£© +#define C_Vol_VolSurge 18 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºµçÁ÷ÀËÓ¿±£»¤ÉèÖÃÖµ +//ȡֵ·¶Î§£º0~255 +//¼ÆË㹫ʽ£º±£»¤µçѹ£¨IO£© = ÉèÖÃÖµ * 4 / 255 +#define C_Vol_CurrSurge 90 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºµ¼Í¨Ì¨½×±£»¤ÉèÖÃÖµ +//ȡֵ·¶Î§£º0~255 +//¼ÆË㹫ʽ£º±£»¤µçѹ£¨IO£© = ÉèÖÃÖµ * 4 / 255 +#define C_Vol_OnStep 80 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º1¼¶¹ýѹ±£»¤ÉèÖÃÖµ£¨Êµ¼Ê£º1.22KV£© +//ȡֵ·¶Î§£º0~255 +//¼ÆË㹫ʽ£º±£»¤µçѹ£¨IO£© = ÉèÖÃÖµ * 4 / 255 +#define C_Vol_BackPress1 165 + + +//²ÎÊýÃû³Æ£º1¼¶¹ýѹ±£»¤PPGϽµ²½½ø +//ȡֵ·¶Î§£º0~15 +//¶ÔÓ¦¹ØÏµ£º0=0¸ö£¬1=2¸ö£¬¡­¡­15=30¸ö +#define C_PPG_BackPress1 10 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º2¼¶¹ýѹ±£»¤ÉèÖÃÖµ£¨Êµ¼Ê£º1.3KV£© +//ȡֵ·¶Î§£º0~24 +//¶ÔÓ¦¹ØÏµ£º1.6V~4V£¨¹²25µµ£¬Ã¿µµ0.1V£© +#define C_Vol_BackPress2 11 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºÏßÅ̵çѹÅжÏÖµ +//ȡֵ·¶Î§£º0~19 +//¶ÔÓ¦¹ØÏµ£º0.1V~2V£¨¹²20µµ£¬Ã¿µµ0.1V£© +#define C_Vol_CoilVol 0 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º¹ýÁ㷭תÅжÏÖµ£¨³£Ñ¹£© +//ȡֵ·¶Î§£º0~31 +//¶ÔÓ¦¹ØÏµ£º0.1V~3.2V£¨¹²32µµ£¬Ã¿µµ0.1V£© +#define C_Vol_ZeroTurn 8 + +//²ÎÊýÃû³Æ£º¹ýÁ㷭תÅжÏÖµ£¨¸ßѹ£© +//ȡֵ·¶Î§£º0~31 +//¶ÔÓ¦¹ØÏµ£º0.1V~3.2V£¨¹²32µµ£¬Ã¿µµ0.1V£© +#define C_Vol_ZeroTurn_VH 12 + +//²ÎÊýÃû³Æ£º¹ýÁ㷭תÅжÏÖµ£¨µÍѹ£© +//ȡֵ·¶Î§£º0~31 +//¶ÔÓ¦¹ØÏµ£º0.1V~3.2V£¨¹²32µµ£¬Ã¿µµ0.1V£© +#define C_Vol_ZeroTurn_VL 8 + +/************************************************************************** +----------------------------------- PGA ----------------------------------- +**************************************************************************/ +//²ÎÊýÃû³Æ£ºPGA·Å´ó±¶ÊýÉèÖÃÖµ +//ȡֵ·¶Î§£º0~3 +//¶ÔÓ¦¹ØÏµ£º0=8±¶¡¢1=16±¶¡¢2=32±¶¡¢3=64±¶ +#define C_Times_PGA 1 + +/************************************************************************** +--------------------------------- ¶¥²¿NTC --------------------------------- +**************************************************************************/ +//Ó²¼þ½á¹¹£º100KÈÈÃôµç×è + 10K¹Ì¶¨µç×è +//Èí¼þ½á¹¹£º8bit-AD +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º¶¥²¿NTC¿ªÂ·ÅжÏζÈADÖµ +#define C_AD_Top_OpenIn 3 +//²ÎÊýÃû³Æ£º¶¥²¿NTC¿ªÂ·»Ö¸´Î¶ÈADÖµ +#define C_AD_Top_OpenOut 7 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º¶¥²¿NTC¶Ì·ÅжÏζÈADÖµ +#define C_AD_Top_CloseIn 252 +//²ÎÊýÃû³Æ£º¶¥²¿NTC¶Ì·»Ö¸´Î¶ÈADÖµ +#define C_AD_Top_CloseOut 248 + +/************************************************************************** +--------------------------------- ¹øµ×NTC --------------------------------- +**************************************************************************/ +//Ó²¼þ½á¹¹£º100KÈÈÃôµç×è + 10K¹Ì¶¨µç×è +//Èí¼þ½á¹¹£º8bit-AD +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º¹øµ×¿ª·çÉÈÅжÏζÈADÖµ +#define C_AD_Pan_FanOn 73 +//²ÎÊýÃû³Æ£º¹øµ×¹Ø·çÉÈÅжÏζÈADÖµ +#define C_AD_Pan_FanOff 64 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º¹øµ×³¬ÎÂÅжÏζÈADÖµ +#define C_AD_Pan_OverIn 224 +//²ÎÊýÃû³Æ£º¹øµ×³¬Î»ָ´Î¶ÈADÖµ +#define C_AD_Pan_OverOut 220 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º¹øµ×NTC¿ªÂ·ÅжÏζÈADÖµ +#define C_AD_Pan_OpenIn 3 +//²ÎÊýÃû³Æ£º¹øµ×NTC¿ªÂ·»Ö¸´Î¶ÈADÖµ +#define C_AD_Pan_OpenOut 7 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£º¹øµ×NTC¶Ì·ÅжÏζÈADÖµ +#define C_AD_Pan_CloseIn 252 +//²ÎÊýÃû³Æ£º¹øµ×NTC¶Ì·»Ö¸´Î¶ÈADÖµ +#define C_AD_Pan_CloseOut 248 + +/************************************************************************** +-------------------------------- IGBT-NTC --------------------------------- +**************************************************************************/ +//Ó²¼þ½á¹¹£º100KÈÈÃôµç×è + 20K¹Ì¶¨µç×è +//Èí¼þ½á¹¹£º8bit-AD +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºIGBT¿ª·çÉÈÅжÏζÈADÖµ +#define C_AD_Igbt_FanOn 91 +//²ÎÊýÃû³Æ£ºIGBT¹Ø·çÉÈÅжÏζÈADÖµ +#define C_AD_Igbt_FanOff 80 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºIGBT³¬ÎÂÅжÏζÈADÖµ +#define C_AD_Igbt_OverIn 204 +//²ÎÊýÃû³Æ£ºIGBT³¬Î»ָ´Î¶ÈADÖµ +#define C_AD_Igbt_OverOut 198 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºIGBT¸ßÎÂÅжÏζÈADÖµ +#define C_AD_Igbt_HighIn 191 +//²ÎÊýÃû³Æ£ºIGBT¸ßλָ´Î¶ÈADÖµ +#define C_AD_Igbt_HighOut 184 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºIGBT-NTC¿ªÂ·ÅжÏζÈADÖµ +#define C_AD_Igbt_OpenIn 3 +//²ÎÊýÃû³Æ£ºIGBT-NTC¿ªÂ·»Ö¸´Î¶ÈADÖµ +#define C_AD_Igbt_OpenOut 7 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºIGBT-NTC¶Ì·ÅжÏζÈADÖµ +#define C_AD_Igbt_CloseIn 252 +//²ÎÊýÃû³Æ£ºIGBT-NTC¶Ì·»Ö¸´Î¶ÈADÖµ +#define C_AD_Igbt_CloseOut 248 + +/************************************************************************** +-------------------------------- ϵͳʱ¼ä --------------------------------- +**************************************************************************/ +//²ÎÊýÃû³Æ£ºÖжÏʱ¼ä£¨us£© +#define C_TimeUS_Int 50 +//²ÎÊýÃû³Æ£ºÖ÷Ñ­»·Ê±¼ä£¨ms£© +#define C_TimeMS_Main 5 + +/************************************************************************** +--------------------------------- EEµØÖ· ---------------------------------- +**************************************************************************/ +//²ÎÊýÃû³Æ£ºµçÁ÷бÂʵ÷½ÚÖµEE¼Ä´æµØÖ· +//ȡֵ·¶Î§£º0~127 +#define C_EEAddr_CheckAA 100 +#define C_EEAddr_DataP 101 +#define C_EEAddr_DataI 102 +#define C_EEAddr_Check55 103 + +/************************************************************************** +--------------------------------- ²âÊÔÉèÖà -------------------------------- +**************************************************************************/ +//²âÊÔÄÚÈÝ£º¼ì¹ø +//ÉèÖÃ˵Ã÷£ºÓж¨Òå = ¼ì¹ø²âÊÔ£¬ÎÞ¶¨Òå = Õý³£¼ì¹ø +//#define _TEST_PANCHECK_ + +//²âÊÔÄÚÈÝ£ºPPGÊä³ö +//ÉèÖÃ˵Ã÷£ºÓж¨Òå = PPG²âÊÔÊä³ö£¬ÎÞ¶¨Òå = PPGÕý³£Êä³ö +//#define _TEST_PPGOUT_ 500 +//------------------------------------------------------------------------- +//²âÊÔÄÚÈÝ£º±È½ÏÆ÷½á¹û +//ÉèÖÃ˵Ã÷£ºÓж¨Òå = IOÊä³ö±È½ÏÆ÷½á¹û£¬ÎÞ¶¨Òå = IOÕý³£Êä³ö +// ²âÊÔÊä³ö¿ÚÖ»ÄÜÑ¡ÔñRA0»òRB7£¬ÓÉconfigÖеġ°CMPOUT_SEL¡±¾ö¶¨ +//#define _TEST_CMPOUT_ 0xA0 //±È½ÏÆ÷²âÊÔÊä³ö¿Ú£¨RA0£© +//#define _TEST_CMPOUT_ 0xB7 //±È½ÏÆ÷²âÊÔÊä³ö¿Ú£¨RB7£© + +//²ÎÊýÃû³Æ£º±»²âÊÔ±È½ÏÆ÷ͨµÀ +//ȡֵ·¶Î§£º0~7 +#define C_CMOUTEN_Num 0 +//------------------------------------------------------------------------- +//²âÊÔÄÚÈÝ£ºPGA·Å´ó½á¹û +//ÉèÖÃ˵Ã÷£ºÓж¨Òå = IOÊä³öPGA·Å´ó½á¹û£¬ÎÞ¶¨Òå = IOÕý³£Êä³ö +// ²âÊÔÊä³ö¿ÚÖ»ÄÜÑ¡ÔñRC0 +//#define _TEST_PGAOUT_ + +/************************************************************************** +**************************************************************************/ +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Setup_IO.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Setup_IO.c new file mode 100644 index 0000000..83bcc55 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Setup_IO.c @@ -0,0 +1,221 @@ +/************************************************************************** +**************************************************************************/ +#include "Define_Global.h" + +/************************************************************************** +* IO¿ÚÉÏÀ­ÉèÖà +**************************************************************************/ +#if !_MODE_COMM_NO_ +unsigned char SetWPUX_CommHave(unsigned char x) +{ + volatile unsigned char i = 0; + //--------------------------------------------------------------------- + #ifdef _pIGBT_OVUV + if(x == (_pIGBT_OVUV >> 4)) + { + i |= 1 << (unsigned)(0xF & _pIGBT_OVUV); + } + #endif + + #ifdef _pCOMM_IN + if(x == (_pCOMM_IN >> 4)) + { + i |= 1 << (unsigned)(0xF & _pCOMM_IN); + } + #endif + //--------------------------------------------------------------------- + return i; +} +#endif +/*************************************************************************/ +#if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_ +unsigned char SetWPUX_CommNo(unsigned char x) +{ + volatile unsigned char i = 0; + //--------------------------------------------------------------------- + #ifdef _pIGBT_OVUV + if(x == (_pIGBT_OVUV >> 4)) + { + i |= 1 << (unsigned)(0xF & _pIGBT_OVUV); + } + #endif + //--------------------------------------------------------------------- + return i; +} +#endif + +/************************************************************************** +* IO¿Ú·½ÏòÉèÖà +**************************************************************************/ +#if !_MODE_COMM_NO_ +unsigned char SetTRISX_CommHave(unsigned char x) +{ + volatile unsigned char i = 0; + //--------------------------------------------------------------------- + #ifdef _pBUZZ + if(x == (_pBUZZ >> 4)) + { + i |= 1 << (unsigned)(0xF & _pBUZZ); + } + #endif + + #ifdef _pFAN + if(x == (_pFAN >> 4)) + { + i |= 1 << (unsigned)(0xF & _pFAN); + } + #endif + + #ifdef _pIGBT_SUP + if(x == (_pIGBT_SUP >> 4)) + { + i |= 1 << (unsigned)(0xF & _pIGBT_SUP); + } + #endif + #ifdef _pCOMM_OUT + if(x == (_pCOMM_OUT >> 4)) + { + i |= 1 << (unsigned)(0xF & _pCOMM_OUT); + } + #endif + //--------------------------------------------------------------------- + #ifdef _TEST_CMPOUT_ + #if _TEST_CMPOUT_ == _Pin_CMPOUT1 + if(x == (_Pin_CMPOUT1 >> 4)) + { + i |= 1 << (unsigned)(0xF & _Pin_CMPOUT1); + } + #elif _TEST_CMPOUT_ == _Pin_CMPOUT2 + if(x == (_Pin_CMPOUT2 >> 4)) + { + i |= 1 << (unsigned)(0xF & _Pin_CMPOUT2); + } + #endif + #elif _MODE_IHDEBUG_ + if(B_Test_CM_RA0) + { + if(x == (_Pin_CMPOUT1 >> 4)) + { + i |= 1 << (unsigned)(0xF & _Pin_CMPOUT1); + } + } + else if(B_Test_CM_RB7) + { + if(x == (_Pin_CMPOUT2 >> 4)) + { + i |= 1 << (unsigned)(0xF & _Pin_CMPOUT2); + } + } + #endif + + #ifdef _TEST_PGAOUT_ + if(x == (_Pin_PGAOUT >> 4)) + { + i &= ~(1 << (unsigned)(0xF & _Pin_PGAOUT)); + } + #elif _MODE_IHDEBUG_ + if(B_Test_PGA) + { + if(x == (_Pin_PGAOUT >> 4)) + { + i &= ~(1 << (unsigned)(0xF & _Pin_PGAOUT)); + } + } + #endif + //--------------------------------------------------------------------- + return (unsigned)~i; +} +#endif +/*************************************************************************/ +#if _MODE_COMM_NO_ || !_MODE_COMM_HAVE_ +unsigned char SetTRISX_CommNo(unsigned char x) +{ + volatile unsigned char i = 0; + //--------------------------------------------------------------------- + #ifdef _pBUZZ + if(x == (_pBUZZ >> 4)) + { + i |= 1 << (unsigned)(0xF & _pBUZZ); + } + #endif + + #ifdef _pFAN + if(x == (_pFAN >> 4)) + { + i |= 1 << (unsigned)(0xF & _pFAN); + } + #endif + + #ifdef _pIGBT_SUP + if(x == (_pIGBT_SUP >> 4)) + { + i |= 1 << (unsigned)(0xF & _pIGBT_SUP); + } + #endif + #ifdef _pSDA + if(x == (_pSDA >> 4)) + { + i |= 1 << (unsigned)(0xF & _pSDA); + } + #endif + #ifdef _pSCK + if(x == (_pSCK >> 4)) + { + i |= 1 << (unsigned)(0xF & _pSCK); + } + #endif + #ifdef _pSTB + if(x == (_pSTB >> 4)) + { + i |= 1 << (unsigned)(0xF & _pSTB); + } + #endif + //--------------------------------------------------------------------- + #ifdef _TEST_CMPOUT_ + #if _TEST_CMPOUT_ == _Pin_CMPOUT1 + if(x == (_Pin_CMPOUT1 >> 4)) + { + i |= 1 << (unsigned)(0xF & _Pin_CMPOUT1); + } + #elif _TEST_CMPOUT_ == _Pin_CMPOUT2 + if(x == (_Pin_CMPOUT2 >> 4)) + { + i |= 1 << (unsigned)(0xF & _Pin_CMPOUT2); + } + #endif + #elif _MODE_IHDEBUG_ + if(B_Test_CM_RA0) + { + if(x == (_Pin_CMPOUT1 >> 4)) + { + i |= 1 << (unsigned)(0xF & _Pin_CMPOUT1); + } + } + else if(B_Test_CM_RB7) + { + if(x == (_Pin_CMPOUT2 >> 4)) + { + i |= 1 << (unsigned)(0xF & _Pin_CMPOUT2); + } + } + #endif + + #ifdef _TEST_PGAOUT_ + if(x == (_Pin_PGAOUT >> 4)) + { + i &= ~(1 << (unsigned)(0xF & _Pin_PGAOUT)); + } + #elif _MODE_IHDEBUG_ + if(B_Test_PGA) + { + if(x == (_Pin_PGAOUT >> 4)) + { + i &= ~(1 << (unsigned)(0xF & _Pin_PGAOUT)); + } + } + #endif + //--------------------------------------------------------------------- + return (unsigned)~i; +} +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Setup_IO.h b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Setup_IO.h new file mode 100644 index 0000000..73430e5 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Setup_IO.h @@ -0,0 +1,514 @@ +/************************************************************************** +**************************************************************************/ +#ifndef _SETUP_IO_H_ +#define _SETUP_IO_H_ + +/************************************************************************** +-------------------------------- IO¿ÚÅäÖà --------------------------------- +**************************************************************************/ +//ÅäÖÃÄÚÈÝ£ºIO½ÅλÅÅÐò +//ÅäÖÃ˵Ã÷£ºÓж¨Òå = ¸ÃÐͺŶÔÓ¦IO½ÅλÅÅÐò +#define _IO_CMS79F5335 //CMS79F5335½Åλ +//#define _IO_CMS79F5365 //CMS79F5365½Åλ +//========================================================================= +//ÅäÖÃÄÚÈÝ£º¹¦ÄܶÔÓ¦IO½Åλ +//ÅäÖÃ˵Ã÷£ºÎÞÏàÓ¦¹¦ÄÜ£¬¿ÉÖ±½ÓÆÁ±Î»òÕßɾ³ý +//------------------------------------------------------------------------- +#define _pBUZZ _Pin7 //·äÃùÆ÷¿ØÖÆ¿Ú +#define _pFAN _Pin7 //·çÉÈ¿ØÖÆ¿Ú + +//#define _pAD_TOP _Pin //¶¥²¿²âÎÂADC¿Ú +#define _pAD_PAN _Pin8 //¹øµ×²âÎÂADC¿Ú +#define _pAD_IGBT _Pin12 //IGBT²âÎÂADC¿Ú +#define _pAD_VOL _Pin11 //µçѹADC¿Ú + +#define _pCON1 _Pin15 //CON1¿Ú +#define _pCON2 _Pin14 //CON2¿Ú +#define _pCON3 _Pin13 //CON3¿Ú +//------------------------------------------------------------------------- +#define _pCOMM_IN _pCON2 //ͨÐÅÊäÈë¿Ú£¨ÓÐͨÐÅ£© +#define _pCOMM_OUT _pCON3 //ͨÐÅÊä³ö¿Ú£¨ÓÐͨÐÅ£© + +#define _pSDA _pCON1 //Çý¶¯SDA¿Ú£¨ÎÞͨÐÅ£© +#define _pSCK _pCON2 //Çý¶¯SCK¿Ú£¨ÎÞͨÐÅ£© +#define _pSTB _pCON3 //Çý¶¯STB¿Ú£¨ÎÞͨÐÅ£© +//========================================================================= +//ÅäÖÃÄÚÈÝ£ºÉϵç³õʼ»¯IOµçƽ +//ÅäÖÃ˵Ã÷£º0 = µÍµçƽ£¬1 = ¸ßµçƽ +#define C_Init_PORTA 0B00000000 +#define C_Init_PORTB 0B00000000 +#define C_Init_PORTC 0B00000000 + +/************************************************************************** +-------------------------------- ADͨµÀÅäÖà ------------------------------- +**************************************************************************/ +//ÅäÖÃÄÚÈÝ£º¹¤×÷µçÁ÷ADCͨµÀ +//ÅäÖÃ˵Ã÷£ºÍ¨µÀ27 = ÓÐRCÂ˲¨¡¢Í¨µÀ28 = ÎÞRCÂ˲¨ +#define C_AdcChannel_Curr 28 + +/************************************************************************** +* оƬ²âÊÔ½Åλ +**************************************************************************/ +#define _Pin_CMPOUT1 0xA0 //±È½ÏÆ÷²âÊÔÊä³ö¿Ú1 +#define _Pin_CMPOUT2 0xB7 //±È½ÏÆ÷²âÊÔÊä³ö¿Ú2 +#define _Pin_PGAOUT 0xC0 //PGA²âÊÔÊä³ö¿Ú +/************************************************************************** +* оƬרÓýÅλ +**************************************************************************/ +#define _pIGBT_SUP 0xB1 //IGBT¸¨ÖúÇý¶¯¿Ú +#define _pIGBT_OVUV 0xB2 //IGBTÇý¶¯¹ýǷѹ¼ì²â¿Ú + +/************************************************************************** +* CMS79F5335½Å루16pin£© +**************************************************************************/ +#ifdef _IO_CMS79F5335 +//#define _Pin1 VCC //Pin1 +//#define _Pin2 VIN //Pin2 +//#define _Pin3 GND //Pin3 +//#define _Pin4 VDD //Pin4 +#define _Pin5 0xA7 //Pin5 +#define _Pin6 0xA5 //Pin6 +#define _Pin7 0xC0 //Pin7 +#define _Pin8 0xA4 //Pin8 +#define _Pin9 0xA3 //Pin9 +#define _Pin10 0xA2 //Pin10 +#define _Pin11 0xA1 //Pin11 +#define _Pin12 0xB7 //Pin12 +#define _Pin13 0xB6 //Pin13 +#define _Pin14 0xB4 //Pin14 +#define _Pin15 0xB3 //Pin15 +//#define _Pin16 PPG //Pin16 +#endif +/************************************************************************** +* CMS79F5365½Å루20pin£© +**************************************************************************/ +#ifdef _IO_CMS79F5365 +//#define _Pin1 VCC //Pin1 +//#define _Pin2 VIN //Pin2 +//#define _Pin3 GND //Pin3 +//#define _Pin4 VDD //Pin4 +#define _Pin5 0xC2 //Pin5 +#define _Pin6 0xC1 //Pin6 +#define _Pin7 0xA7 //Pin7 +#define _Pin8 0xA5 //Pin8 +#define _Pin9 0xC0 //Pin9 +#define _Pin10 0xA4 //Pin10 +#define _Pin11 0xA3 //Pin11 +#define _Pin12 0xA2 //Pin12 +#define _Pin13 0xA1 //Pin13 +#define _Pin14 0xA0 //Pin14 +#define _Pin15 0xB7 //Pin15 +#define _Pin16 0xB6 //Pin16 +#define _Pin17 0xB5 //Pin17 +#define _Pin18 0xB4 //Pin18 +#define _Pin19 0xB3 //Pin19 +//#define _Pin20 PPG //Pin20 +#endif + +/************************************************************************** +* IO¿Ú¶¨Òå +**************************************************************************/ +#ifndef _pIGBT_SUP +ExteralPin(PORTC,7,Pin_Igbt_Sup); +#elif (_pIGBT_SUP>>4)==0xA +ExteralPin(PORTA,(_pIGBT_SUP&0xF),Pin_Igbt_Sup); +#elif (_pIGBT_SUP>>4)==0xB +ExteralPin(PORTB,(_pIGBT_SUP&0xF),Pin_Igbt_Sup); +#elif (_pIGBT_SUP>>4)==0xC +ExteralPin(PORTC,(_pIGBT_SUP&0xF),Pin_Igbt_Sup); +#else +ExteralPin(PORTC,7,Pin_Igbt_Sup); +#endif +//------------------------------------------------------------------------- +#ifndef _pIGBT_OVUV +ExteralPin(PORTC,7,Pin_Igbt_OVUV); +#elif (_pIGBT_OVUV>>4)==0xA +ExteralPin(PORTA,(_pIGBT_OVUV&0xF),Pin_Igbt_OVUV); +#elif (_pIGBT_OVUV>>4)==0xB +ExteralPin(PORTB,(_pIGBT_OVUV&0xF),Pin_Igbt_OVUV); +#elif (_pIGBT_OVUV>>4)==0xC +ExteralPin(PORTC,(_pIGBT_OVUV&0xF),Pin_Igbt_OVUV); +#else +ExteralPin(PORTC,7,Pin_Igbt_OVUV); +#endif +//------------------------------------------------------------------------- +#ifndef _pBUZZ +ExteralPin(PORTC,7,Pin_Buzz); +#elif (_pBUZZ>>4)==0xA +ExteralPin(PORTA,(_pBUZZ&0xF),Pin_Buzz); +#elif (_pBUZZ>>4)==0xB +ExteralPin(PORTB,(_pBUZZ&0xF),Pin_Buzz); +#elif (_pBUZZ>>4)==0xC +ExteralPin(PORTC,(_pBUZZ&0xF),Pin_Buzz); +#else +ExteralPin(PORTC,7,Pin_Buzz); +#endif +//------------------------------------------------------------------------- +#ifndef _pFAN +ExteralPin(PORTC,7,Pin_Fan); +#elif (_pFAN>>4)==0xA +ExteralPin(PORTA,(_pFAN&0xF),Pin_Fan); +#elif (_pFAN>>4)==0xB +ExteralPin(PORTB,(_pFAN&0xF),Pin_Fan); +#elif (_pFAN>>4)==0xC +ExteralPin(PORTC,(_pFAN&0xF),Pin_Fan); +#else +ExteralPin(PORTC,7,Pin_Fan); +#endif +//------------------------------------------------------------------------- +#ifndef _pCOMM_IN +ExteralPin(PORTC,7,Pin_CommIn); +#elif (_pCOMM_IN>>4)==0xA +ExteralPin(PORTA,(_pCOMM_IN&0xF),Pin_CommIn); +#elif (_pCOMM_IN>>4)==0xB +ExteralPin(PORTB,(_pCOMM_IN&0xF),Pin_CommIn); +#elif (_pCOMM_IN>>4)==0xC +ExteralPin(PORTC,(_pCOMM_IN&0xF),Pin_CommIn); +#else +ExteralPin(PORTC,7,Pin_CommIn); +#endif +//------------------------------------------------------------------------- +#ifndef _pCOMM_OUT +ExteralPin(PORTC,7,Pin_CommOut); +#elif (_pCOMM_OUT>>4)==0xA +ExteralPin(PORTA,(_pCOMM_OUT&0xF),Pin_CommOut); +#elif (_pCOMM_OUT>>4)==0xB +ExteralPin(PORTB,(_pCOMM_OUT&0xF),Pin_CommOut); +#elif (_pCOMM_OUT>>4)==0xC +ExteralPin(PORTC,(_pCOMM_OUT&0xF),Pin_CommOut); +#else +ExteralPin(PORTC,7,Pin_CommOut); +#endif +//------------------------------------------------------------------------- +#ifndef _pSDA +ExteralPin(PORTC,7,Pin_SDA); +ExteralPin(TRISC,7,Io_SDA); +#elif (_pSDA>>4)==0xA +ExteralPin(PORTA,(_pSDA&0xF),Pin_SDA); +ExteralPin(TRISA,(_pSDA&0xF),Io_SDA); +#elif (_pSDA>>4)==0xB +ExteralPin(PORTB,(_pSDA&0xF),Pin_SDA); +ExteralPin(TRISB,(_pSDA&0xF),Io_SDA); +#elif (_pSDA>>4)==0xC +ExteralPin(PORTC,(_pSDA&0xF),Pin_SDA); +ExteralPin(TRISC,(_pSDA&0xF),Io_SDA); +#else +ExteralPin(PORTC,7,Pin_SDA); +ExteralPin(TRISC,7,Io_SDA); +#endif +//------------------------------------------------------------------------- +#ifndef _pSCK +ExteralPin(PORTC,7,Pin_SCK); +#elif (_pSCK>>4)==0xA +ExteralPin(PORTA,(_pSCK&0xF),Pin_SCK); +#elif (_pSCK>>4)==0xB +ExteralPin(PORTB,(_pSCK&0xF),Pin_SCK); +#elif (_pSCK>>4)==0xC +ExteralPin(PORTC,(_pSCK&0xF),Pin_SCK); +#else +ExteralPin(PORTC,7,Pin_SCK); +#endif +//------------------------------------------------------------------------- +#ifndef _pSTB +ExteralPin(PORTC,7,Pin_STB); +#elif (_pSTB>>4)==0xA +ExteralPin(PORTA,(_pSTB&0xF),Pin_STB); +#elif (_pSTB>>4)==0xB +ExteralPin(PORTB,(_pSTB&0xF),Pin_STB); +#elif (_pSTB>>4)==0xC +ExteralPin(PORTC,(_pSTB&0xF),Pin_STB); +#else +ExteralPin(PORTC,7,Pin_STB); +#endif + +/************************************************************************** +* PWMͨµÀ¶¨Òå +**************************************************************************/ +#if _pBUZZ==0xA0 +#define C_PwmChannel_Buzz 0x0A +#elif _pBUZZ==0xB5 +#define C_PwmChannel_Buzz 0x0B +#elif _pBUZZ==0xB2 +#define C_PwmChannel_Buzz 0x0C +#elif _pBUZZ==0xC2 +#define C_PwmChannel_Buzz 0x0D + +#elif _pBUZZ==0xB7 +#define C_PwmChannel_Buzz 0x1A +#elif _pBUZZ==0xB4 +#define C_PwmChannel_Buzz 0x1B +#elif _pBUZZ==0xB1 +#define C_PwmChannel_Buzz 0x1C +#elif _pBUZZ==0xC1 +#define C_PwmChannel_Buzz 0x1D + +#elif _pBUZZ==0xB6 +#define C_PwmChannel_Buzz 0x2A +#elif _pBUZZ==0xB3 +#define C_PwmChannel_Buzz 0x2B +#elif _pBUZZ==0xB0 +#define C_PwmChannel_Buzz 0x2C +#elif _pBUZZ==0xC0 +#define C_PwmChannel_Buzz 0x2D + +#else +#define C_PwmChannel_Buzz 0xFF +#endif +//------------------------------------------------------------------------- +#if !_FAN_OUT_PWM_ +#define C_PwmChannel_Fan 0xFF + +#elif _pFAN==0xA0 +#define C_PwmChannel_Fan 0x0A +#elif _pFAN==0xB5 +#define C_PwmChannel_Fan 0x0B +#elif _pFAN==0xB2 +#define C_PwmChannel_Fan 0x0C +#elif _pFAN==0xC2 +#define C_PwmChannel_Fan 0x0D + +#elif _pFAN==0xB7 +#define C_PwmChannel_Fan 0x1A +#elif _pFAN==0xB4 +#define C_PwmChannel_Fan 0x1B +#elif _pFAN==0xB1 +#define C_PwmChannel_Fan 0x1C +#elif _pFAN==0xC1 +#define C_PwmChannel_Fan 0x1D + +#elif _pFAN==0xB6 +#define C_PwmChannel_Fan 0x2A +#elif _pFAN==0xB3 +#define C_PwmChannel_Fan 0x2B +#elif _pFAN==0xB0 +#define C_PwmChannel_Fan 0x2C +#elif _pFAN==0xC0 +#define C_PwmChannel_Fan 0x2D + +#else +#define C_PwmChannel_Fan 0xFF +#endif + +/************************************************************************** +* ·Ç¹Ì¶¨ADCͨµÀ¶¨Òå +**************************************************************************/ +#if _pAD_VOL==0xA0 +#define C_AdcChannel_Vol 0 +#elif _pAD_VOL==0xA1 +#define C_AdcChannel_Vol 1 +#elif _pAD_VOL==0xA2 +#define C_AdcChannel_Vol 2 +#elif _pAD_VOL==0xA3 +#define C_AdcChannel_Vol 3 +#elif _pAD_VOL==0xA4 +#define C_AdcChannel_Vol 4 +#elif _pAD_VOL==0xA5 +#define C_AdcChannel_Vol 5 +#elif _pAD_VOL==0xA6 +#define C_AdcChannel_Vol 6 +#elif _pAD_VOL==0xA7 +#define C_AdcChannel_Vol 7 + +#elif _pAD_VOL==0xB0 +#define C_AdcChannel_Vol 8 +#elif _pAD_VOL==0xB1 +#define C_AdcChannel_Vol 9 +#elif _pAD_VOL==0xB2 +#define C_AdcChannel_Vol 10 +#elif _pAD_VOL==0xB3 +#define C_AdcChannel_Vol 11 +#elif _pAD_VOL==0xB4 +#define C_AdcChannel_Vol 12 +#elif _pAD_VOL==0xB5 +#define C_AdcChannel_Vol 13 +#elif _pAD_VOL==0xB6 +#define C_AdcChannel_Vol 14 +#elif _pAD_VOL==0xB7 +#define C_AdcChannel_Vol 15 + +#elif _pAD_VOL==0xC0 +#define C_AdcChannel_Vol 16 +#elif _pAD_VOL==0xC1 +#define C_AdcChannel_Vol 17 +#elif _pAD_VOL==0xC2 +#define C_AdcChannel_Vol 18 + +#else +#define C_AdcChannel_Vol C_AdcChannel_VRef +#endif +//------------------------------------------------------------------------- +#ifndef _pAD_IGBT +#define C_AdcChannel_Igbt C_AdcChannel_VRef + +#elif _pAD_IGBT==0xA0 +#define C_AdcChannel_Igbt 0 +#elif _pAD_IGBT==0xA1 +#define C_AdcChannel_Igbt 1 +#elif _pAD_IGBT==0xA2 +#define C_AdcChannel_Igbt 2 +#elif _pAD_IGBT==0xA3 +#define C_AdcChannel_Igbt 3 +#elif _pAD_IGBT==0xA4 +#define C_AdcChannel_Igbt 4 +#elif _pAD_IGBT==0xA5 +#define C_AdcChannel_Igbt 5 +#elif _pAD_IGBT==0xA6 +#define C_AdcChannel_Igbt 6 +#elif _pAD_IGBT==0xA7 +#define C_AdcChannel_Igbt 7 + +#elif _pAD_IGBT==0xB0 +#define C_AdcChannel_Igbt 8 +#elif _pAD_IGBT==0xB1 +#define C_AdcChannel_Igbt 9 +#elif _pAD_IGBT==0xB2 +#define C_AdcChannel_Igbt 10 +#elif _pAD_IGBT==0xB3 +#define C_AdcChannel_Igbt 11 +#elif _pAD_IGBT==0xB4 +#define C_AdcChannel_Igbt 12 +#elif _pAD_IGBT==0xB5 +#define C_AdcChannel_Igbt 13 +#elif _pAD_IGBT==0xB6 +#define C_AdcChannel_Igbt 14 +#elif _pAD_IGBT==0xB7 +#define C_AdcChannel_Igbt 15 + +#elif _pAD_IGBT==0xC0 +#define C_AdcChannel_Igbt 16 +#elif _pAD_IGBT==0xC1 +#define C_AdcChannel_Igbt 17 +#elif _pAD_IGBT==0xC2 +#define C_AdcChannel_Igbt 18 + +#else +#define C_AdcChannel_Igbt C_AdcChannel_VRef +#endif +//------------------------------------------------------------------------- +#ifndef _pAD_PAN +#define C_AdcChannel_Pan C_AdcChannel_VRef + +#elif _pAD_PAN==0xA0 +#define C_AdcChannel_Pan 0 +#elif _pAD_PAN==0xA1 +#define C_AdcChannel_Pan 1 +#elif _pAD_PAN==0xA2 +#define C_AdcChannel_Pan 2 +#elif _pAD_PAN==0xA3 +#define C_AdcChannel_Pan 3 +#elif _pAD_PAN==0xA4 +#define C_AdcChannel_Pan 4 +#elif _pAD_PAN==0xA5 +#define C_AdcChannel_Pan 5 +#elif _pAD_PAN==0xA6 +#define C_AdcChannel_Pan 6 +#elif _pAD_PAN==0xA7 +#define C_AdcChannel_Pan 7 + +#elif _pAD_PAN==0xB0 +#define C_AdcChannel_Pan 8 +#elif _pAD_PAN==0xB1 +#define C_AdcChannel_Pan 9 +#elif _pAD_PAN==0xB2 +#define C_AdcChannel_Pan 10 +#elif _pAD_PAN==0xB3 +#define C_AdcChannel_Pan 11 +#elif _pAD_PAN==0xB4 +#define C_AdcChannel_Pan 12 +#elif _pAD_PAN==0xB5 +#define C_AdcChannel_Pan 13 +#elif _pAD_PAN==0xB6 +#define C_AdcChannel_Pan 14 +#elif _pAD_PAN==0xB7 +#define C_AdcChannel_Pan 15 + +#elif _pAD_PAN==0xC0 +#define C_AdcChannel_Pan 16 +#elif _pAD_PAN==0xC1 +#define C_AdcChannel_Pan 17 +#elif _pAD_PAN==0xC2 +#define C_AdcChannel_Pan 18 + +#else +#define C_AdcChannel_Pan C_AdcChannel_VRef +#endif +//------------------------------------------------------------------------- +#ifndef _pAD_TOP +#define C_AdcChannel_Top C_AdcChannel_VRef + +#elif _pAD_TOP==0xA0 +#define C_AdcChannel_Top 0 +#elif _pAD_TOP==0xA1 +#define C_AdcChannel_Top 1 +#elif _pAD_TOP==0xA2 +#define C_AdcChannel_Top 2 +#elif _pAD_TOP==0xA3 +#define C_AdcChannel_Top 3 +#elif _pAD_TOP==0xA4 +#define C_AdcChannel_Top 4 +#elif _pAD_TOP==0xA5 +#define C_AdcChannel_Top 5 +#elif _pAD_TOP==0xA6 +#define C_AdcChannel_Top 6 +#elif _pAD_TOP==0xA7 +#define C_AdcChannel_Top 7 + +#elif _pAD_TOP==0xB0 +#define C_AdcChannel_Top 8 +#elif _pAD_TOP==0xB1 +#define C_AdcChannel_Top 9 +#elif _pAD_TOP==0xB2 +#define C_AdcChannel_Top 10 +#elif _pAD_TOP==0xB3 +#define C_AdcChannel_Top 11 +#elif _pAD_TOP==0xB4 +#define C_AdcChannel_Top 12 +#elif _pAD_TOP==0xB5 +#define C_AdcChannel_Top 13 +#elif _pAD_TOP==0xB6 +#define C_AdcChannel_Top 14 +#elif _pAD_TOP==0xB7 +#define C_AdcChannel_Top 15 + +#elif _pAD_TOP==0xC0 +#define C_AdcChannel_Top 16 +#elif _pAD_TOP==0xC1 +#define C_AdcChannel_Top 17 +#elif _pAD_TOP==0xC2 +#define C_AdcChannel_Top 18 + +#else +#define C_AdcChannel_Top C_AdcChannel_VRef +#endif +/************************************************************************** +* ¹Ì¶¨ADCͨµÀ¶¨Òå +**************************************************************************/ +#define C_AdcChannel_Gnd 29 //GND-ADCͨµÀ +#define C_AdcChannel_Vdd 30 //VDD-ADCͨµÀ +#define C_AdcChannel_VRef 31 //ÄÚ²¿²Î¿¼µçѹ£¨1.2V£©ADCͨµÀ +/************************************************************************** +* AD¼ì²âÉèÖã¨00xxxx01£© +**************************************************************************/ +#define C_AdcSet_Gnd 0x01 | (C_AdcChannel_Gnd<<2) //GND +#define C_AdcSet_Vdd 0x01 | (C_AdcChannel_Vdd<<2) //VDD +#define C_AdcSet_VRef 0x01 | (C_AdcChannel_VRef<<2) //ÄÚ²¿²Î¿¼µçѹ + +#define C_AdcSet_Curr 0x01 | (C_AdcChannel_Curr<<2) //¹¤×÷µçÁ÷ +#define C_AdcSet_Vol 0x01 | (C_AdcChannel_Vol<<2) //Êеçµçѹ + +#define C_AdcSet_Igbt 0x01 | (C_AdcChannel_Igbt<<2) //IGBT-NTC +#define C_AdcSet_Pan 0x01 | (C_AdcChannel_Pan<<2) //¹øµ×NTC +#define C_AdcSet_Top 0x01 | (C_AdcChannel_Top<<2) //¶¥²¿NTC + +/************************************************************************** +--------------------------------- º¯ÊýÉùÃ÷ -------------------------------- +**************************************************************************/ +unsigned char SetWPUX_CommHave(unsigned char x); +unsigned char SetWPUX_CommNo(unsigned char x); +unsigned char SetTRISX_CommHave(unsigned char x); +unsigned char SetTRISX_CommNo(unsigned char x); + +/************************************************************************** +**************************************************************************/ +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Subfunction.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Subfunction.c new file mode 100644 index 0000000..930c0b1 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/Subfunction.c @@ -0,0 +1,118 @@ +/************************************************************************** +**************************************************************************/ +#include "Define_Global.h" + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDelay_Xus +* º¯Êý¹¦ÄÜ£ºÑÓʱ´¦Àí +* Èë¿Ú²ÎÊý£ºx=ÑÓʱʱ¼ä +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºËÀÑ­»·´¦Àí£¬×¢Òâµ÷Óà +**************************************************************************/ +void Delay_Xus(unsigned char x) +{ + GIE = 0; //¹Ø±ÕÖÐ¶Ï + GIE = 0; //È·±£ÖжÏÒÑ¹Ø±Õ + GIE = 0; //È·±£ÖжÏÒÑ¹Ø±Õ + GIE = 0; //È·±£ÖжÏÒÑ¹Ø±Õ + + while(--x) + { + NOP(); + NOP(); + NOP(); + } + + GIE = 1; //»Ö¸´ÖÐ¶Ï +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºDelay_Xms +* º¯Êý¹¦ÄÜ£ºÑÓʱ´¦Àí +* Èë¿Ú²ÎÊý£ºx=ÑÓʱʱ¼ä +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºËÀÑ­»·´¦Àí£¬×¢Òâµ÷Óà +**************************************************************************/ +void Delay_Xms(unsigned int x) +{ + volatile unsigned int i = 728; + + GIE = 0; //¹Ø±ÕÖÐ¶Ï + GIE = 0; //È·±£ÖжÏÒÑ¹Ø±Õ + GIE = 0; //È·±£ÖжÏÒÑ¹Ø±Õ + GIE = 0; //È·±£ÖжÏÒÑ¹Ø±Õ + + while(--x) + { + while(--i); + i = 728; + CLRWDT(); //Çå¿´ÃŹ· + } + + GIE = 1; //»Ö¸´ÖÐ¶Ï +} + +/*********************************************************************** +* º¯ÊýÃû³Æ£ºMemory_Write +* º¯Êý¹¦ÄÜ£ºÐ´ÈëEEÊý¾Ý +* Èë¿Ú²ÎÊý£ºaddr=дÈëµØÖ·£¬value=дÈëÊý¾Ý +* ³ö¿Ú²ÎÊý£ºEEд²Ù×÷Íê³É״̬ +* ±¸ ×¢£ºÎÞ +***********************************************************************/ +unsigned char Memory_Write(unsigned char addr, unsigned char value) +{ + EEADR = addr; //дÈëµØÖ· + EEDAT = value; //дÈëÊý¾Ý + CLRWDT(); //Çå¿´ÃŹ· + + EECON1 = 0x10; //EEÉÕдʱ¼ä = 2.5ms + EEPGD = 0; //·ÃÎÊÊý¾Ý´æ´¢Æ÷ + WREN = 1; //ÔÊÐíдÖÜÆÚ + + GIE = 0; //¹Ø±ÕÖÐ¶Ï + GIE = 0; //È·±£ÖжÏÒÑ¹Ø±Õ + GIE = 0; //È·±£ÖжÏÒÑ¹Ø±Õ + GIE = 0; //È·±£ÖжÏÒÑ¹Ø±Õ + + EECON2 = 0x55; //¸øEECON2дÈë0x55 + EECON2 = 0xAA; //¸øEECON2дÈë0xAA + + WR = 1; //Æô¶¯Ð´ÖÜÆÚ + NOP(); + NOP(); + NOP(); + NOP(); + CLRWDT(); //Çå¿´ÃŹ· + WREN = 0; //д½áÊø£¬¹Ø±ÕдÈë²Ù×÷ + GIE = 1; //»Ö¸´ÖÐ¶Ï + + if(WRERR) + { + return 0xFF; //EEд²Ù×÷³ö´í + } + else + { + return 0; //EEд²Ù×÷OK + } +} +/*********************************************************************** +* º¯ÊýÃû³Æ£ºMemory_Read +* º¯Êý¹¦ÄÜ£º¶ÁÈ¡EEÊý¾Ý +* Èë¿Ú²ÎÊý£ºaddr=¶ÁÈ¡µØÖ· +* ³ö¿Ú²ÎÊý£º¶ÁÈ¡Êý¾Ý +* ±¸ ×¢£ºÎÞ +***********************************************************************/ +unsigned char Memory_Read(unsigned char addr) +{ + EEADR = addr; //¶ÁÈ¡µØÖ· + + EEPGD = 0; //·ÃÎÊÊý¾Ý´æ´¢Æ÷ + RD = 1; //ʹÄܶÁÐźŠ+ NOP(); //ÕâÀï¶ÁÈ¡Êý¾Ý£¬±ØÐë¼ÓNOPÖ¸Áî + NOP(); + NOP(); + NOP(); + NOP(); + return EEDAT; //¶ÁÈ¡Êý¾Ý +} + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__CMS_IhPlus.h b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__CMS_IhPlus.h new file mode 100644 index 0000000..a1150a9 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__CMS_IhPlus.h @@ -0,0 +1,185 @@ +/************************************************************************** +**************************************************************************/ +#ifndef _CMS_IHPLUS_H_ +#define _CMS_IHPLUS_H_ +#pragma warning disable 752,759 + +/************************************************************************** +---------------------------------- Í·Îļþ --------------------------------- +**************************************************************************/ +#include "Define_Global.h" + +/************************************************************************** +--------------------------------- º¯ÊýÉùÃ÷ -------------------------------- +**************************************************************************/ +extern void __CMS_Plus_Interrupt(); +extern void __CMS_Plus_PPG(); + +/************************************************************************** +------------------------------- Á¬ÐøµÍ¹¦ÂÊ -------------------------------- +**************************************************************************/ +//²ÎÊýÃû³Æ£ºPPGµ¼Í¨ÑÓʱֵ£¨Á¬ÐøµÍ¹¦ÂÊ£© +//ȡֵ·¶Î§£º0~15 +//¶ÔÓ¦¹ØÏµ£º0=²»ÑÓʱ£¬1=4~5*125ns£¬2=8~9*125ns£¬¡­¡­15=64~65*125ns +#define C_PPGDly_LxLow 0 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºÁ¬ÐøµÍ¹¦ÂÊ¿ªÆô¹¦ÂÊÏÂÏÞ·§Öµ£¨Êµ¼Ê£º800W£© +//²ÎÊý˵Ã÷£º>=´Ë·§Öµ£¬²Å¿ªÆôÁ¬ÐøµÍ¹¦Âʹ¦ÄÜ +#define C_MinPower_LxLow 800/C_Mult_Power +/*************************************************************************/ +const unsigned char ValueTime_PPGDly_LxLow = C_PPGDly_LxLow; + +const unsigned char ValueMin_Power_LxLow = C_MinPower_LxLow; +/*************************************************************************/ +extern volatile unsigned char Status_LxLow; //Á¬ÐøµÍ¹¦ÂÊ״̬ +//------------------------------------------------------------------------- +extern volatile unsigned char Num_LxLowOn; //Á¬ÐøµÍ¹¦ÂÊ¿ª¸öÊý +extern volatile unsigned char Num_LxLowOff; //Á¬ÐøµÍ¹¦ÂʹظöÊý + +/************************************************************************** +--------------------------------- PPG¶¶Æµ --------------------------------- +**************************************************************************/ +//¼ÆË㹫ʽ£ºµçÁ÷бÂÊ = 256 * 256 * ʵ¼ÊµçÁ÷ / ¼ì²âµÄµçÁ÷AD +//²ÎÊý˵Ã÷£ºµçÁ÷бÂÊÔ½´ó£¬¹¦ÂÊԽС + +//²ÎÊýÃû³Æ£ºÌú¹øµçÁ÷бÂÊ£¨PPG¶¶Æµ£© +#define C_SlopeIron_Curr_PPGDP 5400 +//²ÎÊýÃû³Æ£º¸Ö¹øµçÁ÷бÂÊ£¨PPG¶¶Æµ£© +#define C_SlopeSteel_Curr_PPGDP 5400 +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºPPG¶¶Æµ¿ªÆôPPGTMRÏÂÏÞ·§Öµ£¨Êµ¼Ê£º14us£© +//²ÎÊý˵Ã÷£º>=´Ë·§Öµ£¬²Å¿ªÆôPPG¶¶Æµ¹¦ÄÜ +#define C_MinPPGTMR_PPGDP 32*14 + +//²ÎÊýÃû³Æ£ºPPG¶¶Æµ¿ªÆô¹¦ÂÊÏÂÏÞ·§Öµ£¨Êµ¼Ê£º1690W£© +//²ÎÊý˵Ã÷£º>=´Ë·§Öµ£¬²Å¿ªÆôPPG¶¶Æµ¹¦ÄÜ +#define C_MinPower_PPGDP 1690/C_Mult_Power +//------------------------------------------------------------------------- +//²ÎÊýÃû³Æ£ºPPG¶¶Æµ¿ØÖÆÖµ +//²ÎÊý˵Ã÷£ºÓëÊÐµçÆµÂÊ¡¢ÖжÏʱ¼ä£¨ValueTime_Int£©ÓйØÁª +#define C_Data1_PPGDP 55 //¶¶ÆµÇ°²¹³¥PPGÖµ +#define C_Data2_PPGDP 4 //PPGµÝ¼õ²½½ø +#define C_Data3_PPGDP 4 //PPGµÝ¼Ó²½½ø +#define C_Time1_PPGDP 40 //¶¶Æµ¿ªÊ¼µÈ´ýʱ¼ä +#define C_Time2_PPGDP 60 //PPGµÝ¼õ×Üʱ¼ä +#define C_Time3_PPGDP 60 //PPGµÝ¼Ó×Üʱ¼ä +#define C_Time4_PPGDP 10 //PPG±ä»¯ÔÝͣʱ¼ä +/*************************************************************************/ +const unsigned int ValueSlopeIron_Curr_PPGDP = C_SlopeIron_Curr_PPGDP; +const unsigned int ValueSlopeSteel_Curr_PPGDP = C_SlopeSteel_Curr_PPGDP; + +const unsigned int ValueMin_PPGTMR_PPGDP = C_MinPPGTMR_PPGDP; +const unsigned char ValueMin_Power_PPGDP = C_MinPower_PPGDP; + +const unsigned char ValueData1_PPGDP = C_Data1_PPGDP; +const unsigned char ValueData2_PPGDP = C_Data2_PPGDP; +const unsigned char ValueData3_PPGDP = C_Data3_PPGDP; +const unsigned char ValueTime1_PPGDP = C_Time1_PPGDP; +const unsigned char ValueTime2_PPGDP = C_Time2_PPGDP; +const unsigned char ValueTime3_PPGDP = C_Time3_PPGDP; +const unsigned char ValueTime4_PPGDP = C_Time4_PPGDP; +/*************************************************************************/ +extern volatile unsigned char Status_PPGDP; //PPG¶¶Æµ×´Ì¬ +//------------------------------------------------------------------------- +extern volatile bit B_PPGDP_Can; //PPG¶¶ÆµÇ¿ÖÆ´ò¿ª +extern volatile bit B_PPGDP_Dis; //PPG¶¶Æµ½ûÖ¹ + +/************************************************************************** +--------------------------------- ÆäËû²¿·Ö -------------------------------- +**************************************************************************/ +const unsigned char ValuePPGSub_BackPress = 0; +//------------------------------------------------------------------------- +const unsigned char ValueTime_Int = C_TimeUS_Int; +const unsigned char ValueTime_Main = C_TimeMS_Main; +//------------------------------------------------------------------------- +const unsigned int ValueSlopeIron_Curr = C_SlopeIron_Curr; +const unsigned int ValueSlopeSteel_Curr = C_SlopeSteel_Curr; +//------------------------------------------------------------------------- +const unsigned char ValueTime_SteelIron = C_Vaule_SteelIron; +//------------------------------------------------------------------------- +const unsigned char ValueVol_CoilVol = C_Vol_CoilVol; + +const unsigned char ValueVol_ZeroTurn = C_Vol_ZeroTurn; +const unsigned char ValueVol_ZeroTurn_VH = C_Vol_ZeroTurn_VH; +const unsigned char ValueVol_ZeroTurn_VL = C_Vol_ZeroTurn_VL; +/*************************************************************************/ +volatile unsigned char ValueOPA_Set = 0B00000000; + +#ifdef _TEST_PGAOUT_ +volatile unsigned char ValuePGA_Set = 0B10000010 | ((C_Times_PGA & 0x03) << 5); +#else +volatile unsigned char ValuePGA_Set = 0B10000000 | ((C_Times_PGA & 0x03) << 5); +#endif + +#ifdef _TEST_CMPOUT_ +volatile unsigned char ValueCM_Test = 0x08 | (C_CMOUTEN_Num & 0x07); +#else +volatile unsigned char ValueCM_Test = 0; +#endif +//------------------------------------------------------------------------- +volatile unsigned int ValuePPG_Single = C_PPGSingle; +volatile unsigned char ValueCnt_HaveNoPan = C_Vaule_HaveNoPan; +//------------------------------------------------------------------------- +volatile unsigned char ValueTime_PPGDly = C_PPGDly; +//------------------------------------------------------------------------- +volatile unsigned char ValueVol_VolSurge = C_Vol_VolSurge; +volatile unsigned char ValueVol_CurrSurge = C_Vol_CurrSurge; +volatile unsigned char ValueVol_OnStep = C_Vol_OnStep; + +volatile unsigned char ValueVol_BackPress1 = C_Vol_BackPress1; +volatile unsigned char ValuePPG_BackPress1 = C_PPG_BackPress1; +volatile unsigned char ValueVol_BackPress2 = C_Vol_BackPress2; +/*************************************************************************/ +volatile unsigned int Count_BackPress; //1¼¶¹ýѹ±£»¤¼ÆÊý +volatile unsigned int BakCount_BackPress; //1¼¶¹ýѹ±£»¤¼ÆÊý±¸·Ý + +volatile unsigned int Delay_CheckPan; //¼ì¹øÑÓʱʱ¼ä +volatile unsigned int Time_Syn; //ͬ²½Âö¿íʱ¼ä +volatile unsigned char Count_Syn; //ͬ²½´ÎÊý + +volatile unsigned int SlopeCurr_Set; //µçÁ÷бÂÊÉèÖÃÖµ + +volatile unsigned char PowerWork; //¹¤×÷¹¦ÂÊÖµ +volatile unsigned int Buf_PPGTMR; //PPGµ¼Í¨»º´æÖµ +volatile unsigned int Value_PPGTMR; //PPGµ¼Í¨ÁÙʱֵ +//------------------------------------------------------------------------- +volatile bit B_Zero_No; //ÎÞ¹ýÁã +volatile bit B_Zero_Have; //ÓйýÁã +volatile bit B_Zero_Lose; //¹ýÁ㶪ʧ +volatile bit B_Zero_60Hz; //¹ýÁãÆµÂÊ=60Hz + +volatile bit B_Zero_Time; //¹ýÁ㷭ת£¨Ê±¼ä»ù×¼£© +volatile bit B_Zero_Adc; //¹ýÁ㷭ת£¨ADC£© + +volatile bit B_Vol_Low; //µÍÑ¹Çø¼ä +volatile bit B_Vol_Mid; //ÖÐÑ¹Çø¼ä +volatile bit B_Vol_High; //¸ßÑ¹Çø¼ä + +volatile bit B_Adc_Auto; //ADC×Ô¶¯¿ªÊ¼ +volatile bit B_Adc_Curr; //¼ì²â¹¤×÷µçÁ÷AD +volatile bit B_Adc_Vol; //¼ì²âÊеçµçѹAD + +volatile bit B_Pan_Check; //¼ì¹ø +volatile bit B_Pan_Single; //µ¥´Î¼ì¹øÂö³åÊä³ö +volatile bit B_Pan_LoseDly; //¶ª¹ø¼ì²âÑÓʱ +volatile bit B_Pan_Error; //¼ì¹ø¹ÊÕÏ£¨Î´½ÓÏßÅÌ£© +volatile bit B_Pan_No; //ÎÞ¹ø +volatile bit B_Pan_Have; //Óйø +volatile bit B_Pan_Iron; //Ìú¹ø +volatile bit B_Pan_Steel; //¸Ö¹ø + +volatile bit B_PPGTMR_ReadLock; //¶ÁPPGTMRËø±£»¤ +volatile bit B_PPGTMR_WriteLock; //дPPGTMRËø±£»¤ + +volatile bit B_Protect_BackPress; //¹ýѹ±£»¤ +volatile bit B_Protect_Stop; //Ó²¼þ±£»¤Í£Ö¹ +volatile bit B_ProtectCM_Restart; //±£»¤±È½ÏÆ÷ÖØÆô + +volatile bit B_PPG_On; //PPG¿ªÆô +volatile bit B_PPG_Out; //PPGÊä³ö +volatile bit B_Heat_En; //¼ÓÈÈʹÄÜ + +/************************************************************************** +**************************************************************************/ +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__CMS_IhPlus_CMS79F53x5_V1.0.0.lpp b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__CMS_IhPlus_CMS79F53x5_V1.0.0.lpp new file mode 100644 index 0000000..249c604 Binary files /dev/null and b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__CMS_IhPlus_CMS79F53x5_V1.0.0.lpp differ diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug.c b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug.c new file mode 100644 index 0000000..6e1f1f2 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug.c @@ -0,0 +1,661 @@ +/************************************************************************** +**************************************************************************/ +#include "Define_Global.h" +#if _MODE_IHDEBUG_ + +/************************************************************************** +--------------------------------- ±äÁ¿¶¨Òå -------------------------------- +**************************************************************************/ +volatile unsigned char Del_SendStatus; +volatile unsigned int StatusWork; +volatile unsigned int StatusError; +volatile unsigned int StatusProtect; + +volatile unsigned char Count_IhDebugComm; +volatile unsigned int Del_IhDebugComm; +//------------------------------------------------------------------------- +volatile bit B_SendStatus_IhDebug; +volatile bit B_TestComm_IhDebug; +volatile bit B_CommErr_IhDebug; +//************************************************************************* +volatile unsigned int Bak_StatusWork; +volatile unsigned int Bak_StatusError; +volatile unsigned int Bak_StatusProtect; + +volatile unsigned char Bak_PowerWork; +volatile unsigned char Bak_TimeAll_JXHeat; +volatile unsigned char Bak_TimeOn_JXHeat; +volatile unsigned char Bak_Num_LxLowAll; +volatile unsigned char Bak_Num_LxLowOn; + +volatile unsigned int Bak_Num_TestCM; +//------------------------------------------------------------------------- +volatile bit B_Bak_JXNoCheck; +volatile bit B_Bak_JXCheckPan; +volatile bit B_Bak_LxLow; + +/************************************************************************** +* º¯ÊýÃû³Æ£ºREL_DealSendCurve +* º¯Êý¹¦ÄÜ£º·¢ËÍÊý¾Ý´¦Àí£¨ÇúÏߣ© +* Èë¿Ú²ÎÊý£ºid = ·¢ËÍIDÖµ +* ³ö¿Ú²ÎÊý£º·¢ËÍÊý¾ÝÖµ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +unsigned int REL_DealSendCurve(unsigned char id) +{ + switch(id) + { + case 0: //¡¾ÇúÏß1Êý¾Ý¡¿ + return (unsigned int)AD_Volatage; //ÊеçµçѹAD¡¾9bit¡¿ + case 1: //¡¾ÇúÏß2Êý¾Ý¡¿ + return (unsigned int)AD_Current; //¹¤×÷µçÁ÷AD¡¾9bit¡¿ + case 2: //¡¾ÇúÏß3Êý¾Ý¡¿ + return (unsigned int)AD_TmprPan; //¹øµ×ζÈAD¡¾8bit¡¿ + case 3: //¡¾ÇúÏß4Êý¾Ý¡¿ + #ifndef _pAD_TOP + return 0; + #else + return (unsigned int)AD_TmprTop; //¶¥²¿Î¶ÈAD¡¾8bit¡¿ + #endif + case 4: //¡¾ÇúÏß5Êý¾Ý¡¿ + return (unsigned int)AD_TmprIgbt; //IGBTζÈAD¡¾8bit¡¿ + case 5: //¡¾ÇúÏß6Êý¾Ý¡¿ + return (unsigned int)AD_VRef; //ÄÚ²¿»ù×¼µçѹAD¡¾9bit¡¿ + case 6: //¡¾ÇúÏß7Êý¾Ý¡¿ + return (unsigned int)Vol.flo.integer + C_Vol_Comp; //Êеçµçѹ£¨V£© + case 7: //¡¾ÇúÏß8Êý¾Ý¡¿ + return (unsigned int)CurrentReal; //ʵ¼Ê¹¤×÷µçÁ÷£¨A*256£© + case 8: //¡¾ÇúÏß9Êý¾Ý¡¿ + return (unsigned int)PowerReal; //ʵ¼ÊÊä³ö¹¦ÂÊ£¨W£© + case 9: //¡¾ÇúÏß10Êý¾Ý¡¿ + return (unsigned int)PowerSet; //ÉèÖÃÊä³ö¹¦ÂÊ£¨W£© + case 10://¡¾ÇúÏß11Êý¾Ý¡¿ + return (unsigned int)Buf_PPGTMR; //µ±Ç°PPGTMRÖµ + case 11://¡¾ÇúÏß12Êý¾Ý¡¿ + return (unsigned int)Count_Syn; //¼ì¹øÕñµ´¸öÊý + case 12://¡¾ÇúÏß13Êý¾Ý¡¿ + return (unsigned int)Time_Syn; //¼ì¹øÕñµ´Âö¿í + case 13://¡¾ÇúÏß14Êý¾Ý¡¿ + return (unsigned int)Count_BackPress; //1¼¶¹ýѹ±£»¤¼ÆÊý + case 14://¡¾ÇúÏß15Êý¾Ý¡¿ + return (unsigned int)Count_IgbtProtect; //IGBTÓ²¼þ±£»¤¼ÆÊý + default: + return 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºREL_DealSendStatus +* º¯Êý¹¦ÄÜ£º·¢ËÍÊý¾Ý´¦Àí£¨×´Ì¬£© +* Èë¿Ú²ÎÊý£ºid = ·¢ËÍIDÖµ +* ³ö¿Ú²ÎÊý£º·¢ËÍIDÖµ + ·¢ËÍÊý¾ÝÖµ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +unsigned long REL_DealSendStatus(unsigned char id) +{ + volatile unsigned long data; + //--------------------------------------------------------------------- + if(B_SendStatus_IhDebug) + { + B_SendStatus_IhDebug = 0; //Íê³É״̬·¢ËÍ + + switch(id) + { + case 1: //¡¾¹¤×÷״̬¡¿ + data = 0xE0; + data <<= 16; + data += StatusWork; + return data; + case 2: //¡¾¹ÊÕÏ״̬¡¿ + data = 0xE1; + data <<= 16; + data += StatusError; + return data; + case 3: //¡¾±£»¤×´Ì¬¡¿ + data = 0xE2; + data <<= 16; + data += StatusProtect; + return data; + default: + return 0; + } + } + else + { + return 0; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºREL_DealReceData +* º¯Êý¹¦ÄÜ£º½ÓÊÕÊý¾Ý´¦Àí +* Èë¿Ú²ÎÊý£ºid = ½ÓÊÕIDÖµ¡¢value = ½ÓÊÕÊý¾ÝÖµ +* ³ö¿Ú²ÎÊý£º·¢ËÍIDÖµ + ·¢ËÍÊý¾ÝÖµ +* ±¸ ×¢£ºÄÚ²¿µ÷Óà +**************************************************************************/ +unsigned long REL_DealReceData(unsigned char id, unsigned int value) +{ + volatile unsigned long data; + //********************************************************************* + if((id & 0xF0) == 0xE0) //¡¾·¢Ëͻش«¡¿ + { + switch(id & 0x0F) + { + case 0: + Bak_StatusWork = value; //¹¤×÷״̬ + break; + case 1: + Bak_StatusError = value; //¹ÊÕÏ״̬ + break; + case 2: + Bak_StatusProtect = value; //±£»¤×´Ì¬ + break; + default: + break; + } + } + //********************************************************************* + else if(id == 0xA0) //¡¾¹¤×÷ÃüÁî¡¿ + { + if(TestOne(value,0)) + { + if(!B_Heat_En) + { + SetBit(value,1); //·çÉÈÇ¿ÖÆÊ¹ÄÜ + B_Fan_En = 1; //·çÉÈʹÄÜ + } + B_Heat_En = 1; //¼ÓÈÈʹÄÜ + } + else + { + B_Heat_En = 0; + } + + if(TestOne(value,1)) + { + B_Fan_En = 1; //·çÉÈʹÄÜ + } + else + { + B_Fan_En = 0; + } + + if(TestOne(value,2)) + { + B_Buzz_En = 1; //·äÃùÆ÷ʹÄÜ + } + else + { + B_Buzz_En = 0; + } + + if(TestOne(value,3)) + { + ClrBit(value,3); + ClrBit(value,2); //·äÃùÆ÷Ç¿ÖÆ¹Ø±Õ + B_Buzz_En = 0; + + if(!B_Buzz_Out) + { + Buzz_Short_One(); //·äÃùÆ÷¶ÌÃù1Éù + } + } + + if(TestOne(value,4)) + { + ClrBit(value,4); + ClrBit(value,2); //·äÃùÆ÷Ç¿ÖÆ¹Ø±Õ + B_Buzz_En = 0; + + if(!B_Buzz_Out) + { + Buzz_Long_One(); //·äÃùÆ÷³¤Ãù1Éù + } + } + + if(TestOne(value,5)) + { + if(!B_Bak_JXNoCheck) + { + ClrBit(value,6); //¼ä϶¼ÓÈÈʹÄÜ£¨¼ì¹ø£©Ç¿ÖÆ¹Ø±Õ + B_Bak_JXCheckPan = 0; + } + B_Bak_JXNoCheck = 1; //¼ä϶¼ÓÈÈʹÄÜ£¨²»¼ì¹ø£© + } + else + { + B_Bak_JXNoCheck = 0; + } + + if(TestOne(value,6)) + { + if(!B_Bak_JXCheckPan) + { + ClrBit(value,5); //¼ä϶¼ÓÈÈʹÄÜ£¨²»¼ì¹ø£©Ç¿ÖÆ¹Ø±Õ + B_Bak_JXNoCheck = 0; + } + B_Bak_JXCheckPan = 1; //¼ä϶¼ÓÈÈʹÄÜ£¨¼ì¹ø£© + } + else + { + B_Bak_JXCheckPan = 0; + } + + if(TestOne(value,7)) + { + if(!B_PPGDP_Can) + { + ClrBit(value,9); //Á¬ÐøµÍ¹¦ÂÊÇ¿ÖÆ¹Ø±Õ + B_Bak_LxLow = 0; + } + B_PPGDP_Can = 1; //¶¶ÆµÊ¹ÄÜ + } + else + { + if(B_PPGDP_Can) + { + SetBit(value,8); //¶¶ÆµÊ¹ÄÜÇ¿ÖÆ½ûÖ¹ + B_PPGDP_Dis = 1; //¶¶Æµ½ûÖ¹ + } + B_PPGDP_Can = 0; + } + + if(TestOne(value,8)) + { + B_PPGDP_Dis = 1; //¶¶Æµ½ûÖ¹ + } + else + { + B_PPGDP_Dis = 0; + } + + if(TestOne(value,9)) + { + if(!B_Bak_LxLow) + { + ClrBit(value,7); //¶¶ÆµÊ¹ÄÜÇ¿ÖÆ¹Ø±Õ + B_PPGDP_Can = 0; + SetBit(value,8); //¶¶ÆµÊ¹ÄÜÇ¿ÖÆ½ûÖ¹ + B_PPGDP_Dis = 1; //¶¶Æµ½ûÖ¹ + } + B_Bak_LxLow = 1; //Á¬ÐøµÍ¹¦ÂÊʹÄÜ + } + else + { + B_Bak_LxLow = 0; + } + } + //--------------------------------------------------------------------- + else if((id & 0xF0) == 0xB0) //¡¾¹¤×÷²ÎÊý¡¿ + { + switch(id & 0x0F) + { + case 0: //¼ÓÈÈÊä³ö¹¦ÂÊ£¨¡Á10W£© + Bak_PowerWork = value; + break; + case 1: //¼ÓÈȼä϶×Üʱ¼ä£¨¡Á0.5Ã룩 + Bak_TimeAll_JXHeat = value; + break; + case 2: //¼ÓÈȼä϶¿ªÊ±¼ä£¨¡Á0.5Ã룩 + Bak_TimeOn_JXHeat = value; + break; + case 3: //¼ÓÈÈÁ¬ÐøµÍ¹¦ÂÊ×ܸöÊý + Bak_Num_LxLowAll = value; + break; + case 4: //¼ÓÈÈÁ¬ÐøµÍ¹¦ÂÊ¿ª¸öÊý + Bak_Num_LxLowOn = value; + break; + default: + break; + } + } + //--------------------------------------------------------------------- + else if((id & 0xF0) == 0xC0) //¡¾ÅäÖòÎÊý¡¿ + { + switch(id & 0x0F) + { + case 0: //PPGµ¼Í¨ÑÓʱ + ValueTime_PPGDly = value; + break; + case 1: //µçѹÀËÓ¿ + ValueVol_VolSurge = value; + break; + case 2: //µçÁ÷ÀËÓ¿ + ValueVol_CurrSurge = value; + break; + case 3: //µ¼Í¨Ì¨½× + ValueVol_OnStep = value; + break; + case 4: //1¼¶¹ýѹ + ValueVol_BackPress1 = value; + break; + case 5: //1¼¶¹ýѹPPGϽµ²½½ø + ValuePPG_BackPress1 = value; + break; + case 6: //2¼¶¹ýѹ + ValueVol_BackPress2 = value; + break; + default: + break; + } + } + //********************************************************************* + else if(id == 0x80) //¡¾²âÊÔÃüÁî¡¿ + { + if(TestOne(value,0)) + { + if(!B_Test_PanCheck) + { + ClrBit(value,1); //PPG²âÊÔÇ¿ÖÆ¹Ø±Õ + B_Test_PPGOut = 0; + } + B_Test_PanCheck = 1; //¼ì¹ø²âÊÔ¿ªÆô + } + else + { + B_Test_PanCheck = 0; + } + + if(TestOne(value,1)) + { + if(!B_Test_PPGOut) + { + ClrBit(value,0); //¼ì¹ø²âÊÔÇ¿ÖÆ¹Ø±Õ + B_Test_PanCheck = 0; + } + B_Test_PPGOut = 1; //PPG²âÊÔ¿ªÆô + } + else + { + B_Test_PPGOut = 0; + } + + if(TestOne(value,2)) + { + B_Test_CM_RA0 = 1; //±È½ÏÆ÷²âÊÔ¿ªÆô£¨RA0£© + } + else + { + B_Test_CM_RA0 = 0; + } + + if(TestOne(value,3)) + { + B_Test_CM_RB7 = 1; //±È½ÏÆ÷²âÊÔ¿ªÆô£¨RB7£© + } + else + { + B_Test_CM_RB7 = 0; + } + + if(TestOne(value,4)) + { + B_Test_PGA = 1; //PGA²âÊÔ¿ªÆô£¨RC0£© + } + else + { + B_Test_PGA = 0; + } + + if(TestOne(value,5)) + { + B_Test_SlopeCurr = 1; //µçÁ÷бÂʲâÊÔ¿ªÆô + } + else + { + B_Test_SlopeCurr = 0; + } + + if(TestOne(value,6)) + { + B_ErrorCheck_Dis = 1; //½ûÖ¹Ó²¼þ¹ÊÕϼì²â + } + else + { + B_ErrorCheck_Dis = 0; + } + + if(TestOne(value,7)) + { + B_LosePanCheck_Dis = 1; //½ûÖ¹µçÁ÷¶ª¹ø¼ì²â + } + else + { + B_LosePanCheck_Dis = 0; + } + } + //--------------------------------------------------------------------- + else if((id & 0xF0) == 0x90) //¡¾²âÊÔ²ÎÊý¡¿ + { + switch(id & 0x0F) + { + case 0: //¼ì¹ø²âÊÔ-PPGTMRÖµ + ValuePPG_Single = value; + break; + case 1: //PPG²âÊÔ-PPGTMRÖµ + PPGTMR_TestPPG = value; + break; + case 2: //±È½ÏÆ÷²âÊÔ-ͨµÀ + Bak_Num_TestCM = 0xFF00 | value; + break; + case 3: //µçÁ÷бÂʲâÊÔ-бÂÊ + SlopeCurr_Test = value; + break; + default: + break; + } + } + //********************************************************************* + Del_IhDebugComm = 0; //ÇåͨÐŹÊÕϼÆÊ± + B_CommErr_IhDebug = 0; //ÇåͨÐŹÊÕϱêÖ¾ + B_TestComm_IhDebug = 1; //¿ªÊ¼¼ì²âͨÐŹÊÕÏ + + if((id >= 0xE0) || (id < 0x80)) + { + return 0; + } + else + { + data = id; + data <<= 16; + data += value; + return data; + } +} + +/************************************************************************** +* º¯ÊýÃû³Æ£ºREL_ReceSendCom +* º¯Êý¹¦ÄÜ£º½ÓÊÕ·¢Ë͹«¹²´¦Àí +* Èë¿Ú²ÎÊý£ºÎÞ +* ³ö¿Ú²ÎÊý£ºÎÞ +* ±¸ ×¢£ºÖ÷Ñ­»·µ÷Óà +**************************************************************************/ +void REL_ReceSendCom(void) +{ + volatile unsigned int i; + + static unsigned char Del_JXHeat,Cnt_JXHeat; + static unsigned char Del_DispBackPress; + static bit B_DispBackPress; + + /********************************************************************** + ½ÓÊÕ + **********************************************************************/ + B_HeatStop_CheckPan = 0; + B_HeatStop_NoCheck = 0; + + if((B_Bak_JXCheckPan || B_Bak_JXNoCheck) && Bak_TimeOn_JXHeat && (Bak_TimeAll_JXHeat > Bak_TimeOn_JXHeat)) + { + if(++Del_JXHeat >= 500/C_TimeMS_Main) //0.5s + { + Del_JXHeat = 0; + + if(++Cnt_JXHeat >= Bak_TimeAll_JXHeat) + { + Cnt_JXHeat = 0; + } + } + + if(Cnt_JXHeat >= Bak_TimeOn_JXHeat) + { + if(B_Bak_JXCheckPan) + { + B_HeatStop_CheckPan = 1; //²»¼ÓÈȵ«¼ì¹ø + } + else + { + B_HeatStop_NoCheck = 1; //²»¼ÓÈȲ»¼ì¹ø + } + } + } + else + { + Del_JXHeat = 0; + Cnt_JXHeat = 0; + } + //--------------------------------------------------------------------- + PowerWork = Bak_PowerWork; + //********************************************************************* + if(B_Bak_LxLow && Bak_Num_LxLowOn && (Bak_Num_LxLowAll > Bak_Num_LxLowOn)) + { + Num_LxLowOn = Bak_Num_LxLowOn; + Num_LxLowOff = (unsigned)Bak_Num_LxLowAll - Bak_Num_LxLowOn; + } + else + { + Num_LxLowOn = 0; + Num_LxLowOff = 0; + } + //********************************************************************* + if((B_Test_CM_RA0 || B_Test_CM_RB7) && Bak_Num_TestCM) + { + ValueCM_Test = 0x08 | ((unsigned)Bak_Num_TestCM & 0x07); + } + else + { + ValueCM_Test = 0; + } + //--------------------------------------------------------------------- + if(B_Test_PGA) + { + ValuePGA_Set |= 0x02; + } + else + { + ValuePGA_Set &= ~0x02; + } + + /********************************************************************** + ·¢ËÍ + **********************************************************************/ + if(B_Protect_BackPress) + { + B_DispBackPress = 1; //¹ýѹ±£»¤ÏÔʾ + } + + if(B_DispBackPress) + { + if(Del_DispBackPress >= 500/C_TimeMS_Main) //500ms + { + B_DispBackPress = 0; //Í˳ö¹ýѹ±£»¤ÏÔʾ + } + else + { + Del_DispBackPress++; + } + } + else + { + Del_DispBackPress = 0; + } + //--------------------------------------------------------------------- + i = 0; + if(B_Pan_Error) SetBit(i,0); //¼ì¹ø¹ÊÕÏ£¨Î´½ÓÏßÅÌ£© + if(B_Pan_No) SetBit(i,1); //ÎÞ¹ø + if(B_Pan_Have) SetBit(i,2); //Óйø + if(B_Pan_Steel) SetBit(i,3); //¸Ö¹ø + if(B_Pan_Iron) SetBit(i,4); //Ìú¹ø + + if(B_Zero_No) SetBit(i,5); //ÎÞ¹ýÁã + else + {if(!B_Zero_60Hz) SetBit(i,6); //¹ýÁãÆµÂÊ = 50Hz + else SetBit(i,7);} //¹ýÁãÆµÂÊ = 60Hz + + if(B_PPG_Out) SetBit(i,8); //Õý³£¼ÓÈÈ + if(B_PPGStop_NoCheck) SetBit(i,9); //¼ÓÈÈÔÝÍ££¬²»¼ì¹ø + if(B_PPGStop_CheckPan) SetBit(i,10); //¼ÓÈÈÔÝÍ££¬²¢¼ì¹ø + if(Flag1_Error | Flag2_Error) SetBit(i,11); //¹ÊÕÏÍ£Ö¹¼ÓÈÈ + if(B_Protect_Stop) SetBit(i,12); //±£»¤Í£Ö¹¼ÓÈÈ + if(Status_PPGDP & 0x02) SetBit(i,13); //¶¶Æµ¿ªÆô + if(Status_LxLow & 0x02) SetBit(i,14); //Á¬ÐøµÍ¹¦ÂÊ¿ªÆô + + StatusWork = i; //¹¤×÷״̬ + //--------------------------------------------------------------------- + i = 0; + if(B_EVolLow) SetBit(i,0); //Êеçµçѹ¹ýµÍ + if(B_EVolHigh) SetBit(i,1); //Êеçµçѹ¹ý¸ß + if(B_EIgbtOpen) SetBit(i,2); //IGBT-NTC¿ªÂ· + if(B_EIgbtClose) SetBit(i,3); //IGBT-NTC¶Ì· + if(B_EIgbtOver) SetBit(i,4); //IGBT-NTC³¬Î + if(B_EPanOpen) SetBit(i,5); //¹øµ×-NTC¿ªÂ· + if(B_EPanClose) SetBit(i,6); //¹øµ×-NTC¶Ì· + if(B_EPanOver) SetBit(i,7); //¹øµ×-NTC³¬Î + if(B_EPanFail) SetBit(i,8); //¹øµ×-NTCʧЧ + if(B_ETopOpen) SetBit(i,9); //¶¥²¿-NTC¿ªÂ· + if(B_ETopClose) SetBit(i,10); //¶¥²¿-NTC¶Ì· + if(B_ETopFail) SetBit(i,11); //¶¥²¿-NTCʧЧ + if(B_CommErr_IhDebug) SetBit(i,12); //ͨÐŹÊÕÏ + + StatusError = i; //¹ÊÕÏ״̬ + //--------------------------------------------------------------------- + i = 0; + if(TestOne(Status_PPGStop,0)) SetBit(i,0); //1¼¶¹ýѹ±È½ÏÆ÷¼ÆÊýÒç³ö + if(TestOne(Status_PPGStop,1)) SetBit(i,1); //µçѹÀËÓ¿ + if(TestOne(Status_PPGStop,2)) SetBit(i,2); //µçÁ÷ÀËÓ¿ + if(TestOne(Status_PPGStop,3)) SetBit(i,3); //2¼¶¹ýѹ + if(TestOne(Status_PPGStop,4)) SetBit(i,4); //µ¼Í¨Ì¨½×¹ý¸ß + if(TestOne(Status_PPGStop,5)) SetBit(i,5); //PPG¿´ÃŹ·Òç³ö + if(B_DispBackPress) SetBit(i,6); //¹ýѹ±£»¤ + + StatusProtect = i; //±£»¤×´Ì¬ + //--------------------------------------------------------------------- + if(++Del_SendStatus >= 100/C_TimeMS_Main) //150ms + { + Del_SendStatus = 0; + B_SendStatus_IhDebug = 1; //·¢ËÍ״̬ + } + + /********************************************************************** + ͨÐŹÊÕÏ + **********************************************************************/ + if(!B_TestComm_IhDebug) + { + Del_IhDebugComm = 0; //δ¿ªÊ¼¼ì²âͨÐŹÊÕÏ + B_CommErr_IhDebug = 0; //ÇåͨÐŹÊÕϱêÖ¾ + } + else if(++Del_IhDebugComm >= 1000/C_TimeMS_Main) //1s + { + Del_IhDebugComm = 0; + B_CommErr_IhDebug = 1; //ͨÐŹÊÕÏ + + if(++Count_IhDebugComm & 0x01) + { + B_Fan_En = 1; + } + else + { + B_Fan_En = 0; + } + + B_Heat_En = 0; + B_Buzz_En = 0; + B_Test_PanCheck = 0; + B_Test_PPGOut = 0; + } +} + + +/************************************************************************** +**************************************************************************/ +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug.h b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug.h new file mode 100644 index 0000000..6fcfe61 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug.h @@ -0,0 +1,55 @@ +/************************************************************************** +**************************************************************************/ +#ifndef _REL_IHDEBUG_ +#define _REL_IHDEBUG_ +#if _MODE_IHDEBUG_ + +/************************************************************************** +--------------------------------- ³£Á¿¶¨Òå -------------------------------- +**************************************************************************/ +#define C_IhDebug_Baudrate 9600 //²¨ÌØÂÊ£¨×î´óÖ§³Ö²¨ÌØÂÊΪ9600£© +//------------------------------------------------------------------------- +#define C_IhDebug_SendTypeID 0 //·¢ËÍÊý¾ÝÀàÐÍID +#define C_IhDebug_SendCntSum 15 //Ò»¹²ÐèÒª·¢ËͽṹÌå¸öÊý +#define C_IhDebug_SendCntOnce 2 //Ò»´ÎÑ­»·×î¶à·¢ËͽṹÌå¸öÊý +//************************************************************************* +const unsigned char REL_IhDebug_Baudrate = 1000000 / C_IhDebug_Baudrate - 1; +//------------------------------------------------------------------------- +const unsigned char REL_IhDebug_SendTypeID = C_IhDebug_SendTypeID; +const unsigned char REL_IhDebug_SendCntOnce = C_IhDebug_SendCntOnce; + +#if (C_IhDebug_SendCntSum % C_IhDebug_SendCntOnce) +const unsigned char REL_IhDebug_PackIDX_Max = C_IhDebug_SendCntSum / C_IhDebug_SendCntOnce; +const unsigned char REL_IhDebug_PackSend_CntFinal = C_IhDebug_SendCntSum % C_IhDebug_SendCntOnce; +#else +const unsigned char REL_IhDebug_PackIDX_Max = (C_IhDebug_SendCntSum - 1) / C_IhDebug_SendCntOnce; +const unsigned char REL_IhDebug_PackSend_CntFinal = C_IhDebug_SendCntOnce; +#endif + +/************************************************************************** +--------------------------------- ±äÁ¿¶¨Òå -------------------------------- +**************************************************************************/ +volatile unsigned int PPGTMR_TestPPG; +volatile unsigned int SlopeCurr_Test; +//------------------------------------------------------------------------- +volatile bit B_Test_PGA; +volatile bit B_Test_CM_RA0; +volatile bit B_Test_CM_RB7; + +volatile bit B_Test_PanCheck; +volatile bit B_Test_PPGOut; +volatile bit B_Test_SlopeCurr; +volatile bit B_ErrorCheck_Dis; +volatile bit B_LosePanCheck_Dis; + +/************************************************************************** +--------------------------------- º¯ÊýÉùÃ÷ -------------------------------- +**************************************************************************/ +extern void REL_IhDebug_Main(); +extern void REL_IhDebug_Int(); + +/************************************************************************** +**************************************************************************/ +#endif +#endif + diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug_Comm_V1.0.0.lpp b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug_Comm_V1.0.0.lpp new file mode 100644 index 0000000..f565ea9 Binary files /dev/null and b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug_Comm_V1.0.0.lpp differ diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/工程版本说明.txt b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/工程版本说明.txt new file mode 100644 index 0000000..9620423 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/工程版本说明.txt @@ -0,0 +1,3 @@ +/* °æ±¾ºÅ£ºV1.0 +/* Éú³ÉÈÕÆÚ£º2023.2.7 + \ No newline at end of file diff --git a/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/库版本说明.txt b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/库版本说明.txt new file mode 100644 index 0000000..c59e5a4 --- /dev/null +++ b/范例程åº�(C语言)/IH-CMS79F53X5-C-V1.0/库版本说明.txt @@ -0,0 +1,4 @@ +/* ¿âÃû³Æ£º__CMS_IhPlus_CMS79F53x5 +/* °æ±¾ºÅ£ºV1.0.0 +/* Éú³ÉÈÕÆÚ£º2023.2.7 + \ No newline at end of file diff --git a/范例程åº�(C语言)/IH通讯å��è®®-V1.0.pdf b/范例程åº�(C语言)/IH通讯å��è®®-V1.0.pdf new file mode 100644 index 0000000..4582771 Binary files /dev/null and b/范例程åº�(C语言)/IH通讯å��è®®-V1.0.pdf differ diff --git a/调试软件和手册/CMS_IhDebug_V1.2.0.rar b/调试软件和手册/CMS_IhDebug_V1.2.0.rar new file mode 100644 index 0000000..d0507b5 Binary files /dev/null and b/调试软件和手册/CMS_IhDebug_V1.2.0.rar differ diff --git a/调试软件和手册/IH调试手册(CMS79F53x)-C语言版-V1.1.pdf b/调试软件和手册/IH调试手册(CMS79F53x)-C语言版-V1.1.pdf new file mode 100644 index 0000000..b9f313a Binary files /dev/null and b/调试软件和手册/IH调试手册(CMS79F53x)-C语言版-V1.1.pdf differ