📄 crc.lis
字号:
.module Crc.c
.area text(rom, con, rel)
0000 .dbfile D:\MY_COMPUTER\d\avr16\atmegal16\Crc.c
0000 .dbfunc e BlockCRC16UsingAlgorithm _BlockCRC16UsingAlgorithm fi
0000 ; uiCharShifted -> R20,R21
0000 ; i -> R22,R23
0000 ; v -> R12
0000 ; CRC -> R10,R11
0000 ; Len -> R18,R19
0000 ; Block -> R16,R17
.even
0000 _BlockCRC16UsingAlgorithm::
0000 0E940000 xcall push_gset4
0004 .dbline -1
0004 .dbline 15
0004 ; #include <iom16v.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 int BlockCRC16UsingAlgorithm(unsigned char *Block, unsigned int Len)
0004 ; {
0004 .dbline 21
0004 ; unsigned int CRC;
0004 ; unsigned int uiCharShifted;
0004 ; unsigned int i;
0004 ; unsigned char v;
0004 ;
0004 ; CRC = 0;
0004 AA24 clr R10
0006 BB24 clr R11
0008 .dbline 22
0008 ; for (i=0; i<Len; i++)
0008 6627 clr R22
000A 7727 clr R23
000C 1FC0 xjmp L5
000E L2:
000E .dbline 23
000E ; {
000E .dbline 24
000E ; uiCharShifted = ((unsigned int)(Block[i]) & 0x00FF) << 8;
000E FB01 movw R30,R22
0010 E00F add R30,R16
0012 F11F adc R31,R17
0014 4081 ldd R20,z+0
0016 5527 clr R21
0018 5070 andi R21,0
001A 542F mov R21,R20
001C 4427 clr R20
001E .dbline 25
001E ; CRC = (CRC) ^ uiCharShifted;
001E A426 eor R10,R20
0020 B526 eor R11,R21
0022 .dbline 26
0022 ; for (v = 0; v < 8; ++v)
0022 CC24 clr R12
0024 0EC0 xjmp L9
0026 L6:
0026 .dbline 27
0026 ; {
0026 .dbline 28
0026 ; if ( CRC & 0x8000 )
0026 B7FE sbrs R11,7
0028 09C0 rjmp L10
002A .dbline 29
002A ; CRC = (CRC << 1) ^ 0x1021;
002A 81E2 ldi R24,4129
002C 90E1 ldi R25,16
002E 1501 movw R2,R10
0030 220C lsl R2
0032 331C rol R3
0034 2826 eor R2,R24
0036 3926 eor R3,R25
0038 5101 movw R10,R2
003A 02C0 xjmp L11
003C L10:
003C .dbline 31
003C ; else
003C ; CRC = CRC << 1;
003C AA0C lsl R10
003E BB1C rol R11
0040 L11:
0040 .dbline 32
0040 L7:
0040 .dbline 26
0040 C394 inc R12
0042 L9:
0042 .dbline 26
0042 8C2D mov R24,R12
0044 8830 cpi R24,8
0046 78F3 brlo L6
0048 .dbline 33
0048 .dbline 34
0048 L3:
0048 .dbline 22
0048 6F5F subi R22,255 ; offset = 1
004A 7F4F sbci R23,255
004C L5:
004C .dbline 22
004C 6217 cp R22,R18
004E 7307 cpc R23,R19
0050 F0F2 brlo L2
0052 .dbline 36
0052 ; }
0052 ; CRC = CRC & 0xFFFF;
0052 ; }
0052 ; // ByteCRC16UsingAlgorithm(CRC, Block[i]);
0052 ; return CRC;
0052 8501 movw R16,R10
0054 .dbline -2
0054 L1:
0054 0E940000 xcall pop_gset4
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r uiCharShifted 20 i
005A .dbsym r i 22 i
005A .dbsym r v 12 c
005A .dbsym r CRC 10 i
005A .dbsym r Len 18 i
005A .dbsym r Block 16 pc
005A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -