完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
用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 |
|
|
|
只有小组成员才能发言,加入小组>>
12207 浏览 2 评论
4526 浏览 3 评论
3773 浏览 5 评论
9842 浏览 47 评论
4618 浏览 9 评论
786浏览 0评论
597浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 08:55 , Processed in 0.540563 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号