[an error occurred while processing this directive]
|
;---------------------------------------
.equ CRC16_INIT =0xFFFF
.equ CRC16_POLY =0x8408
.equ CRC16_FINAL=0xFFFF
;---------------------------------------
Init_CRC16:
ldi a, low (CRC16_INIT)
std Y+CRC16+0,a
ldi a, high(CRC16_INIT)
std Y+CRC16+1,a
ret
;---------------------------------------
Final_CRC16:
ldi a, low(CRC16_FINAL)
ldd b,Y+CRC16+0
eor b,a
std Y+CRC16+0,b
ldi a, high(CRC16_FINAL)
ldd b,Y+CRC16+1
eor b,a
std Y+CRC16+1,b
ret
;---------------------------------------
; Calculate CRC16 CCITT
; Input data: a
calc_crc16:
ldd c,Y+CRC16+1
ldd d,Y+CRC16+0
eor d,a
eor c,zero
ldi b,8
shr_crc16:
lsr c
ror d
brcc decc
ldi a,low (CRC16_POLY)
eor d,a
ldi a,high(CRC16_POLY)
eor c,a
decc:
dec b
brne shr_crc16
std Y+CRC16+1,c
std Y+CRC16+0,d
ret
E-mail: info@telesys.ru