📄 crc.s
字号:
.module Crc.c
.area text(rom, con, rel)
.dbfile D:\MY_COMPUTER\d\avr16\atmegal16\Crc.c
.dbfunc e BlockCRC16UsingAlgorithm _BlockCRC16UsingAlgorithm fi
; uiCharShifted -> R20,R21
; i -> R22,R23
; v -> R12
; CRC -> R10,R11
; Len -> R18,R19
; Block -> R16,R17
.even
_BlockCRC16UsingAlgorithm::
xcall push_gset4
.dbline -1
.dbline 15
; #include <iom16v.h>
; #include "Crc.h"
;
; //============================================================
; //函 数:unsigned short CRC16(unsigned char *Message, int Len)
; //功 能:CRC16计算
; //入口参数:Message 要进行CRC16计算字符串,Len字符串长度
; //返 回 值:CRC16计算结果
; //设 计 者:覃道堂
; //创作时间:2004-03-30
; //修改时间:
; //修改目的:
; //============================================================
; unsigned int BlockCRC16UsingAlgorithm(unsigned char *Block, unsigned int Len)
; {
.dbline 21
; unsigned int CRC;
; unsigned int uiCharShifted;
; unsigned int i;
; unsigned char v;
;
; CRC = 0;
clr R10
clr R11
.dbline 22
; for (i=0; i<Len; i++)
clr R22
clr R23
xjmp L5
L2:
.dbline 23
; {
.dbline 24
; uiCharShifted = ((unsigned int)(Block[i]) & 0x00FF) << 8;
movw R30,R22
add R30,R16
adc R31,R17
ldd R20,z+0
clr R21
andi R21,0
mov R21,R20
clr R20
.dbline 25
; CRC = (CRC) ^ uiCharShifted;
eor R10,R20
eor R11,R21
.dbline 26
; for (v = 0; v < 8; ++v)
clr R12
xjmp L9
L6:
.dbline 27
; {
.dbline 28
; if ( CRC & 0x8000 )
sbrs R11,7
rjmp L10
.dbline 29
; CRC = (CRC << 1) ^ 0x1021;
ldi R24,4129
ldi R25,16
movw R2,R10
lsl R2
rol R3
eor R2,R24
eor R3,R25
movw R10,R2
xjmp L11
L10:
.dbline 31
; else
; CRC = CRC << 1;
lsl R10
rol R11
L11:
.dbline 32
L7:
.dbline 26
inc R12
L9:
.dbline 26
mov R24,R12
cpi R24,8
brlo L6
.dbline 33
.dbline 34
L3:
.dbline 22
subi R22,255 ; offset = 1
sbci R23,255
L5:
.dbline 22
cp R22,R18
cpc R23,R19
brlo L2
.dbline 36
; }
; CRC = CRC & 0xFFFF;
; }
; // ByteCRC16UsingAlgorithm(CRC, Block[i]);
; return CRC;
movw R16,R10
.dbline -2
L1:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r uiCharShifted 20 i
.dbsym r i 22 i
.dbsym r v 12 c
.dbsym r CRC 10 i
.dbsym r Len 18 i
.dbsym r Block 16 pc
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -