
Сообщение от
Tronix
32Кб отборного *****кода на асме. В скомпиленном виде 1974 байта. Ну если и вправду интересно - пожалуйста, в прикрепленном файле, но там реально *****код
Заимствовал Ваш код вычисления CRC для датчика DS18B20. При этом сократил его по длине на 15 байт.
Было:
Код:
crc8dallas:
mov r2,#0
mov r7,#8 ; scrachpad len cntr
mov r0,#scrach
rr_rot:
xch a,r2
xrl a,@r0
xch a,r2
mov r6,#8 ; for (i = 0; i < 8; i++)
rr_inner:
mov a,r2
anl a,#1
jz rr_shr
xch a,r2
clr c
rrc a
xrl a,#08Ch
xch a,r2
jmp rr_next
rr_shr:
xch a,r2
clr c
rrc a
xch a,r2
rr_next:
djnz r6,rr_inner
inc r0
djnz r7,rr_rot
xch a,r2
ret
Стало:
Код:
crc8dallas:
clr a
mov r7,#8 ; scratchpad len counter
mov r0,#scratch
crc_nxbyte:
xrl a,@r0
;----------one byte loop
mov r6,#8 ; for (i = 0; i < 8; i++)
crc_inner:
clr c
rrc a
jnc crc_nxbit ;jump if former acc.0=0 (no XOR)
xrl a,#08Ch ;1000.1100 - polynomial coeffs in inverted order
crc_nxbit:
djnz r6,crc_inner
;----------end of one byte loop, r0:=byte-CRC
inc r0
djnz r7,crc_nxbyte
ret
Возможно, кому-то это пригодится.