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

📄 fcs.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0008           ;       0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
 0008           ;       0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
 0008           ;       0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
 0008           ;       0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
 0008           ;       0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
 0008           ;       0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
 0008           ;       0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
 0008           ;       0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
 0008           ;       0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
 0008           ;       0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
 0008           ;       0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
 0008           ;       0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
 0008           ; };
 0008           ; /*
 0008           ; rom u32       FCS_Table_32[]  =       {       // 32-bit PPP Polynomial
 0008           ;       0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
 0008           ;       0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
 0008           ;       0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
 0008           ;       0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
 0008           ;       0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
 0008           ;       0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
 0008           ;       0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
 0008           ;       0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
 0008           ;       0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
 0008           ;       0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
 0008           ;       0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
 0008           ;       0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
 0008           ;       0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
 0008           ;       0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
 0008           ;       0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
 0008           ;       0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
 0008           ;       0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
 0008           ;       0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
 0008           ;       0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
 0008           ;       0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
 0008           ;       0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
 0008           ;       0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
 0008           ;       0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
 0008           ;       0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
 0008           ;       0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
 0008           ;       0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
 0008           ;       0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
 0008           ;       0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
 0008           ;       0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
 0008           ;       0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
 0008           ;       0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
 0008           ;       0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
 0008           ; };
 0008           ; */
 0008           ; //**************************************************************************
 0008           ; 
 0008           ; u16 UpdateFCS_16(u16 fcs, u8 c)
 0008           ; {     // update fcs - fast table method
 0008                   .dbline 117
 0008           ;       return (fcs >> 8) ^ FCS_Table_16[(fcs & 0xff) ^ c];
 0008 262E              mov R2,R22
 000A 3324              clr R3
 000C 9A01              movw R18,R20
 000E 3070              andi R19,0
 0010 2225              eor R18,R2
 0012 3325              eor R19,R3
 0014 02E0              ldi R16,2
 0016 10E0              ldi R17,0
 0018 0E940000          xcall empy16s
 001C F801              movw R30,R16
 001E 80E0              ldi R24,<_FCS_Table_16
 0020 90E0              ldi R25,>_FCS_Table_16
 0022 E80F              add R30,R24
 0024 F91F              adc R31,R25
 0026 0590              lpm R0,Z+
 0028 1490              lpm R1,Z
 002A F001              movw R30,R0
 002C 8A01              movw R16,R20
 002E 012F              mov R16,R17
 0030 1127              clr R17
 0032 0E27              eor R16,R30
 0034 1F27              eor R17,R31
 0036                   .dbline -2
 0036           L1:
 0036 0E940000          xcall pop_gset2
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbsym r c 22 c
 003C                   .dbsym r fcs 20 s
 003C                   .dbend
 003C                   .dbfunc e UpdateFCS_32 _UpdateFCS_32 fl
 003C           ;              f -> y+0
 003C           ;              i -> R10
 003C           ;              c -> y+14
 003C           ;            fcs -> y+10
                        .even
 003C           _UpdateFCS_32::
 003C 0E940000          xcall push_arg4
 0040 0E940000          xcall push_gset3
 0044 2497              sbiw R28,4
 0046                   .dbline -1
 0046                   .dbline 169
 0046           ; }
 0046           ; /*
 0046           ; u16 UpdateFCS_16(u16 fcs, u8 c)
 0046           ; {     // update the fcs - bit band method
 0046           ;       register u8     i, f;
 0046           ; 
 0046           ;       f = (u8)(fcs >> 8);
 0046           ; 
 0046           ;       fcs = (fcs & 0x00ff) ^ c;
 0046           ; 
 0046           ;       for (i = 8; i > 0; i--)
 0046           ;       {
 0046           ;               if (fcs & 1)
 0046           ;               {
 0046           ;                       fcs >>= 1;
 0046           ;                       fcs ^= HDLCPolynomial;
 0046           ;               }
 0046           ;               else
 0046           ;               fcs >>= 1;
 0046           ;       }
 0046           ; 
 0046           ;       return (fcs ^ f);
 0046           ; }
 0046           ; 
 0046           ; void Make_FCS_Table_16()
 0046           ; {     // Generate the FCS table in ram
 0046           ;       u8              i;
 0046           ;       u16             w;
 0046           ;       u32             dw;
 0046           ; 
 0046           ;       for (w = 0; w < 256; w++)
 0046           ;       {
 0046           ;               dw = (u32)w;
 0046           ;               for (i = 8; i > 0; i--)
 0046           ;               {
 0046           ;                       if (dw & 1)
 0046           ;                               dw = (dw >> 1) ^ HDLCPolynomial;
 0046           ;                       else
 0046           ;                               dw >>= 1;
 0046           ;               }
 0046           ;               FCS_Table_16[w] = (u16)(dw & 0xffff);
 0046           ;       }
 0046           ; }
 0046           ; 
 0046           ; u32 UpdateFCS_32(u32 fcs, u8 c)
 0046           ; {
 0046           ;       return (fcs >> 8) ^ FCS_Table_32[(fcs & 0xff) ^ c];
 0046           ; }
 0046           ; */
 0046           ; 
 0046           ; u32 UpdateFCS_32(u32 fcs, u8 c)
 0046           ; {     // update the fcs - bit band method
 0046                   .dbline 173
 0046           ;       register u8     i;
 0046           ;       u32                     f;
 0046           ; 
 0046           ;       f = fcs >> 8;
 0046 88E0              ldi R24,8
 0048 90E0              ldi R25,0
 004A FE01              movw R30,R28
 004C 2284              ldd R2,z+10
 004E 3384              ldd R3,z+11
 0050 4484              ldd R4,z+12
 0052 5584              ldd R5,z+13
 0054 8A93              st -y,R24
 0056 8101              movw R16,R2
 0058 9201              movw R18,R4
 005A 0E940000          xcall lsr32
 005E FE01              movw R30,R28
 0060 0083              std z+0,R16
 0062 1183              std z+1,R17
 0064 2283              std z+2,R18
 0066 3383              std z+3,R19
 0068                   .dbline 175
 0068           ; 
 0068           ;       fcs = (fcs & 0x000000ff) ^ (u32)c;
 0068 4FEF              ldi R20,255
 006A 50E0              ldi R21,0
 006C 60E0              ldi R22,0
 006E 70E0              ldi R23,0
 0070 FE01              movw R30,R28
 0072 2284              ldd R2,z+10
 0074 3384              ldd R3,z+11
 0076 4484              ldd R4,z+12
 0078 5584              ldd R5,z+13
 007A 2422              and R2,R20
 007C 3522              and R3,R21
 007E 4622              and R4,R22
 0080 5722              and R5,R23
 0082 6E84              ldd R6,y+14
 0084 7724              clr R7
 0086 8824              clr R8
 0088 9924              clr R9
 008A 2624              eor R2,R6
 008C 3724              eor R3,R7
 008E 4824              eor R4,R8
 0090 5924              eor R5,R9
 0092 FE01              movw R30,R28
 0094 2286              std z+10,R2
 0096 3386              std z+11,R3
 0098 4486              std z+12,R4
 009A 5586              std z+13,R5
 009C                   .dbline 177
 009C           ; 
 009C           ;       for (i = 8; i > 0; i--)
 009C 88E0              ldi R24,8
 009E A82E              mov R10,R24
 00A0 46C0              xjmp L6
 00A2           L3:
 00A2                   .dbline 178
 00A2           ;       {
 00A2                   .dbline 179
 00A2           ;               if (fcs & 1)
 00A2 41E0              ldi R20,1
 00A4 50E0              ldi R21,0
 00A6 60E0              ldi R22,0
 00A8 70E0              ldi R23,0
 00AA FE01              movw R30,R28
 00AC 2284              ldd R2,z+10
 00AE 3384              ldd R3,z+11
 00B0 4484              ldd R4,z+12
 00B2 5584              ldd R5,z+13
 00B4 2422              and R2,R20
 00B6 3522              and R3,R21
 00B8 4622              and R4,R22
 00BA 5722              and R5,R23
 00BC 40E0              ldi R20,0
 00BE 50E0              ldi R21,0
 00C0 60E0              ldi R22,0
 00C2 70E0              ldi R23,0
 00C4 2416              cp R2,R20
 00C6 3506              cpc R3,R21
 00C8 4606              cpc R4,R22
 00CA 5706              cpc R5,R23
 00CC 09F1              breq L7
 00CE                   .dbline 180
 00CE           ;               {
 00CE                   .dbline 181
 00CE           ;                       fcs >>= 1;
 00CE FE01              movw R30,R28
 00D0 2284              ldd R2,z+10
 00D2 3384              ldd R3,z+11
 00D4 4484              ldd R4,z+12
 00D6 5584              ldd R5,z+13
 00D8 5694              lsr R5
 00DA 4794              ror R4
 00DC 3794              ror R3
 00DE 2794              ror R2
 00E0 FE01              movw R30,R28
 00E2 2286              std z+10,R2
 00E4 3386              std z+11,R3
 00E6 4486              std z+12,R4
 00E8 5586              std z+13,R5
 00EA                   .dbline 182
 00EA           ;                       fcs ^= ZModem_PolyNominal;
 00EA 40E2              ldi R20,32
 00EC 53E8              ldi R21,131
 00EE 68EB              ldi R22,184
 00F0 7DEE              ldi R23,237
 00F2 FE01              movw R30,R28
 00F4 2284              ldd R2,z+10
 00F6 3384              ldd R3,z+11
 00F8 4484              ldd R4,z+12
 00FA 5584              ldd R5,z+13
 00FC 2426              eor R2,R20
 00FE 3526              eor R3,R21
 0100 4626              eor R4,R22
 0102 5726              eor R5,R23
 0104 FE01              movw R30,R28
 0106 2286              std z+10,R2
 0108 3386              std z+11,R3
 010A 4486              std z+12,R4
 010C 5586              std z+13,R5
 010E                   .dbline 183
 010E           ;               }
 010E 0EC0              xjmp L8
 0110           L7:
 0110                   .dbline 185
 0110           ;               else
 0110           ;               fcs >>= 1;
 0110 FE01              movw R30,R28
 0112 2284              ldd R2,z+10
 0114 3384              ldd R3,z+11
 0116 4484              ldd R4,z+12
 0118 5584              ldd R5,z+13
 011A 5694              lsr R5
 011C 4794              ror R4
 011E 3794              ror R3
 0120 2794              ror R2
 0122 FE01              movw R30,R28
 0124 2286              std z+10,R2
 0126 3386              std z+11,R3
 0128 4486              std z+12,R4
 012A 5586              std z+13,R5
 012C           L8:
 012C                   .dbline 186
 012C           L4:
 012C                   .dbline 177
 012C AA94              dec R10
 012E           L6:
 012E                   .dbline 177
 012E 2224              clr R2
 0130 2A14              cp R2,R10
 0132 08F4              brsh X0
 0134 B6CF              xjmp L3
 0136           X0:
 0136                   .dbline 188
 0136           ;       }
 0136           ; 
 0136           ;       return fcs ^ f;
 0136 FE01              movw R30,R28
 0138 2080              ldd R2,z+0
 013A 3180              ldd R3,z+1
 013C 4280              ldd R4,z+2
 013E 5380              ldd R5,z+3
 0140 FE01              movw R30,R28
 0142 6284              ldd R6,z+10
 0144 7384              ldd R7,z+11
 0146 8484              ldd R8,z+12
 0148 9584              ldd R9,z+13
 014A 6224              eor R6,R2
 014C 7324              eor R7,R3
 014E 8424              eor R8,R4
 0150 9524              eor R9,R5
 0152 8301              movw R16,R6
 0154 9401              movw R18,R8
 0156                   .dbline -2
 0156           L2:
 0156 2496              adiw R28,4
 0158 0E940000          xcall pop_gset3
 015C 2496              adiw R28,4
 015E                   .dbline 0 ; func end
 015E 0895              ret
 0160                   .dbsym l f 0 l
 0160                   .dbsym r i 10 c
 0160                   .dbsym l c 14 c
 0160                   .dbsym l fcs 10 l
 0160                   .dbend

⌨️ 快捷键说明

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