📄 crc8.a51
字号:
NAME CRC8
?PR?_crc8ccitt?CRC8 SEGMENT CODE
PUBLIC _crc8ccitt
RSEG ?PR?_crc8ccitt?CRC8
_crc8ccitt:
USING 0
;***********************************************************************
; The following snippet of code was taken from 8052.com (and modified)
;***********************************************************************
; Calculate CRC-8 Values. Uses The CCITT-8 Polynomial, Expressed As
; X^8 + X^5 + X^4 + 1
; Description:
; Calculates Value In Acc Into The Running CRC In 'B', Using The
; Calculation Method (Slower But Smaller).
;
; Entry Requirements:
; Acc Has Value To Add To CRC
; 'B' Contains Running CRC Value
;
; On Exit:
; 'B' Has Updated CRC Value
;
; Affected:
; PSW.CY, B
;
; Stack:
; 3 Bytes, Not Including Called Routines
;
; Comments:
; None
;
push acc ; Save Acc
push b
push 0 ; Save R0
push acc ; Save Value
mov r0,#8 ; Number Bits In Byte
mov b,R7
mov a,R5;
lp1: xrl a,b ; Calculate CRC
rrc a ; Move To Carry
mov a,b ; Get The Last CRC Value
jnc lp2 ; Skip If Data == 0
xrl a,#18h ; Update The CRC Value
;
lp2: rrc a ; Position The New CRC
mov b,a ; Store The New CRC
pop acc ; Get The Remaining Bits
rr a ; Position The Next Bit
push acc ; Save The Remaining Bits
djnz r0,lp1 ; Repeat For 8 Bits
;
MOV R7,b
pop acc ; Clean Up Stack
pop 0 ; Recover R0
pop b
pop acc ; Recover Acc
?C0001:
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -