| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- /********************************************************************************
- **** Copyright (C), 2019, Fortior Technology Co., Ltd. ****
- ********************************************************************************
- * File Name : UART.c
- * Author : Bruce HW&RD
- * Date : 2019-09-11
- * Description : .C file function description
- * Version : 1.0
- * Function List :
- *
- * Record :
- * 1.Date : 2019-09-11
- * Author : Bruce HW&RD
- * Modification: Created file
- ********************************************************************************/
- #include "FU68xx_5.h"
- #include <Myproject.h>
- //MCUART xdata Uart;
- ddatet1 xdata DATA1;
- DATE_HUI xdata DATA2_Hui;
- uint8 FaultCommuMonCt=0;
- extern int8 xdata UART1_RX_flag;
- extern int8 xdata UART1_TX_flag;
- extern int8 xdata UART1_Rec_S;
- extern int8 UART1_rx_rat_time,UART1_rx_count;
- extern uint8 xdata UART1_In_L,UART1_In_H; //
- extern int8 xdata UART1_Rx_dat[12];//Á¬ÊÕ8×Ö½Ú
- void UART2_Init(void)
- {
- uint16 bps=0;
- #if (Uart_COMMUNICATION==0)
- {
- bps=1200;
- }
- #elif (Uart_COMMUNICATION==1)
- {
- bps=9600;
- }
- #endif
- SetBit(PH_SEL,UART2EN);
- /* UART模式 UT2_MOD1,UT2_MOD0为:
- 00 模式0,移位寄存器波特率为 系统时钟 /12
- 01 模式1,8-bit UART 波特率为 fcpu_clk / ( (16 / (1+ UT2_BAUD[BAUD2_SEL]) ) / (UT2_BAUD+1) )
- 10 模式2,9-bit UART 波特率为 fcpu_clk / ( 32 – 16* UT2_BAUD[BAUD2_SEL])
- 11 模式3,9-bit UART 波特率为 fcpu_clk / ( (16 / (1+ UT2_BAUD[BAUD2_SEL])) / (UT2_BAUD+1) ) */
-
- UT2MOD1 = 0; // 9位模式 01
- UT2MOD0 = 1;
- /* Does not allow multi-thread cpu operation */
- /* UT2_SM2 为 0 - 单机通讯为 1 - 多机通讯 */
- UT2SM2 = 0;
- /* UT2_REN 为 0 - 禁止接收为 1 - 使能接收 */
- UT2REN = 1;
- UT2RI = 0;
- /* Uart2设置中断优先级 */
-
- SetBit(IP3, PSPI_UT21);
- ClrBit(IP3, PSPI_UT20);
-
- // UART2CH1, UART2CH0
- // 00:P3.6 为 RXD、P3.7 为 TXD(P3.6 为单线模式的输入输出)
- // 01:P4.7 为 RXD、P1.2 为 TXD(P1.2 为单线模式的输入输出)
- // 1X:P0.1 为 RXD、P0.0 为 TXD(P0.1 为单线模式的输入输出)
-
- ClrBit(PH_SEL1,UART2CH1);
- ClrBit(PH_SEL1,UART2CH0);
- // 设置波特率 根据 fcpu_clk / ( (16 / (1+ UT2_BAUD[BAUD2_SEL]) ) / (UT2_BAUD+1) )计算
-
- UT2_BAUD = 0;
- // if (bps > 600)
- {
- UT2_BAUD |= 1500000 / bps - 1;
- }
- // else
- // {
- // SetBit(UT2_BAUD,BAUD2_SEL);
- //
- // UT2_BAUD |= 750000 / bps - 1;
- // }
-
- /* Enable UART2 interrupt */
-
- SetBit(UT2_BAUD,UART2IEN);
- }
- void UART1_Init(void)
- {
- #if (Debugg==1)
- {
- /*工具程序*/
- /*工具*/
- SetBit(PH_SEL, UART1EN); //p0[6]as UART_RXD; p0[5]as UART_TXD
- UT_MOD1 = 0;
- UT_MOD0 = 1; //8bit?????UART??
- SM2 = 0; //??Mode2?Mode3????
- REN = 1; //????
- ES0 = 0; //????
- SetBit(IP3 , PI2C_UT11);
- ClrBit(IP3 , PI2C_UT10); // 中断优先级别3
- // SetBit(UT_BAUD , UART_2xBAUD); //????0-->Disable 1-->Enable
- UT_BAUD = 0x9B; //default baudrate:9600-0x9b,1200-0x4E1 00 150000 1D =50000
- ES0 = 1; //??/??????
- }
- #else
- {
- // /*自己串口*/
- SetBit(PH_SEL, UART1EN); //p0[6]as UART_RXD; p0[5]as UART_TXD
- UT_MOD1 = 0;
- UT_MOD0 = 1; //8bit?????UART??
- SM2 = 0; //??Mode2?Mode3????
- REN = 1; //????
- ES0 = 0; //????
- ClrBit(IP3 , PI2C_UT11);
- ClrBit(IP3 , PI2C_UT10); // 中断优先级别3
- SetBit(UT_BAUD , UART_2xBAUD); //????0-->Disable 1-->Enable
- UT_BAUD = 0x00; //default baudrate:9600-0x9b,1200-0x4E1 00 150000 1D =50000
- ES0 = 0; //??/??????
- }
- #endif
- }
- char putchar(char c)
- {
- UT_DR = c;
- while (TI==0){};TI=0;
- return c;
- }
- /*P是PSW程序状态字的一个位,表示奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。
- 若为奇数,则P=1,否则为0。 运算结果有奇数个1,P=1;运算结果有偶数个1,P=0。*/
- //奇校验(odd parity):让传输的数据(包含校验位)中1的个数为奇数。
- //偶校验(even parity):让传输的数据(包含校验位)中1的个数为偶数。
- // Buf 校验的数据 o_or_e 奇偶方式选择
- uint8 even_or_odd(uint8 Buf,uint8 o_or_e)
- {
- uint8 even_odd=0,tmpP=0;
- ACC = Buf;
- tmpP = P;
-
- if(o_or_e == 0) //偶校验
- {
- even_odd = (tmpP==1)?1:0;
- }
- else //奇校验
- {
- even_odd = (tmpP==1)?0:1;
- }
- return even_odd;
- }
- #if (Uart_Select==Uart_MoNi)
- /*数据接收函数*/
- void UartRecive(void)
- {
- Uart.UartReadTemp =RX_BUF ; // 读接收数据
- Uart.R_DATA[Uart.UartReadCnt++]= Uart.UartReadTemp;
- }
- /*数据发送函数*/
- void UartSend(void)
- {
- if (Uart.TxCnt < (TX_LEN1-1))
- {
- Uart.TxCnt++;
- TX_BUF =Uart.T_DATA[Uart.TxCnt];
- }
- else
- { Uart.TxCnt=0;
- Uart.sendflag=0;
- }
- }
- /*串口数据处理,处理接收到的串口数据,运行于大循环中*/
- void UartDealResponse(void)
- {
- uint8 i;
-
- Uart_Check();//判断接收的数据是否正确
-
- if(Uart.sussf_falg==1)//数据接收正确且成功
- {
- Uart.ResponseFlag=1;//发送延时计时标志位
- Uart.UartReadCnt=0;
- Uart.time_shuju=0;
- mcFaultDect.commu_time=0;
- /*提取并转换串口接收数据*/
- /*压机速度获取*/
- DATA1.DATA12=Uart.R_DATA[1];
- if(DATA1.bf.DATA1_0==1)
- {
- Uart.YaJI_Speed =(uint16) Uart.R_DATA[2]*60;
- if(Uart.R_DATA[2]==0)
- {
- Uart.YaJI_Speed = 0;
- }
- }
- else
- {
- Uart.YaJI_Speed =0;
- }
- ConTrolCmd.yajispeed=Uart.YaJI_Speed;
- /*4通阀控制*/
- if(DATA1.bf.DATA1_1==1)
- {
- ConTrolCmd.sitongfa=1;
- }
- else//4通阀关闭
- {
- ConTrolCmd.sitongfa=0;
- }
-
- /*风机速度获取*/
- if(DATA1.bf.DATA1_2==1)//室外风机
- {
- Uart.FengSpeed = (uint16)Uart.R_DATA[3]*10;
- }
- else
- {
- Uart.FengSpeed = 0;
- }
- ConTrolCmd.fengjispeed=Uart.FengSpeed;
-
-
- /*电子膨胀阀开度获取*/
- if(DATA1.bf.DATA1_6==1)//电子膨胀阀
- {
- Uart.PengZhangFa = Uart.R_DATA[4] +256;
- }
- else
- {
- Uart.PengZhangFa = Uart.R_DATA[4];
- }
- ConTrolCmd.dianzifakaidu=Uart.PengZhangFa;
- /*回传数据*/
- for(i=0;i<=TX_LEN1;i++) //赋值之前先清零
- {
- Uart.T_DATA[i]=0;
- }
- DATA2_Hui.DATA_HUI=0; //先清零
-
- if(mcSpeedRamp.FlagONOFF ==1)
- {
- DATA2_Hui.bf.DATA2_0=1;
- }
- if(ConTrolCmd.sitongfa ==1)
- {
- DATA2_Hui.bf.DATA2_1=1;
- }
- if( Uart.FengSpeed)
- {
- DATA2_Hui.bf.DATA2_2=1;
- }
-
- Uart.PengZhangFa_ACT=bujindianji.Act;
- if(bujindianji.Act>500)
- {
- DATA2_Hui.bf.DATA2_6=1;
- Uart.PengZhangFa_ACT =500-256 ; //电子膨胀阀开度
- }
- else if(bujindianji.Act>255)
- {
- DATA2_Hui.bf.DATA2_6=1;
- Uart.PengZhangFa_ACT =bujindianji.Act-256 ; //电子膨胀阀开度
- }
- else
- {
- DATA2_Hui.bf.DATA2_6=0;
- Uart.PengZhangFa_ACT =(uint8)bujindianji.Act ; //电子膨胀阀开度
- }
-
- cumfault_6();
-
- Uart.T_DATA[0] = TX_ZHENTOU1;
- Uart.T_DATA[1] = DATA2_Hui.DATA_HUI;
- Uart.T_DATA[2] = S_Value2; //压机速度(rps)
- Uart.T_DATA[3] = Fengji_FG.FENJIPINLV2/10; //风机转速
- Uart.T_DATA[4] = Uart.PengZhangFa_ACT ; //电子膨胀阀开度
- Uart.T_DATA[5] = (uint8)(Huan_temp/5+100);//(uint8)(RealTempjisuan(AdcSampleValue.ADC_huan_temp>>3,3)/5+100) ; //环境温度
- Uart.T_DATA[6] = (uint8)(Guan_temp/5+100);//(uint8)(RealTempjisuan(AdcSampleValue.ADC_guan_temp>>3,2)/5+100) ; //交换器温度
- Uart.T_DATA[7] = (uint8)(Paiqi_temp/10+50);//(uint8)(RealTempjisuan(AdcSampleValue.ADC_paiqi_temp>>3,1)/10+50) ; //排气温度
- Uart.T_DATA[8] = 0x00 ; //预留
- Uart.T_DATA[9] = FaultCommuMonCt ; //预留
- Uart.T_DATA[10] = checkAdd1(Uart.T_DATA,0,TX_LEN1-1);
-
- Uart.TxCnt=0;
- Uart.sussf_falg=0;
- }
-
-
- if((Uart.time_cnt>500||Uart.time_shuju>2000)&&Uart.sendflag==0)//16s内读取不到数据清零或2s内校验不成功
- {
-
- Uart.UartReadCnt=0;
- Uart.time_shuju=0;
- for(i=0;i<RX_LEN1;i++)
- {
- Uart.R_DATA[i]=0;
- }
- UART1_RX_flag=0;
- UART1_TX_flag=0;
- UART1_Rec_S = 0;
- UART1_rx_count=0;
- UART1_rx_rat_time=0;
- UART1_In_L=0;
- UART1_In_H=0;
- RX_BUF=0;
- for(i=0;i<11;i++)
- {
- UART1_Rx_dat[i] =0;
- }
- }
-
-
- if(Uart.send_delay_time>=160)//延时160ms发送
- {
- TX_BUF=Uart.T_DATA[0];
- Uart.sendflag=1;
- Uart.TxCnt=0;
- Uart.send_delay_time=0;
- Uart.ResponseFlag=0;
- }
- }
- /*SUM1求和检验*/
- uint8 checkAdd1(uint8 *chCheckAdrr, uint8 chStartAddr,uint8 iCheckCnt)
- {
- uint8 i;
- uint8 iCheckResult = 0;
- chCheckAdrr += chStartAddr;
- for(i=0; i<iCheckCnt; i++)
- {
- iCheckResult += *chCheckAdrr;
- chCheckAdrr++;
- }
- iCheckResult &=0xff;
- return (iCheckResult);
- }
- /*SUM2求和检验*/
- uint8 checkAdd2(uint8 *chCheckAdrr, uint8 chStartAddr,uint8 iCheckCnt)
- {
- uint8 i;
- uint8 iCheckResult = 0;
- chCheckAdrr += chStartAddr;
- for(i=0; i<iCheckCnt; i++)
- {
- iCheckResult += *chCheckAdrr;
- chCheckAdrr++;
- }
- iCheckResult &=0xff;
- return (iCheckResult);
- }
- void Uart_Check(void)
- {
- uint8 i=0;
-
- if(Uart.R_DATA[0]!=RX_ZHENTOU1)//针头错误清零
- {
- UART1_RX_flag=0;
- UART1_TX_flag=0;
- Uart.UartReadCnt=0;
- for(i=0;i<RX_LEN1;i++)
- {
- Uart.R_DATA[i]=0;
- }
- }
-
- if(Uart.UartReadCnt>=RX_LEN1)
- {
- Uart.UartReadCnt=0;
- if((Uart.R_DATA[0]==RX_ZHENTOU1)&&(checkAdd2(Uart.R_DATA,0,(RX_LEN1-1))==Uart.R_DATA[RX_LEN1-1]))//将读取的正确数据转换为所用数据,并将所需数据给Uart.T_DATA赋值
- {
- Uart.sussf_falg=1;
- }
- if((Uart.R_DATA[0]!=RX_ZHENTOU1)||(checkAdd2(Uart.R_DATA,0,RX_LEN1-1)!=Uart.R_DATA[RX_LEN1-1])) //检验不对清零
- {
- Uart.sussf_falg=0;
- UART1_RX_flag=0;
- UART1_TX_flag=0;
- Uart.UartReadCnt=0;
- for(i=0;i<RX_LEN1;i++)
- {
- Uart.R_DATA[i]=0;
- }
- }
- }
- }
- void cumfault_6(void)
- {
- if(((mcFaultSource==FaultHardOVCurrent)||(mcFaultSource==FaultSoftOVCurrent))&&(mcProtectTime.CurrentPretectTimes>=CurrentProtectRestartTimes))
- {
- FaultCommuMonCt=4;
- }
- else if((mcFaultSource==FaultLossPhase)&&(mcProtectTime.LossPHTimes >= PhaseProtectRestartTimes))
- {
- FaultCommuMonCt=3;
- }
- else if((mcFaultSource==FaultStall)&&(mcProtectTime.StallTimes >= StallProtectRestartTimes))
- {
- FaultCommuMonCt=3;
- }
- else if((mcFaultSource==FaultIbusOffset)&&(mcProtectTime.IbusOffsetProtectTimes >= IbusOffsetRestartTimes))
- {
- FaultCommuMonCt=4;
- }
- else if(mcFaultSource==FaultIpmTemp)
- {
- FaultCommuMonCt=27;
- }
- else if(mcFaultSource==FaultUnderVoltage)
- {
- FaultCommuMonCt=2;
- }
- else if(mcFaultSource==FaultOverVoltage)
- {
- FaultCommuMonCt=1;
- }
- else if(mcFaultSource==FaultGuanTempSensor)
- {
- FaultCommuMonCt=19;
- }
- else if(mcFaultSource==FaultHuanTempSensor)
- {
- FaultCommuMonCt=20;
- }
- else
- {
- FaultCommuMonCt=0;
- }
- }
- #endif
|