您现在的位置:单片机销售网 >> 文章中心 >> 技术资料>> PIC单片机实现CRC的小程序

PIC单片机实现CRC的小程序

【字体: 收藏 打印文章 查看评论
作者:佚名 来源: 发布时间:2008年06月22日 点击数:
 
PIC单片机实现CRC的小程序

PIC单片机实现Dallas的iButton通讯时,编了段产生和校验CRC的子程序。
;-------------------------单片机销售网 www.mcusales.com------------------
    #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 W

    END
;-------------------------单片机销售网 www.mcusales.com------------------
上一篇:读写PIC18F452单片机內部EEPROM的实例[44][2008年06月22日] 下一篇:ADC600[35][2008年06月23日]
用户信息中心
栏目导航
找不到相关分类
本月排行TOP20
  • 没有相关内容!
最新推荐
销售热线
    电话:0754-84476558,82921260
    传真:0754-86676656
    联系人:连先生、林先生、朱小姐
    与连先生联系 与林先生联系 与朱小姐联系 与连先生联系点击与我交谈MSN
咨询采购,请拨0754-84476558与我们联系
  • 单片机销售网
  • 汕头市顺合实业有...
  • 新势力
  • PIC单片机学习网
  • Tony嵌入式开发网
  • 电子设计网
  • 中国电子制作
  • EDA加油站
  • 单片机学习
  • 云龙电子
  • ic世界网
  • 维库电子英文版
  • 老古开发网
  • 东哥单片机学习网