?? crc.asm
字號(hào):
;CRC校驗(yàn)算法
SADDR EQU 2000H ;數(shù)據(jù)區(qū)首址(任意設(shè)置128字節(jié)數(shù)據(jù))。
ERR BIT 00H ;出錯(cuò)標(biāo)志。
ORG 0000H
LJMP TEST
ORG 100H
TEST: MOV R3,#80H
MOV DPTR,#DATS
MOV P2,#HIGH(SADDR) ;片外RAM中數(shù)據(jù)存放首址。
MOV R0,#LOW(SADDR)
COPY: CLR A
MOVC A,@A+DPTR ;將測(cè)試數(shù)據(jù)存放到片外RAM中。
MOVX @R0,A
INC DPTR
INC R0
DJNZ R3,COPY
LCALL CRCOUT ;模擬發(fā)方生成CRC校驗(yàn)。
LCALL CHECK ;模擬收方進(jìn)行CRC校驗(yàn),應(yīng)該沒(méi)有差錯(cuò)。
MOV DPTR,#SADDR+20H ;模擬兩個(gè)字節(jié)被破壞。
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
LCALL CHECK ;再次模擬收方進(jìn)行CRC校驗(yàn),應(yīng)該發(fā)現(xiàn)差錯(cuò)。
STOP: LJMP STOP
CRCOUT: MOV DPTR,#SADDR+80H;將CRC存放單元初始化為零。
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
LCALL CRC ;計(jì)算CRC。
MOV DPTR,#SADDR+80H;將計(jì)算結(jié)果存放到數(shù)據(jù)塊之后。
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
RET
CRC: MOV DPTR,#SADDR ;(CRC計(jì)算模塊)先取兩字節(jié)數(shù)據(jù),
MOVX A,@DPTR ;作為最初的被除數(shù)。
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV R7,#80H ;以后的128字節(jié)依次作為被除數(shù)的補(bǔ)充。
CRC1: INC DPTR
MOVX A,@DPTR ;取一字節(jié)數(shù)據(jù),作為被除數(shù)的補(bǔ)充。
MOV R4,A
MOV R5,#8 ;每字節(jié)要進(jìn)行8次模2除法。
CRC2: MOV A,R4 ;三字節(jié)被除數(shù)的當(dāng)前余數(shù)左移一位。
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
JNC CRC3 ;移出的最高位是0,不用處理。
XRL A,#10H ;移出的最高位是1,進(jìn)行模2處理。
MOV R2,A
MOV A,R3
XRL A,#21H
MOV R3,A
CRC3: DJNZ R5,CRC2 ;處理完一個(gè)字節(jié)。
DJNZ R7,CRC1 ;處理完全部數(shù)據(jù)。
RET ;CRC校驗(yàn)碼在R2R3之中。
CHECK: CLR ERR ;出錯(cuò)標(biāo)志初始化。
LCALL CRC ;計(jì)算CRC。
MOV A,R2 ;結(jié)果為零否?
ORL A,R3
JZ CHKE
SETB ERR ;結(jié)果不為零,設(shè)立出錯(cuò)標(biāo)志。
CHKE : RET
DATS: DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
DB 10H,11H,12H,13H,14H,15H,16H,17H
DB 18H,19H,1AH,1BH,1CH,1DH,1EH,1FH
DB 20H,21H,22H,23H,24H,25H,26H,27H
DB 28H,29H,2AH,2BH,2CH,2DH,2EH,2FH
DB 30H,31H,32H,33H,34H,35H,36H,37H
DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH
DB 40H,41H,42H,43H,44H,45H,46H,47H
DB 48H,49H,4AH,4BH,4CH,4DH,4EH,4FH
DB 50H,51H,52H,53H,54H,55H,56H,57H
DB 58H,59H,5AH,5BH,5CH,5DH,5EH,5FH
DB 60H,61H,62H,63H,64H,65H,66H,67H
DB 68H,69H,6AH,6BH,6CH,6DH,6EH,6FH
DB 70H,71H,72H,73H,74H,75H,76H,77H
DB 78H,79H,7AH,7BH,7CH,7DH,7EH,7FH
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -