STC12C5A60S2串口通信带CRC效验,合适新手,希望有高手指点
单片机源程序如下:
- /*
- 串口协议
- 功能:通过判断串口发送数据,按数组0到最后一位进行判断
- ,用特定一个数组判断选择,用break跳出循环,执行数据 */
- #include "gobal.h"
- #include "Uart_Handle.h"
- #include "Uart.h"
- #include "x5045.h"
- void Uart_Handle(void) //通讯协议判断
- {
- uchar cmd_temp;
- //if(Recdata[REC_CMD1] ==0x00) //判断设备地址
- if((Recdata[REC_CMD1]==0x00)&&(Recdata[REC_CMD2]==0x0B)&&(Recdata[REC_CMD3]==0x01)&&(Recdata[REC_CMD4]==0x00)&&(Recdata[REC_CMD5]==0x01)
- &&(Recdata[REC_CMD6]==0x0A)&&(Recdata[REC_CMD7]==0x00)&&(Recdata[REC_CMD8]==0x01)&&(Recdata[REC_CMD9]==0x01)&&(Recdata[REC_CMD10]==0x7F))
- {
-
- cmd_temp = Recdata[REC_CMD9]; //解析命令字
- switch(cmd_temp)
- {
- case sj2://0x01开灯
- sj1();
- break;
- case xj2://0x00关灯
- xj1();
- break;
- case gkm://关看门狗命令
- gkm1();
- break;
- case kkm://开看门狗命令
- kkm1();
- break;
- default://other
- break;
- }
- }
- }
- void sj1(void)//开灯
- {
- uchar To_PC_Data[12];
- To_PC_Data[0] = 0xCC; //接收包头CC
- To_PC_Data[1] = 0x00; //应答包字节数10
- To_PC_Data[2] = 0x0C;//地址
- To_PC_Data[3] = 0x01; //命令字
- To_PC_Data[4] = 0x00;
- To_PC_Data[5] = 0x01;
- To_PC_Data[6] = 0x0A;
- To_PC_Data[7] = 0x00;
- To_PC_Data[8] = 0x00;
- To_PC_Data[9] = 0x00;
- To_PC_Data[10] = 0x00;
- To_PC_Data[11] = 0x7F;
- UART0_Send_String(To_PC_Data,12);
- JDQ=1;
- dogflag=1;
- }
- void xj1(void)//关灯
- {
- uchar To_PC_Data[12];
- To_PC_Data[0] = 0xCC; //接收包头CC
- To_PC_Data[1] = 0x00; //应答包字节数10
- To_PC_Data[2] = 0x0C;//地址
- To_PC_Data[3] = 0x01; //命令字
- To_PC_Data[4] = 0x00;
- To_PC_Data[5] = 0x01;
- To_PC_Data[6] = 0x0A;
- To_PC_Data[7] = 0x00;
- To_PC_Data[8] = 0x00;
- To_PC_Data[9] = 0x00;
- To_PC_Data[10] = 0x00;
- To_PC_Data[11] = 0x7F;
- UART0_Send_String(To_PC_Data,12);
- JDQ=0;
- dogflag=0;
- }
- void gkm1(void)//开灯
- {
- WriteSR(0x32);
- }
- void kkm1(void)//开灯
- {
- WriteSR(0x12);
- }
复制代码
所有资料51hei提供下载:
STC带CRC效验框架.rar
(59.8 KB, 下载次数: 10)
|