求助!!!CRC校验算法

[复制链接]
 楼主| beiwei23du 发表于 2009-4-20 16:22 | 显示全部楼层 |阅读模式
CRC, ov, RF, fm, go
下面是我参考的一个CRC生成子程序,有以下几点不太明白<br />1:生成多项式是什么?看起来像X15+X10+X3,生成多项式可以随意改吗?<br /><br />2:为什么计算的过程中采用右移并检测C,只有C=1才和多项式异或?<br />3:程序开头&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;loca0,w<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addwf&nbsp;&nbsp;&nbsp;fsr,f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;indf<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incf&nbsp;&nbsp;&nbsp;&nbsp;fsr,f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;indf<br />的意义是把要发送的数据右移16位吗?<br /><br />&nbsp;;=====================================================================<br />;crc生成子程序crcgenerator<br />;功能:&nbsp;将一串二进制数据加上crc校验码<br />;入口参数:<br />;&nbsp;&nbsp;&nbsp;&nbsp;fsr是待编码的数据首地址<br />;&nbsp;&nbsp;&nbsp;&nbsp;loca0是待编码的数据的字节数(不包括crc)<br />;返回参数:<br />;&nbsp;&nbsp;&nbsp;&nbsp;loca1是crc低字节(先发送)<br />;&nbsp;&nbsp;&nbsp;&nbsp;loca2是crc高字节(后发送)<br />;====================================================================<br />crcgenerator:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;loca0,w<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addwf&nbsp;&nbsp;&nbsp;fsr,f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;indf<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incf&nbsp;&nbsp;&nbsp;&nbsp;fsr,f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrf&nbsp;&nbsp;&nbsp;&nbsp;indf<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decf&nbsp;&nbsp;&nbsp;&nbsp;fsr,f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;loca0,w<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subwf&nbsp;&nbsp;&nbsp;fsr,f<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bcf&nbsp;&nbsp;&nbsp;&nbsp;status,c<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rlf&nbsp;&nbsp;&nbsp;&nbsp;loca0,f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rlf&nbsp;&nbsp;&nbsp;&nbsp;loca0,f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rlf&nbsp;&nbsp;&nbsp;&nbsp;loca0,f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;数据区预留crc的位置并清零<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;indf,&nbsp;w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;loca1,&nbsp;loca2,&nbsp;loca3暂存连续的三个字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;loca1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incf&nbsp;&nbsp;&nbsp;&nbsp;fsr,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;indf,&nbsp;w<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;loca2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incf&nbsp;&nbsp;&nbsp;&nbsp;fsr,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;indf,&nbsp;w<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;loca3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;loca4<br /><br />crcloop1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loca3,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loca2,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rrf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loca1,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btfss&nbsp;&nbsp;&nbsp;status,&nbsp;c&nbsp;&nbsp;&nbsp;;检测c标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;crccont1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;084h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;b'10000100'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xorwf&nbsp;&nbsp;&nbsp;loca2,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;08h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;b'00001000'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xorwf&nbsp;&nbsp;&nbsp;loca1,&nbsp;f<br />crccont1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;loca4,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;crccont2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movlw&nbsp;&nbsp;&nbsp;8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;loca4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incf&nbsp;&nbsp;&nbsp;&nbsp;fsr,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movf&nbsp;&nbsp;&nbsp;&nbsp;indf,&nbsp;w<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;movwf&nbsp;&nbsp;&nbsp;loca3<br />crccont2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decfsz&nbsp;&nbsp;loca0,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;&nbsp;&nbsp;&nbsp;crcloop1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decf&nbsp;&nbsp;&nbsp;&nbsp;fsr,&nbsp;f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;调整fsr至正确值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decf&nbsp;&nbsp;&nbsp;&nbsp;fsr,&nbsp;f<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return
 楼主| beiwei23du 发表于 2009-4-20 16:52 | 显示全部楼层

很冷清啊,自己顶一下

  
 楼主| beiwei23du 发表于 2009-4-21 10:13 | 显示全部楼层

人气不旺啊!!!是太简单了吗?

  
yewuyi 发表于 2009-4-21 15:54 | 显示全部楼层

有标准的多项式,当然,你也可以自己定。

但标准的多项式一般都是经过了数学推导,证明那是误码概率最低的,自己定多项式一般是为了加密,如果是为了互连互通,自己定多项式肯定是不归路。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

167

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部