⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdcrc.lis

📁 mega128的串口发送文件.可以发送0X55上位机使用串口调试工具就可以接收了.
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0000           _SD_GetCRC16::
 0000 0E940000          xcall push_gset4
 0004 5901              movw R10,R18
 0006 6801              movw R12,R16
 0008                   .dbline -1
 0008                   .dbline 52
 0008           ; /*******************************************************************************************************
 0008           ; ** Descriptions:              sd 卡驱动软件包: SD卡相关工具函数 ---- CRC校验
 0008           ; ********************************************************************************************************/
 0008           ; #include    "D:\new_sd\define.h"
 0008           ; 
 0008           ; 
 0008           ; 
 0008           ; #if SD_CRC_EN
 0008           ; //X16 + X12 + X5 + 1 余式表
 0008           ; uint16 const CRCTable[256]={0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
 0008           ;                                                       0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
 0008           ;                                                       0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
 0008           ;                                                       0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
 0008           ;                                                       0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
 0008           ;                                                       0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
 0008           ;                                                       0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
 0008           ;                                                       0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
 0008           ;                                                       0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
 0008           ;                                                       0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
 0008           ;                                                       0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
 0008           ;                                                       0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
 0008           ;                                                       0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
 0008           ;                                                       0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
 0008           ;                                                       0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
 0008           ;                                                       0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
 0008           ;                                                       0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
 0008           ;                                                       0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
 0008           ;                                                       0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
 0008           ;                                                       0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
 0008           ;                                                       0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
 0008           ;                                                       0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
 0008           ;                                                       0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
 0008           ;                                                       0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
 0008           ;                                                       0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
 0008           ;                                                       0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
 0008           ;                                                       0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
 0008           ;                                                       0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
 0008           ;                                                       0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
 0008           ;                                                       0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
 0008           ;                                                       0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
 0008           ;                                                       0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
 0008           ;                                                  };
 0008           ; 
 0008           ; /********************************************************************************************************************
 0008           ; ** 函数名称: INT8U SD_GetCRC16()                                      Name:     INT8U SD_GetCRC16()
 0008           ; ** 功能描述: 计算CRC16                                                                Function: calculate CRC16 
 0008           ; ** 输   入: INT8U *pSource: 数据                                     Input:    INT8U *pSource: data
 0008           ;                        INT16U len    : 长度                                                     INT16U len    : len
 0008           ; ** 输   出: CRC16码                                                          Output:   CRC16 code
 0008           ; ********************************************************************************************************************/
 0008           ; uint16 SD_GetCRC16(uint8 *pSource, uint16 len)
 0008           ; {
 0008                   .dbline 54
 0008           ;       uint16 i;
 0008           ;       uint16 result = 0;
 0008 6627              clr R22
 000A 7727              clr R23
 000C                   .dbline 56
 000C           ; 
 000C           ;       for (i = 0; i < len; i++)
 000C 4427              clr R20
 000E 5527              clr R21
 0010 1DC0              xjmp L5
 0012           L2:
 0012                   .dbline 57
 0012 F601              movw R30,R12
 0014 2190              ld R2,Z+
 0016 6F01              movw R12,R30
 0018 3324              clr R3
 001A 9B01              movw R18,R22
 001C 232F              mov R18,R19
 001E 3327              clr R19
 0020 2225              eor R18,R2
 0022 3325              eor R19,R3
 0024 02E0              ldi R16,2
 0026 10E0              ldi R17,0
 0028 0E940000          xcall empy16s
 002C F801              movw R30,R16
 002E 80E0              ldi R24,<_CRCTable
 0030 90E0              ldi R25,>_CRCTable
 0032 E80F              add R30,R24
 0034 F91F              adc R31,R25
 0036 0590              lpm R0,Z+
 0038 1490              lpm R1,Z
 003A F001              movw R30,R0
 003C 1B01              movw R2,R22
 003E 322C              mov R3,R2
 0040 2224              clr R2
 0042 2E26              eor R2,R30
 0044 3F26              eor R3,R31
 0046 B101              movw R22,R2
 0048           L3:
 0048                   .dbline 56
 0048 4F5F              subi R20,255  ; offset = 1
 004A 5F4F              sbci R21,255
 004C           L5:
 004C                   .dbline 56
 004C 4A15              cp R20,R10
 004E 5B05              cpc R21,R11
 0050 00F3              brlo L2
 0052                   .dbline 59
 0052           ;           result = (result << 8) ^ (uint16)CRCTable[(result >> 8) ^ *pSource++];
 0052           ;       
 0052           ;       return result;
 0052 8B01              movw R16,R22
 0054                   .dbline -2
 0054           L1:
 0054 0E940000          xcall pop_gset4
 0058                   .dbline 0 ; func end
 0058 0895              ret
 005A                   .dbsym r i 20 i
 005A                   .dbsym r result 22 i
 005A                   .dbsym r len 10 i
 005A                   .dbsym r pSource 12 pc
 005A                   .dbend
 005A                   .dbfunc e SD_GetCmdByte6 _SD_GetCmdByte6 fc
 005A           ;          array -> y+0
 005A           ;              i -> R20
 005A           ;            reg -> R22
 005A           ;              j -> R12
 005A           ;          param -> R10,R11
 005A           ;            cmd -> R20
                        .even
 005A           _SD_GetCmdByte6::
 005A 0E940000          xcall push_gset5
 005E 5901              movw R10,R18
 0060 402F              mov R20,R16
 0062 2597              sbiw R28,5
 0064                   .dbline -1
 0064                   .dbline 70
 0064           ; }
 0064           ; 
 0064           ; /*******************************************************************************************************************
 0064           ; ** 函数名称: INT8U SD_GetCmdByte6()                                   Name:     INT8U SD_GetCmdByte6()
 0064           ; ** 功能描述: 获取SD卡命令的CRC7                                               Function: get the CRC7 of the command of SD card
 0064           ; ** 输   入: INT8U cmd   : 命令                                               Input:    INT8U cmd   : command
 0064           ;                        INT8U *param: 命令的参数,长度为4字节                     INT8U *param: the param of command,length is 4 bytes
 0064           ; ** 输   出: CRC7码                                                                   Output:   CRC7 code
 0064           ; ********************************************************************************************************************/
 0064           ; uint8 SD_GetCmdByte6(uint8 cmd, uint8 *param)
 0064           ; {
 0064                   .dbline 72
 0064           ;       uint8 i, j;
 0064           ;       uint8 reg = 0;
 0064 6627              clr R22
 0066                   .dbline 75
 0066           ;       uint8 array[5];
 0066           ;       
 0066           ;       array[0] = cmd;
 0066 4883              std y+0,R20
 0068                   .dbline 76
 0068           ;       for (i = 1; i < 5; i++)                                         /* 将参数的顺序重新排列 */
 0068 41E0              ldi R20,1
 006A 10C0              xjmp L10
 006C           L7:
 006C                   .dbline 77
 006C 242E              mov R2,R20
 006E 3324              clr R3
 0070 E4E0              ldi R30,4
 0072 F0E0              ldi R31,0
 0074 E219              sub R30,R2
 0076 F309              sbc R31,R3
 0078 EA0D              add R30,R10
 007A FB1D              adc R31,R11
 007C 2080              ldd R2,z+0
 007E CE01              movw R24,R28
 0080 E42F              mov R30,R20
 0082 FF27              clr R31
 0084 E80F              add R30,R24
 0086 F91F              adc R31,R25
 0088 2082              std z+0,R2
 008A           L8:
 008A                   .dbline 76
 008A 4395              inc R20
 008C           L10:
 008C                   .dbline 76
 008C 4530              cpi R20,5
 008E 70F3              brlo L7
 0090                   .dbline 79
 0090           ;               array[i] = param[4 - i];
 0090           ;       
 0090           ;       for (i = 0; i < 5; i++)                                         /* 计算5个字节的CRC7 */
 0090 4427              clr R20
 0092 20C0              xjmp L14
 0094           L11:
 0094                   .dbline 80
 0094           ;       {
 0094                   .dbline 81
 0094           ;           for (j = 0; j < 8; j++)
 0094 CC24              clr R12
 0096 1AC0              xjmp L18
 0098           L15:
 0098                   .dbline 82
 0098           ;           {
 0098                   .dbline 83
 0098           ;                       reg <<= 1;
 0098 660F              lsl R22
 009A                   .dbline 84
 009A           ;                       reg ^= ((((array[i] << j) ^ reg) & 0x80) ? 0x9 : 0);
 009A CE01              movw R24,R28
 009C E42F              mov R30,R20
 009E FF27              clr R31
 00A0 E80F              add R30,R24
 00A2 F91F              adc R31,R25
 00A4 0081              ldd R16,z+0
 00A6 1C2D              mov R17,R12
 00A8 0E940000          xcall lsl8
 00AC 802F              mov R24,R16
 00AE 8627              eor R24,R22
 00B0 8078              andi R24,128
 00B2 21F0              breq L19
 00B4 89E0              ldi R24,9
 00B6 90E0              ldi R25,0
 00B8 7C01              movw R14,R24
 00BA 02C0              xjmp L20
 00BC           L19:
 00BC EE24              clr R14
 00BE FF24              clr R15
 00C0           L20:
 00C0 262E              mov R2,R22
 00C2 3324              clr R3
 00C4 2E24              eor R2,R14
 00C6 3F24              eor R3,R15
 00C8 622D              mov R22,R2
 00CA                   .dbline 85
 00CA           L16:
 00CA                   .dbline 81
 00CA C394              inc R12
 00CC           L18:
 00CC                   .dbline 81
 00CC 8C2D              mov R24,R12
 00CE 8830              cpi R24,8
 00D0 18F3              brlo L15
 00D2                   .dbline 86
 00D2           L12:
 00D2                   .dbline 79
 00D2 4395              inc R20
 00D4           L14:
 00D4                   .dbline 79
 00D4 4530              cpi R20,5
 00D6 F0F2              brlo L11
 00D8                   .dbline 88
 00D8           ;           }
 00D8           ;       }
 00D8           ;       
 00D8           ;       return ((reg << 1) + 0x01) ;                            /* 计算结果的CRC7左移一位,并将最低位置1 */
 00D8 062F              mov R16,R22
 00DA 000F              lsl R16
 00DC 0F5F              subi R16,255    ; addi 1
 00DE                   .dbline -2
 00DE           L6:
 00DE 2596              adiw R28,5
 00E0 0E940000          xcall pop_gset5
 00E4                   .dbline 0 ; func end
 00E4 0895              ret
 00E6                   .dbsym l array 0 A[5:5]c
 00E6                   .dbsym r i 20 c
 00E6                   .dbsym r reg 22 c
 00E6                   .dbsym r j 12 c
 00E6                   .dbsym r param 10 pc
 00E6                   .dbsym r cmd 20 c
 00E6                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -