位置:51电子网 » 技术资料 » 单 片 机

PIC单片机CRC校验程序

发布时间:2008/8/19 0:00:00 访问次数:1390

  用pic单片机和dallas的ibutton通讯时,编了段产生和校验crc的子程序。
#include <p16ce625.inc>

  ;-------------------------------
  cblock 0x20
  datbuff:8 ;assign 8 byte data buffer
  bit_cnt ;bit counting
  crc_count ;number of bytes for crc
  crc_result ;crc resulr
  crc_temp ;temporary data buffer during crc
  endc

  ;-------------------------------
  #define skp0 btfsc
  #define skp1 btfss

  ;===============================
  org 0x000
  movlw .7
  movwf crc_count
  movlw datbuff
  movwf fsr ;fsr point to data buffer
  call crc_check
  movwf datbuff+7
  goto $

  ;===============================
  ;check the crc for ? bytes data
  ;for the polynomial of x^8 + x^5 + x^4 + 1
  ;derived from dallas's ibutton standard
  ;before calling, fsr = data buffer
  ; crc_count = number of bytes for crc
  crc_check ;~~~~~~~~~~~~~~~
  clrf crc_result ;initialize the crc buffer
  _crc_00
  movlw .8 ;number of bits for one byte
  movwf bit_cnt ;set bit counter
  movf indf,w ;get one data byte
  movwf crc_temp ;copy to temporary location
  _crc_01
  rrf crc_temp,f ;get lsb in c
  skpc ;is this lsb=1?
  goto _crc_02 ;go if lsb=0
  movlw 0x01 ;do if lsb=1
  xorwf crc_result,f
  _crc_02
  rrf crc_result,w ;get lsb of crc
  skpc ;test lsb
  goto _crc_03 ;go if lsb=0
  movlw 0x18 ;do if lsb=1
  xorwf crc_result,f ;polynomial implementation
  _crc_03
  rrf crc_result,w ;whole byte right rotate
  rrf crc_result,f
  decfsz bit_cnt,f ;bit counting
  goto _crc_01 ;go on until aa 8 bits done
  incf fsr,f ;pointer update to next byte
  decfsz crc_count,f ;byte counting
  goto _crc_00 ;go on until all byte done
  movf crc_result,w ;get crc, z set if crc=0
  return ;return with crc in wend

  欲知详情,请登录维库电子市场网(www.dzsc.com



  用pic单片机和dallas的ibutton通讯时,编了段产生和校验crc的子程序。
#include <p16ce625.inc>

  ;-------------------------------
  cblock 0x20
  datbuff:8 ;assign 8 byte data buffer
  bit_cnt ;bit counting
  crc_count ;number of bytes for crc
  crc_result ;crc resulr
  crc_temp ;temporary data buffer during crc
  endc

  ;-------------------------------
  #define skp0 btfsc
  #define skp1 btfss

  ;===============================
  org 0x000
  movlw .7
  movwf crc_count
  movlw datbuff
  movwf fsr ;fsr point to data buffer
  call crc_check
  movwf datbuff+7
  goto $

  ;===============================
  ;check the crc for ? bytes data
  ;for the polynomial of x^8 + x^5 + x^4 + 1
  ;derived from dallas's ibutton standard
  ;before calling, fsr = data buffer
  ; crc_count = number of bytes for crc
  crc_check ;~~~~~~~~~~~~~~~
  clrf crc_result ;initialize the crc buffer
  _crc_00
  movlw .8 ;number of bits for one byte
  movwf bit_cnt ;set bit counter
  movf indf,w ;get one data byte
  movwf crc_temp ;copy to temporary location
  _crc_01
  rrf crc_temp,f ;get lsb in c
  skpc ;is this lsb=1?
  goto _crc_02 ;go if lsb=0
  movlw 0x01 ;do if lsb=1
  xorwf crc_result,f
  _crc_02
  rrf crc_result,w ;get lsb of crc
  skpc ;test lsb
  goto _crc_03 ;go if lsb=0
  movlw 0x18 ;do if lsb=1
  xorwf crc_result,f ;polynomial implementation
  _crc_03
  rrf crc_result,w ;whole byte right rotate
  rrf crc_result,f
  decfsz bit_cnt,f ;bit counting
  goto _crc_01 ;go on until aa 8 bits done
  incf fsr,f ;pointer update to next byte
  decfsz crc_count,f ;byte counting
  goto _crc_00 ;go on until all byte done
  movf crc_result,w ;get crc, z set if crc=0
  return ;return with crc in wend

  欲知详情,请登录维库电子市场网(www.dzsc.com



相关IC型号

热门点击

 

推荐技术资料

硬盘式MP3播放器终级改
    一次偶然的机会我结识了NE0 2511,那是一个远方的... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!