网站标志
导航菜单
当前日期时间
当前时间:
购物车
购物车中有 0 件商品 去结算 我的订单
商品搜索
商品搜索:
文章正文
PIC单片机和Dallas的iButtON通讯时的CRC校验子程序
作者:管理员    发布于:2015-07-26 17:55:16    文字:【】【】【

 用PIC单片机和Dallas的iButtON通讯时,编了段产生和校验CRC的子程序。
 
#include

;-------------------------------
 
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 W END

浏览 (71) | 评论 (0) | 评分(0) | 支持(0) | 反对(0) | 发布人:管理员
将本文加入收藏夹
新闻详情
脚注栏目
|
脚注信息
机电工程网(C) 2015-2020 All Rights Reserved.    联系我们