diff --git a/User.c.bak b/User.c.bak deleted file mode 100644 index 22b39dd..0000000 --- a/User.c.bak +++ /dev/null @@ -1,330 +0,0 @@ -#include "MAIN.H" -//can信息 -UnInfCan UnInfCan_1 = {0}; -UnSwSample UnSwSample_1 = {0}; -UnSwOut UnSwOut_1 = {0}; - -//CAN发送周期 -uword CntCan_1 = 0; -bit FlgCan_1 = 0; -//第一次采集到有效数据指示 -bit FlgOneTime = 0; - -uword RgCanPerid = 1000; - -//PWM 20181227 -ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -//----------------------------------------------------------------------- -//RTC定时器 -//----------------------------------------------------------------------- -void RTCProcess(void) -{ -//************************************************************************ -//////CAN发送周期 - if(FlgCan_1){CntCan_1++;if(CntCan_1 >= RgCanPerid){FlgCan_1=0; CntCan_1=0;}}else{CntCan_1=0;} - -//************************************************************************ -} - -//输出PWM 20181227 -/* -ubyte *pStt, 状态机变量 -bit Cmd, 状态机输入,1,根据PwmH的值来决定输出,0,输出0 -bit Out, 状态机输出 -ubyte *pCnt, 定时计数器 -ubyte *pPwmH 状态机参数,PWM的高电平时间 -*/ -bit funcPwmOut(ubyte *pStt,bit Cmd,ubyte *pCnt,ubyte *pPwmH) -{ -ubyte PwmL = 0; -bit Out = 0; -//------------------------------------------------------------------------------------------------ - if((*pPwmH) > dfPwmH)(*pPwmH) = dfPwmH; //限制最大值 - PwmL = dfPwmH - (*pPwmH);//计算PWM低电平 - - if((1 == Cmd) ) - { - if(0 == (*pPwmH)) //高电平为0,表示PWM无效,由Cmd来控制,Cmd为1输出1,Cmd为0,输出0 - { - Out = 1; - (*pStt) = 0; - } - else - { - switch((*pStt)) - { - case 0: - (*pCnt) = 0; - (*pStt) = 1; - Out = 1; - break; - case 1: - if((*pCnt) >= (*pPwmH)) - { - (*pCnt) = 0; - (*pStt) = 2; - Out = 0; - } - else - { - (*pCnt)++; - (*pStt) = 1; - Out = 1; - } - break; - case 2: - if((*pCnt) >= PwmL) - { - (*pCnt) = 0; - (*pStt) = 1; - Out = 1; - } - else - { - (*pCnt)++; - (*pStt) = 2; - Out = 0; - } - break; - //----------------------------------------------------- - default:; - }//switch - }//else - }//if - else - { - Out = 0; - (*pStt) = 0; - } - return Out; -} - - -//根据接收的CAN缓冲区数据驱动相应LED指示灯。 -void LedDr(void) -{ -static ubyte RgSTT[16] = {0}; -static ubyte CntTime[16] = {0}; -//------------------------------------------------------------------------------------------------ - - dfOut_01 = funcPwmOut(&RgSTT[0 ],dfCmd_01,&CntTime[0 ],&PwmH[0 ]); - dfOut_02 = funcPwmOut(&RgSTT[1 ],dfCmd_02,&CntTime[1 ],&PwmH[1 ]); - dfOut_03 = funcPwmOut(&RgSTT[2 ],dfCmd_03,&CntTime[2 ],&PwmH[2 ]); - dfOut_04 = funcPwmOut(&RgSTT[3 ],dfCmd_04,&CntTime[3 ],&PwmH[3 ]); - dfOut_05 = funcPwmOut(&RgSTT[4 ],dfCmd_05,&CntTime[4 ],&PwmH[4 ]); - dfOut_06 = funcPwmOut(&RgSTT[5 ],dfCmd_06,&CntTime[5 ],&PwmH[5 ]); - dfOut_07 = funcPwmOut(&RgSTT[6 ],dfCmd_07,&CntTime[6 ],&PwmH[6 ]); - dfOut_08 = funcPwmOut(&RgSTT[7 ],dfCmd_08,&CntTime[7 ],&PwmH[7 ]); - dfOut_09 = funcPwmOut(&RgSTT[8 ],dfCmd_09,&CntTime[8 ],&PwmH[8 ]); - dfOut_10 = funcPwmOut(&RgSTT[9 ],dfCmd_10,&CntTime[9 ],&PwmH[9 ]); - dfOut_11 = funcPwmOut(&RgSTT[10],dfCmd_11,&CntTime[10],&PwmH[10]); - dfOut_12 = funcPwmOut(&RgSTT[11],dfCmd_12,&CntTime[11],&PwmH[11]); - dfOut_13 = funcPwmOut(&RgSTT[12],dfCmd_13,&CntTime[12],&PwmH[12]); - dfOut_14 = funcPwmOut(&RgSTT[13],dfCmd_14,&CntTime[13],&PwmH[13]); - dfOut_15 = funcPwmOut(&RgSTT[14],dfCmd_15,&CntTime[14],&PwmH[14]); - dfOut_16 = funcPwmOut(&RgSTT[15],dfCmd_16,&CntTime[15],&PwmH[15]); - -} - - -//can错误处理 -void CanErrorProcess(void) -{ - ubyte ubNSRL; - ubyte ubNSRH; - ubyte ubResetLEC = 0x3F; -//------------------------------------------- - EA = 0; - - CAN_pushAMRegs(); // push the CAN Access Mediator Registers - SFR_PAGE(_su0, SST0); // switch to page 0 - - CAN_vWriteCANAddress(CAN_NSR0); - CAN_vReadEN(); - ubNSRL = CAN_DATA0; - ubNSRH = CAN_DATA1; - if (ubNSRL & 0x20) // if ALERT - { - CAN_vInit(); - } - if (ubNSRL & 0x07) // if LEC - { - ubResetLEC = 0x38; - } - //// Reset LEC, TXOK, RXOK, ALERT, EWRN, BOFF, LLE, LOE (if set) - CAN_vWriteCANAddress(CAN_NSR0); // Addressing CAN_NSR0 - CAN_DATA0 = ~(ubNSRL & ubResetLEC); // load CAN_NSR0 status register[7-0] - CAN_DATA1 = ~(ubNSRH); // load CAN_NSR0 status register[15-8] - CAN_vWriteEN(D0_VALID+D1_VALID); // Data0 and Data1 are Valid for - - SFR_PAGE(_su0, RST0); // restore the old SCU page - CAN_popAMRegs(); // restore the CAN Access Mediator Registers - - EA = 1; -} - - -////效验算法 -//void Password(void) -//{ -// ubyte i; -////--------------------------------- -// for(i=0;i<5;i++) -// { -// UnInfCan_1.ArrData.Arr[0][4] ^= UnInfCan_1.ArrData.Arr[0][3];//CAN 第0个字节 -// UnInfCan_1.ArrData.Arr[0][4] ^= UnInfCan_1.ArrData.Arr[0][2];//CAN 第1个字节 -// UnInfCan_1.ArrData.Arr[0][4] ^= UnInfCan_1.ArrData.Arr[0][1];//CAN 第2个字节 -// UnInfCan_1.ArrData.Arr[0][4] ^= UnInfCan_1.ArrData.Arr[0][0];//CAN 第3个字节 -// UnInfCan_1.ArrData.Arr[0][4] ^= UnInfCan_1.ArrData.Arr[0][7];//CAN 第4个字节 -// UnInfCan_1.ArrData.Arr[0][4] ^= UnInfCan_1.ArrData.Arr[0][6];//CAN 第5个字节 -// UnInfCan_1.ArrData.Arr[0][4] ^= UnInfCan_1.ArrData.Arr[0][5];//CAN 第6个字节 -// } -//} - - -void CanTransmit(void) -{ -// ulong i; -//----------------- -------- - CAN_waitTransmit(DF_SwTx);//发送前等待上一帧发送完毕,这样不会丢帧 -// Password(); - - CAN_vLoadData(DF_SwTx, (ulong *)(&UnInfCan_1.ArrData.Arr[0][0])); // 装载数据 - CAN_vTransmit(DF_SwTx); -} - - -//CAN发送一帧 -void CanTX(void) -{ -//----------------------------------- - if(1 == SwOut09)UnInfCan_1.ArrData.Arr[0][3] |= (~0x01);else UnInfCan_1.ArrData.Arr[0][3] &= 0x01; //KGF1 //20200303修改为与接收到的数据一致,反馈与接收到时数据为一致 - if(1 == SwOut10)UnInfCan_1.ArrData.Arr[0][3] |= (~0x02);else UnInfCan_1.ArrData.Arr[0][3] &= 0x02; //KGF2 - if(1 == SwOut04)UnInfCan_1.ArrData.Arr[0][3] |= (~0x04);else UnInfCan_1.ArrData.Arr[0][3] &= 0x04; //KGF3 - if(1 == SwOut03)UnInfCan_1.ArrData.Arr[0][3] |= (~0x08);else UnInfCan_1.ArrData.Arr[0][3] &= 0x08; //KGF4 - if(1 == SwOut06)UnInfCan_1.ArrData.Arr[0][3] |= (~0x10);else UnInfCan_1.ArrData.Arr[0][3] &= 0x10; //KGF5 - if(1 == SwOut05)UnInfCan_1.ArrData.Arr[0][3] |= (~0x20);else UnInfCan_1.ArrData.Arr[0][3] &= 0x20; //KGF6 - if(1 == SwOut15)UnInfCan_1.ArrData.Arr[0][3] |= (~0x40);else UnInfCan_1.ArrData.Arr[0][3] &= 0x40; //KGF7 - if(1 == SwOut16)UnInfCan_1.ArrData.Arr[0][3] |= (~0x80);else UnInfCan_1.ArrData.Arr[0][3] &= 0x80; //KGF8 - if(1 == SwOut13)UnInfCan_1.ArrData.Arr[0][2] |= (~0x01);else UnInfCan_1.ArrData.Arr[0][2] &= 0x01; //KGF9 - if(1 == SwOut14)UnInfCan_1.ArrData.Arr[0][2] |= (~0x02);else UnInfCan_1.ArrData.Arr[0][2] &= 0x02; //KGF10 - if(1 == SwOut08)UnInfCan_1.ArrData.Arr[0][2] |= (~0x04);else UnInfCan_1.ArrData.Arr[0][2] &= 0x04; //KGF11 - if(1 == SwOut07)UnInfCan_1.ArrData.Arr[0][2] |= (~0x08);else UnInfCan_1.ArrData.Arr[0][2] &= 0x08; //KGF12 - if(1 == SwOut02)UnInfCan_1.ArrData.Arr[0][2] |= (~0x10);else UnInfCan_1.ArrData.Arr[0][2] &= 0x10; //KGF13 - if(1 == SwOut01)UnInfCan_1.ArrData.Arr[0][2] |= (~0x20);else UnInfCan_1.ArrData.Arr[0][2] &= 0x20; //KGF14 - if(1 == SwOut11)UnInfCan_1.ArrData.Arr[0][2] |= (~0x40);else UnInfCan_1.ArrData.Arr[0][2] &= 0x40; //KGF15 - if(1 == SwOut12)UnInfCan_1.ArrData.Arr[0][2] |= (~0x80);else UnInfCan_1.ArrData.Arr[0][2] &= 0x80; //KGF16 - - if(1 == SwIn01 )UnInfCan_1.ArrData.Arr[0][1] &= (~0x01);else UnInfCan_1.ArrData.Arr[0][1] |= 0x01; //Dia01 20200225修改为0数据变为1,1数据变为0,这样大CPU方便处理 - if(1 == SwIn02 )UnInfCan_1.ArrData.Arr[0][1] &= (~0x02);else UnInfCan_1.ArrData.Arr[0][1] |= 0x02; //Dia02 - if(1 == SwIn03 )UnInfCan_1.ArrData.Arr[0][1] &= (~0x04);else UnInfCan_1.ArrData.Arr[0][1] |= 0x04; //Dia03 - if(1 == SwIn04 )UnInfCan_1.ArrData.Arr[0][1] &= (~0x08);else UnInfCan_1.ArrData.Arr[0][1] |= 0x08; //Dia04 - if(1 == SwIn05 )UnInfCan_1.ArrData.Arr[0][1] &= (~0x10);else UnInfCan_1.ArrData.Arr[0][1] |= 0x10; //Dia05 - if(1 == SwIn06 )UnInfCan_1.ArrData.Arr[0][1] &= (~0x20);else UnInfCan_1.ArrData.Arr[0][1] |= 0x20; //Dia06 - if(1 == SwIn07 )UnInfCan_1.ArrData.Arr[0][1] &= (~0x40);else UnInfCan_1.ArrData.Arr[0][1] |= 0x40; //Dia07 - if(1 == SwIn08 )UnInfCan_1.ArrData.Arr[0][1] &= (~0x80);else UnInfCan_1.ArrData.Arr[0][1] |= 0x80; //Dia08 - - UnInfCan_1.ArrData.Arr[0][0] = 0; - UnInfCan_1.ArrData.Arr[0][7] = 0; - UnInfCan_1.ArrData.Arr[0][6] = 0; - UnInfCan_1.ArrData.Arr[0][5] = (ubyte)(RgCanPerid>>8); - UnInfCan_1.ArrData.Arr[0][4] = (ubyte)(RgCanPerid); - - CanTransmit(); -} - -//CAN发送接收 -void CanRXTX(void) -{ - stCAN_SWObj StrCanRx = {0}; - uword tmp = 0; - ubyte i = 0,j = 0; -//------------------------------------ - if(CAN_ubNewData(DF_SwRx)) - { - CAN_vGetMsgObj(DF_SwRx, &StrCanRx); - - UnInfCan_1.ArrData.ArrRX[0][3] = StrCanRx.ulDATAL.ubDB[0]; - UnInfCan_1.ArrData.ArrRX[0][2] = StrCanRx.ulDATAL.ubDB[1]; - UnInfCan_1.ArrData.ArrRX[0][1] = StrCanRx.ulDATAL.ubDB[2]; - UnInfCan_1.ArrData.ArrRX[0][0] = StrCanRx.ulDATAL.ubDB[3]; - UnInfCan_1.ArrData.ArrRX[0][7] = StrCanRx.ulDATAH.ubDB[0]; - UnInfCan_1.ArrData.ArrRX[0][6] = StrCanRx.ulDATAH.ubDB[1]; - UnInfCan_1.ArrData.ArrRX[0][5] = StrCanRx.ulDATAH.ubDB[2]; - UnInfCan_1.ArrData.ArrRX[0][4] = StrCanRx.ulDATAH.ubDB[3]; - - CAN_vReleaseObj(DF_SwRx); - - //CAN发送周期 50-5000ms - tmp = (uword)UnInfCan_1.ArrData.ArrRX[0][6]; - tmp = (tmp << 8); - tmp |= ((uword)UnInfCan_1.ArrData.ArrRX[0][7]); - if(tmp >= 50)RgCanPerid = tmp; - if(tmp >= 5000)RgCanPerid = 5000; - -// UnInfCan_1.ArrData.Arr[0][3] = UnInfCan_1.ArrData.ArrRX[0][0]; -// UnInfCan_1.ArrData.Arr[0][2] = UnInfCan_1.ArrData.ArrRX[0][1]; -// UnInfCan_1.ArrData.Arr[0][1] = UnInfCan_1.ArrData.ArrRX[0][2]; 20200225注释不更新诊断数据 -// UnInfCan_1.ArrData.Arr[0][0] = UnInfCan_1.ArrData.ArrRX[0][3]; -// UnInfCan_1.ArrData.Arr[0][7] = UnInfCan_1.ArrData.ArrRX[0][4]; -// UnInfCan_1.ArrData.Arr[0][6] = UnInfCan_1.ArrData.ArrRX[0][5]; -// UnInfCan_1.ArrData.Arr[0][5] = (ubyte)(RgCanPerid>>8); -// UnInfCan_1.ArrData.Arr[0][4] = (ubyte)(RgCanPerid); -// CanTransmit(); 20200730不发送干扰数据运行 - } - - if(CAN_ubNewData(DF_SwRxPwm)) - { - CAN_vGetMsgObj(DF_SwRxPwm, &StrCanRx); - - UnInfCan_1.ArrData.ArrRX[1][2] = StrCanRx.ulDATAL.ubDB[0]; - UnInfCan_1.ArrData.ArrRX[1][3] = StrCanRx.ulDATAL.ubDB[1]; - UnInfCan_1.ArrData.ArrRX[1][0] = StrCanRx.ulDATAL.ubDB[2]; - UnInfCan_1.ArrData.ArrRX[1][1] = StrCanRx.ulDATAL.ubDB[3]; - UnInfCan_1.ArrData.ArrRX[1][6] = StrCanRx.ulDATAH.ubDB[0]; - UnInfCan_1.ArrData.ArrRX[1][7] = StrCanRx.ulDATAH.ubDB[1]; - UnInfCan_1.ArrData.ArrRX[1][4] = StrCanRx.ulDATAH.ubDB[2]; - UnInfCan_1.ArrData.ArrRX[1][5] = StrCanRx.ulDATAH.ubDB[3]; - - CAN_vReleaseObj(DF_SwRxPwm); - //接收的数据保存到PWM数据结构中20181227 - PwmH[0 ] = (ubyte)UnInfCan_1.BitData.Pwm_01; - PwmH[1 ] = (ubyte)UnInfCan_1.BitData.Pwm_02; - PwmH[2 ] = (ubyte)UnInfCan_1.BitData.Pwm_03; - PwmH[3 ] = (ubyte)UnInfCan_1.BitData.Pwm_04; - PwmH[4 ] = (ubyte)UnInfCan_1.BitData.Pwm_05; - PwmH[5 ] = (ubyte)UnInfCan_1.BitData.Pwm_06; - PwmH[6 ] = (ubyte)UnInfCan_1.BitData.Pwm_07; - PwmH[7 ] = (ubyte)UnInfCan_1.BitData.Pwm_08; - PwmH[8 ] = (ubyte)UnInfCan_1.BitData.Pwm_09; - PwmH[9 ] = (ubyte)UnInfCan_1.BitData.Pwm_10; - PwmH[10] = (ubyte)UnInfCan_1.BitData.Pwm_11; - PwmH[11] = (ubyte)UnInfCan_1.BitData.Pwm_12; - PwmH[12] = (ubyte)UnInfCan_1.BitData.Pwm_13; - PwmH[13] = (ubyte)UnInfCan_1.BitData.Pwm_14; - PwmH[14] = (ubyte)UnInfCan_1.BitData.Pwm_15; - PwmH[15] = (ubyte)UnInfCan_1.BitData.Pwm_16; - - -// UnInfCan_1.ArrData.Arr[0][3] = UnInfCan_1.ArrData.ArrRX[1][0]; -// UnInfCan_1.ArrData.Arr[0][2] = UnInfCan_1.ArrData.ArrRX[1][1]; -// UnInfCan_1.ArrData.Arr[0][1] = UnInfCan_1.ArrData.ArrRX[1][2]; 20200225注释不更新诊断数据 -// UnInfCan_1.ArrData.Arr[0][0] = UnInfCan_1.ArrData.ArrRX[1][3]; -// UnInfCan_1.ArrData.Arr[0][7] = UnInfCan_1.ArrData.ArrRX[1][4]; -// UnInfCan_1.ArrData.Arr[0][6] = UnInfCan_1.ArrData.ArrRX[1][5]; -// UnInfCan_1.ArrData.Arr[0][5] = UnInfCan_1.ArrData.ArrRX[1][6]; -// UnInfCan_1.ArrData.Arr[0][4] = UnInfCan_1.ArrData.ArrRX[1][7]; -// CanTransmit(); - - } - //接收一帧,调用一次点灯程序。 - LedDr(); - -//100ms发送一帧 - if(!FlgCan_1) - { - FlgCan_1 = 1; - CanTX(); - } - -}