编程william hill官网
直播中

胡皓

7年用户 193经验值
私信 关注
[问答]

怎样通过PIC单片机去实现CRC的小程序?

哪位大神能够解答一下如何通过PIC单片机去实现CRC的小程序?

回帖(1)

陈连香

2021-4-23 15:59:26
  用PIC单片机和达拉斯的iButton的通讯时,编了段产生和校验CRC的子程序
  的#include
  ; ---------------------- ---------
  cblock 0x20
  datBuff:8;分配8个字节的数据缓冲区
  bit_cnt;位计数
  CRC_COUNT; CRC的字节数
  CRC_RESULT; CRC resulr
  crc_temp; CRC
  endc 期间的临时数据缓冲区
  ; ------ -------------------------
  #define skp0 btfsc
  #define skp1 btfss
  ; ================== ==============
  org 0x000
  movlw .7
  movwf CRC_COUNT
  movlw datBuff
  movwf FSR; FSR指向数据缓冲区
  调用CRC_CHECK
  movwf datBuff + 7
  goto $
  ; ========== ======================
  ;检查CRC?BYTES DATA
  ;对于X ^ 8 + X ^ 5 + X ^ 4 +1的多项式
  ;派生自达拉斯的iButton标准
  ;在调用之前,FSR =数据缓冲区
  ;CRC_COUNT = CRC的字节数
  CRC_CHECK;“”“”“”“”“”“”“”
  clrf CRC_RESULT;初始化CRC缓冲区
  _crc_00
  movlw .8;一位字节的位数
  movwf bit_cnt;设置位计数器
  movf INDF ,w;获得一个数据字节
  movwf crc_temp;复制到临时位置
  _crc_01
  rrf crc_temp,f;在C
  skpc中获得LSB ;此LSB = 1吗?
  转到_crc_02;如果LSB = 0
  movlw 0x01则执行;如果LSB = 1
  xorwf CRC_RESULT则执行,f
  _crc_02
  rrf CRC_RESULT,w;
  goto _crc_03;如果LSB = 0
  movlw 0x18;执行;如果LSB = 1
  xorwf CRC_RESULT,f;多项式实现
  _crc_03
  rrf CRC_RESULT,w;全字节右旋转
  rrf CRC_RESULT,f
  decfsz bit_cnt,f;位计数
  转到_crc_01; aa完成8位
  incf FSR,f;指针更新到下一个字节
  decfsz CRC_COUNT,f;字节计数
  转到_crc_00;继续直到完成所有字节
  movf CRC_RESULT,w;获得CRC,如果CRC = 0
  返回则置Z ;返回CRC in WEND
举报

更多回帖

发帖
×
20
完善资料,
赚取积分