PIC单片机实现CRC算法的小程序

发布者:快乐的旅程最新更新时间:2014-01-09 来源: pic16关键字:PIC单片机  CRC算法  iButton 手机看文章 扫描二维码
随时随地手机看文章
PIC单片机实现CRC的小程序

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
关键字:PIC单片机  CRC算法  iButton 引用地址:PIC单片机实现CRC算法的小程序

上一篇:采用PIC单片机控制的电话小总机
下一篇:PIC单片机低功耗的实现

推荐阅读最新更新时间:2024-03-16 13:33

基于PIC单片机的倾角传感器的设计
0 前 言 设计中的倾角传感器是新型变质面积电容式倾角传感器,该倾角传感器技术是为数不多的、能够兼有结构简单、可靠性高、有通用传感器集成电路等优点的倾角传感器技术之一。在测绘仪器仪表、建筑机械、天线定位、机器人技术、坦克和舰船火炮平台控制、飞机姿态、汽车电子控制、石油勘探、海上平台监控等方面有广泛应用。 图1 倾角传感器原理图 1 倾角传感器的工作原理 倾角传感器的电路原理如图1所示。 检测电路由比较器A1、A2、双稳态触发器及电容充放电回路组成。C1、C2为可变介质面积电容式倾角传感器,其容量大小与倾角变化成比例。双稳态触发器的两个输出端A、B作为差动脉冲宽度调制电路的输出。设电源接通时,触发器的A端为
[单片机]
基于<font color='red'>PIC单片机</font>的倾角传感器的设计
PIC单片机4X4矩阵键盘检测原理及实现C语言程序
#include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); const uchar table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar key_num; void delay(uint x); void init(); void scan(); void didi(uchar num); void disp(); void mai
[单片机]
PIC单片机AD转换数据存储及串口效率
  PIC 单片机A/D 转换后的数据通常需要占用两个8 位宽的RAM 单元, 而PIC 单片机的存储单元有限,因此造成了单片机的存储单元不能被有效利用, 同时通过串口向上位机传送数据时也需要花费较多的时间。   为此提出一种数据打包的方法, 使得相同的数据量占用较少的存储空间, 并可提高传输效率。   引言      在由单片机和PC 机构成的检测系统中, 通常会由多个单片机采集数据并将经过A/D 转换的数据通过串口送往上位PC 机进行数据处理。PIC 单片机A/D 转换后的结果大多是8 位或10 位的, 8 位的A/D转换不涉及该问题。以10 位的数据为例, 在单片机内进行存储时需要占用2 个8 位的字节, 低8 位和高2
[单片机]
PIC单片机程序编写和动作标志位的使用方法解析
控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。 1、动作标志位的使用 在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序: listP=16c73 calllefthandup callrighthan
[单片机]
<font color='red'>PIC单片机</font>程序编写和动作标志位的使用方法解析
超声波PIC单片机C程序
单片机源程序如下: //////////////////////////////////////////////////////////////////////////////// // // PIC16F877 + HC-SR04 + LCD03 example // Written October 2008 , using HITECH PIC16 compiler // // Note - assumes a 20MHz crystal, which is 5MHz timer clock // A 1:4 prescaler is used to give a 1.25MHz t
[单片机]
LCD+PIC单片机12864串行显示程序
程序代码: #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(HS&WDTDIS); #include Drive_Serial.h uchar line1_data = { 顶顶电子欢迎您! }; uchar line2_data = { www*ddmcu*com }; uchar line3_data = { DD-900实验开发板 }; uchar line4_data = { TEL: 15853209853 }; /********端口设置函数********/ void port_init(
[单片机]
PIC单片机之看门狗
PIC系列不同型号的单片机其,看门狗设置不同,下面是以PIC16F688单片机为例。 1.如果配置字中的WDTE=1那么后面的看门狗开关(WDT)不起作用,所以当我们程序中有休眠模式的时候我们的看门狗会一直溢出,但是溢出后是否复位,这要看单片机的具体类型了,PIC16F688在休眠唤醒后继续执行程序,不复位,但是其他的单片机看手册。如果我们程序中休眠的时候不需要看门狗,那么我们必须把看门狗关了,在唤醒的时候千万不要忘记打开看门狗。 2.单片机的一级分频是和TIME0互用的,同一时刻只能一方使用。 如果我们选用内部4M时钟且我们预分频给了定时器TIME0,那么我们的看门狗最长时间是0.262144s 那么我们采用定时器0喂狗,我们定
[单片机]
Microchip第100亿颗PIC单片机交付三星电子
三星电子接收32位PIC32单片机 全球领先的整合单片机、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)日前宣布已将第100亿颗PIC®单片机(MCU)交付给三星电子有限公司(Samsung Electronics Co., Ltd.)。Microchip所交付的第100亿颗单片机为32位PIC32MX340F256 ( http://www.microchip.com/get/N46K ),,这距离Microchip第90亿颗单片机出货的时间仅相隔10个月左右。 这充分反映了业界对于Microchip 8位、16位和32位PIC单片机是嵌入式控制设计的高性能
[单片机]
Microchip第100亿颗<font color='red'>PIC单片机</font>交付三星电子
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved