C51 COMPILER V9.53.0.0 PACKDATA 09/30/2018 11:45:28 PAGE 1 C51 COMPILER V9.53.0.0, COMPILATION OF MODULE PACKDATA OBJECT MODULE PLACED IN .\Output\PackData.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\..\Code\User\Common\PackData.c LARGE OPTIMIZE(0,SPEED) BROWSE INCDIR( -../../Code/Include;../../Code/User;../../Code/User/Common;../../Code/User/Driver) DEFINE(FOSC_160000=1) DEBUG OBJECTEXTE -ND PRINT(.\Output\LST\PackData.lst) TABS(2) OBJECT(.\Output\PackData.obj) line level source 1 /** 2 * @File: PackData.c 3 * @Author: Kinve JQ 4 * @Version: V0.1 5 * @Date: 2018.09.29 6 * @Brief: 封包与校验 7 * @Modify: 8 2018.09.29.Kinve:1.创建文件 9 **/ 10 11 #include "PackData.h" 12 13 u8 CrcData ( u8 *Data, u8 Len ) 14 { 15 1 u8 i, crc = 0; 16 1 17 1 for ( i = 0; i < Len; i++ ) 18 1 { 19 2 crc ^= Data[i]; 20 2 } 21 1 22 1 return crc; 23 1 } 24 25 #define DATA_LEN 4 26 //AA 长度1[类型 .....] 校验码 BB 27 u8 CheckData ( u8 *Data, u8 Len, pDataBuff *Out ) 28 { 29 1 //u8 tail_pos = 0; //尾位 30 1 //u8 head_pos = 0; //0xF0 头位置 31 1 u8 i, size; 32 1 33 1 for ( i = 0; i < Len - 1; i++ ) 34 1 { 35 2 if ( Data[i + 0] == 0xAA ) //检查头尾"@" .. "#" 36 2 { 37 3 //head_pos = i; 38 3 if ( Len - i >= DATA_LEN ) //剩余数据>=5 39 3 { 40 4 size = Data[i + 1]; 41 4 42 4 if ( Data[i + size + 3] == 0xBB ) 43 4 { 44 5 Out->Data = &Data[i]; 45 5 Out->Len = DATA_LEN + size; 46 5 47 5 if ( CrcData ( &(Out->Data[2]), Out->Len-DATA_LEN ) == Data[i + size + 2] ) //校验码 48 5 { 49 6 return 1; 50 6 } 51 5 } 52 4 } 53 3 } C51 COMPILER V9.53.0.0 PACKDATA 09/30/2018 11:45:28 PAGE 2 54 2 } 55 1 56 1 return 0; 57 1 } 58 59 static u8 PackBuff[50]; 60 u8 PackData ( u8 *Data, u8 Len, u8 *Out ) 61 { 62 1 u8 i; 63 1 64 1 if ( Len < sizeof ( PackBuff ) - DATA_LEN ) 65 1 { 66 2 PackBuff[0] = 0xAA; 67 2 PackBuff[1] = Len; 68 2 69 2 for ( i = 0; i < Len; i++ ) 70 2 { 71 3 PackBuff[i + 2] = Data[i]; 72 3 } 73 2 74 2 PackBuff[i + 2] = CrcData ( Data, Len ); 75 2 PackBuff[i + 3] = 0xBB; 76 2 77 2 //拷贝到Out 78 2 for ( i = 0; i < Len + DATA_LEN; i++ ) 79 2 { 80 3 *(Out+i) = PackBuff[i]; 81 3 } 82 2 83 2 return Len + DATA_LEN; 84 2 } 85 1 return 0; 86 1 } 87 88 /********************* (C) COPYRIGHT Kinve JQ *******END OF FILE ********/ 89 MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 774 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = 73 ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)