`
sunguanxing
  • 浏览: 1083386 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CRC16校验的程序

阅读更多
;==========================================================
        DATA_BUFF       EQU        10H
        CRC_NUM         EQU        22H
        CRC_DATA        EQU        23H
        CRC_POINTER     EQU        30H
;==========================================================
        CRC_XORH        EQU        10H        ;11021=2^16+2^12+2^5+1
        CRC_XORL        EQU        21H
;==========================================================
               ORG 0000H
               AJMP MAIN
MAIN:      MOV CRC_DATA,#DATA_BUFF
           MOV CRC_NUM,#3
           ACALL CRC
           AJMP MAIN
;==========================================================
;               *****RC校验子程序*****
;               多项式=2^16+2^12+2^5+1=11021H
;CRC_DATA-----进行CRC校验的数据指针,保存需要进行CRC校验的数据首址
;CRC_POINTER--缓冲保存CRC校验数据首址
;CRC_NUM------保存所需进行CRC校验的字节数
;R7-----------所有进行CRC校验字节的位数,=(CRC_NUM+2)*8-16
;==========================================================
CRC:       MOV R0,CRC_DATA
           MOV R1,#CRC_POINTER
           MOV R2,CRC_NUM
           MOV A,CRC_NUM       ;R7=CRC_NUM*8
           ADD A,#2
           RL A
           RL A
           RL A
           CLR C
           SUBB A,#16           ;CRC码为2个字节,16位
           MOV R7,A
CRC1:      MOV A,@R0            ;缓存原数据
           MOV @R1,A
           INC R0
           INC R1
           DJNZ R2,CRC1
           CLR A                ;在原数据后添加2个零字节
           MOV @R1,A
           INC R1
           MOV @R1,A
CRC2:      MOV A,#CRC_POINTER   ;从最后一个字节开始左移一位
           ADD A,CRC_NUM        ;共有CRC_NUM+2个字节
           ADD A,#1             ;最后一个数据地址为
           MOV R0,A             ;R0=CRC_POINTER+CRC_NUM+2-1
           MOV A,CRC_NUM        ;计算参与移位计算的字节数
           ADD A,#2             ;保存在R1中
           MOV R1,A             ;R1=CRC_NUM+2
           CLR C
CRC3:      MOV A,@R0
           RLC A
           MOV @R0,A
           DEC R0
           DJNZ R1,CRC3         ;判断每移动一位,所有参与移位的字节是否移完
           JNC CRC4             ;进行异或条件判断
           MOV A,#CRC_XORH
           XRL A,CRC_POINTER
           MOV CRC_POINTER,A
           MOV A,#CRC_XORL
           XRL A,CRC_POINTER+1
           MOV CRC_POINTER+1,A
CRC4:      DJNZ R7,CRC2         ;判断移位是否结束

CRC_END:
          RET
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics