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

📄 crc.lis

📁 AVR16源代码 ICC编译器
💻 LIS
字号:
                        .module Crc.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\程序\AVR程序\BOOTLoadICC\Crc.c
 0000                   .dbfunc e CRC16 _CRC16 fs
 0000           ;            ACC -> R20,R21
 0000           ;           byte -> R22,R23
 0000           ;         TOPBIT -> R10,R11
 0000           ;              k -> R14
 0000           ;      remainder -> R12,R13
 0000           ;            Len -> R18,R19
 0000           ;        Message -> R16,R17
                        .even
 0000           _CRC16::
 0000 0E940000          xcall push_gset5
 0004                   .dbline -1
 0004                   .dbline 15
 0004           ; #include      <iom128v.h>
 0004           ; #include      "Crc.h"
 0004           ; 
 0004           ; //============================================================
 0004           ; //函  数:unsigned short CRC16(unsigned char *Message, int Len)
 0004           ; //功  能:CRC16计算
 0004           ; //入口参数:Message 要进行CRC16计算字符串,Len字符串长度  
 0004           ; //返 回 值:CRC16计算结果  
 0004           ; //设 计 者:覃道堂 
 0004           ; //创作时间:2004-03-30
 0004           ; //修改时间:
 0004           ; //修改目的:
 0004           ; //============================================================
 0004           ; unsigned short CRC16(unsigned char *Message, int Len)
 0004           ; {
 0004                   .dbline 19
 0004           ;       int             byte;
 0004           ;       unsigned char   k;
 0004           ;       unsigned short  ACC,TOPBIT;
 0004           ;       unsigned short  remainder = 0x0000;
 0004 CC24              clr R12
 0006 DD24              clr R13
 0008                   .dbline 21
 0008           ; 
 0008           ;       TOPBIT = 0x8000;
 0008 80E0              ldi R24,32768
 000A 90E8              ldi R25,128
 000C 5C01              movw R10,R24
 000E                   .dbline 22
 000E           ;       for (byte = 0; byte < Len; ++byte)
 000E 6627              clr R22
 0010 7727              clr R23
 0012 25C0              xjmp L5
 0014           L2:
 0014                   .dbline 23
 0014           ;       {
 0014                   .dbline 24
 0014           ;               ACC = Message[byte];
 0014 FB01              movw R30,R22
 0016 E00F              add R30,R16
 0018 F11F              adc R31,R17
 001A 4081              ldd R20,z+0
 001C 5527              clr R21
 001E                   .dbline 25
 001E           ;               remainder ^= (ACC <<8);
 001E 1A01              movw R2,R20
 0020 322C              mov R3,R2
 0022 2224              clr R2
 0024 C224              eor R12,R2
 0026 D324              eor R13,R3
 0028                   .dbline 26
 0028           ;               for (k = 8; k > 0; --k)
 0028 88E0              ldi R24,8
 002A E82E              mov R14,R24
 002C 13C0              xjmp L9
 002E           L6:
 002E                   .dbline 27
 002E           ;               {
 002E                   .dbline 28
 002E           ;               if (remainder & TOPBIT)
 002E 1601              movw R2,R12
 0030 2A20              and R2,R10
 0032 3B20              and R3,R11
 0034 2220              tst R2
 0036 11F4              brne X0
 0038 3320              tst R3
 003A 49F0              breq L10
 003C           X0:
 003C                   .dbline 29
 003C           ;                       {
 003C                   .dbline 30
 003C           ;                       remainder = (remainder << 1) ^0x8005;
 003C 85E0              ldi R24,32773
 003E 90E8              ldi R25,128
 0040 1601              movw R2,R12
 0042 220C              lsl R2
 0044 331C              rol R3
 0046 2826              eor R2,R24
 0048 3926              eor R3,R25
 004A 6101              movw R12,R2
 004C                   .dbline 31
 004C           ;                       }
 004C 02C0              xjmp L11
 004E           L10:
 004E                   .dbline 33
 004E           ;               else
 004E           ;                       {
 004E                   .dbline 34
 004E           ;                       remainder = (remainder << 1);
 004E CC0C              lsl R12
 0050 DD1C              rol R13
 0052                   .dbline 35
 0052           ;                       }
 0052           L11:
 0052                   .dbline 36
 0052           L7:
 0052                   .dbline 26
 0052 EA94              dec R14
 0054           L9:
 0054                   .dbline 26
 0054 2224              clr R2
 0056 2E14              cp R2,R14
 0058 50F3              brlo L6
 005A                   .dbline 37
 005A           L3:
 005A                   .dbline 22
 005A 6F5F              subi R22,255  ; offset = 1
 005C 7F4F              sbci R23,255
 005E           L5:
 005E                   .dbline 22
 005E 6217              cp R22,R18
 0060 7307              cpc R23,R19
 0062 C4F2              brlt L2
 0064                   .dbline 38
 0064           ;               }
 0064           ;       }
 0064           ;       return (remainder^0x0000);
 0064 8601              movw R16,R12
 0066                   .dbline -2
 0066           L1:
 0066 0E940000          xcall pop_gset5
 006A                   .dbline 0 ; func end
 006A 0895              ret
 006C                   .dbsym r ACC 20 s
 006C                   .dbsym r byte 22 I
 006C                   .dbsym r TOPBIT 10 s
 006C                   .dbsym r k 14 c
 006C                   .dbsym r remainder 12 s
 006C                   .dbsym r Len 18 I
 006C                   .dbsym r Message 16 pc
 006C                   .dbend
 006C                   .dbfunc e Verify_Command _Verify_Command fc
 006C           ;        Crc_Tmp -> R20,R21
 006C           ;            Len -> R10,R11
 006C           ;     ReceiveBuf -> R22,R23
                        .even
 006C           _Verify_Command::
 006C 0E940000          xcall push_gset3
 0070 5901              movw R10,R18
 0072 B801              movw R22,R16
 0074                   .dbline -1
 0074                   .dbline 52
 0074           ; } 
 0074           ; 
 0074           ; //============================================================
 0074           ; //函  数:unsigned char Verify_Command(unsigned char *ReceiveBuf,int Len)
 0074           ; //功  能:CRC校验处理
 0074           ; //入口参数:校验数据,校验数据长度
 0074           ; //返 回 值:0校验成功。否则不正确
 0074           ; //设 计 者:覃道堂 
 0074           ; //创作时间:2006-03-16
 0074           ; //修改时间:
 0074           ; //修改目的:
 0074           ; //============================================================
 0074           ; unsigned char Verify_Command(unsigned char *ReceiveBuf,int Len)
 0074           ; {
 0074                   .dbline 55
 0074           ;       unsigned short  Crc_Tmp;
 0074           ; 
 0074           ;       if(ReceiveBuf[4] != (Len - 2))//整包数据长度减去校验和为命令长度
 0074 C501              movw R24,R10
 0076 0297              sbiw R24,2
 0078 FB01              movw R30,R22
 007A 2480              ldd R2,z+4
 007C 3324              clr R3
 007E 2816              cp R2,R24
 0080 3906              cpc R3,R25
 0082 11F0              breq L13
 0084                   .dbline 56
 0084           ;               return 1;
 0084 01E0              ldi R16,1
 0086 1EC0              xjmp L12
 0088           L13:
 0088                   .dbline 58
 0088           ; 
 0088           ;       Crc_Tmp = ReceiveBuf[Len-2]*0x100 + ReceiveBuf[Len-1];
 0088 F501              movw R30,R10
 008A 3297              sbiw R30,2
 008C E60F              add R30,R22
 008E F71F              adc R31,R23
 0090 2081              ldd R18,z+0
 0092 3327              clr R19
 0094 00E0              ldi R16,256
 0096 11E0              ldi R17,1
 0098 0E940000          xcall empy16s
 009C A801              movw R20,R16
 009E F501              movw R30,R10
 00A0 3197              sbiw R30,1
 00A2 E60F              add R30,R22
 00A4 F71F              adc R31,R23
 00A6 2080              ldd R2,z+0
 00A8 3324              clr R3
 00AA 420D              add R20,R2
 00AC 531D              adc R21,R3
 00AE                   .dbline 60
 00AE           ;       
 00AE           ;       if((CRC16(ReceiveBuf, Len-2)) !=Crc_Tmp)
 00AE 9501              movw R18,R10
 00B0 2250              subi R18,2
 00B2 3040              sbci R19,0
 00B4 8B01              movw R16,R22
 00B6 A4DF              xcall _CRC16
 00B8 0417              cp R16,R20
 00BA 1507              cpc R17,R21
 00BC 11F0              breq L15
 00BE                   .dbline 61
 00BE           ;               return 3;
 00BE 03E0              ldi R16,3
 00C0 01C0              xjmp L12
 00C2           L15:
 00C2                   .dbline 62
 00C2           ;       return 0;
 00C2 0027              clr R16
 00C4                   .dbline -2
 00C4           L12:
 00C4 0E940000          xcall pop_gset3
 00C8                   .dbline 0 ; func end
 00C8 0895              ret
 00CA                   .dbsym r Crc_Tmp 20 s
 00CA                   .dbsym r Len 10 I
 00CA                   .dbsym r ReceiveBuf 22 pc
 00CA                   .dbend

⌨️ 快捷键说明

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