SN8F2280 Series
USB 2.0 Full-Speed 8-Bit Micro-Controller
2.1.1.5 CHECKSUM CALCULATION
The last ROM addresses are reserved area. User should avoid these addresses (last address) when calculate the
Checksum value.
¾
Example: The demo program shows how to calculated Checksum from 00H to the end of user’s code.
MOV
A,#END_USER_CODE$L
B0MOV
MOV
END_ADDR1, A
A,#END_USER_CODE$M
; Save low end address to end_addr1
B0MOV
CLR
CLR
END_ADDR2, A
Y
Z
; Save middle end address to end_addr2
; Set Y to 00H
; Set Z to 00H
@@:
MOVC
B0BSET
ADD
FC
DATA1, A
A, R
; Clear C flag
; Add A to Data1
MOV
ADC
JMP
DATA2, A
END_CHECK
; Add R to Data2
; Check if the YZ address = the end of code
AAA:
INCMS
JMP
JMP
Z
@B
Y_ADD_1
; Z=Z+1
; If Z != 00H calculate to next address
; If Z = 00H increase Y
END_CHECK:
MOV
A, END_ADDR1
CMPRS
JMP
A, Z
AAA
; Check if Z = low end address
; If Not jump to checksum calculate
MOV
CMPRS
JMP
A, END_ADDR2
A, Y
AAA
; If Yes, check if Y = middle end address
; If Not jump to checksum calculate
; If Yes checksum calculated is done.
JMP
CHECKSUM_END
Y_ADD_1:
INCMS
NOP
Y
; Increase Y
JMP
@B
; Jump to checksum calculate
CHECKSUM_END:
END_USER_CODE:
…
…
; Label of program end
SONiX TECHNOLOGY CO., LTD
Page 23
Version 1.1