www.dbpj.net > 单片机CrC16查表法

单片机CrC16查表法

基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码.对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x).根据G(x)可以生成K位信息的校验码,而G(x)叫做这个

楼上的已经说明白了, sbuf只是个发送寄存器, 你给他多少数据他就发多少数据,你要计算crc,你需要把你需要发送的数据按照一定的规则计算出来crc码才可以.给你一个计算crc的例程:如下: for (i=0;i crc_result^= buf[i]; for (j=0;j if (crc_result& 0x01) crc_result = (crc_result>>1 ) ^ 0xa001; else crc_result = crc_result >> 1; } } crc_cnt就是你的buf[i]需要计算crc的长度, crc_result就是计算的结果.

要查的表是一个顺序表,它以dptr为表中数据的首地址,a中事先存储数据相对于表首地址的地址偏移量,最大不能超过255,通过调整a值可以查询表中指定位置的数据.这条指令执行完毕后,a中存储的是查询到的数据a+dptr=4000h+5h=4005h a+pc=5h+50h=55h mov a,@a+dptr 意思是把4005单元存储的数放到a中.简单的说:给dptr赋表的首地址值,下同.这条指令是汇编语言专用的查表指令

查表法,就是将你的一些固定的数据存储到程序存储器中,当你的程序中需要这些数据时,movc指令读取这些数据.举例假设你的系统要用数码管显示0-9这10个数字,而假设这10个数字各自的断码(点亮时io口相应的电平)分别为 0xC0, //"0

首先,你要明确查表法是为了节约运算时间而建立的映射关系,在嵌入式中尤其重要,把复杂公式的运算事先计算好,存起来,然后直接根据输入值查询.而硬件原理无论在什么平台都一样,固化在rom里面,根据地址,寻址后找到相应的地址单元,取值,然后应用.

movc是访问单片机程序存储器的意思.(程序存储器是固化的数据,在单片机运行时只能读,不能写) movx是读写单片机外部数据存储器的意思.0到9的平方值依次为:0, 1, 4, 9, 16, 25, 36,49,64,81 表头地址就是第一个数的存放地址.是将上

CRC校验又称为循环冗余校验,是数据通讯中常用的一种校验算法.它可以有效的判别出数据在传输过程中是否发生了错误,从而保障了传输的数据可靠性.CRC校验有多种方式,如:CRC8、CRC16、CRC32等等.在实际使用中,我们经常

MOV DPTR, #TABLE MOV A, # 2 MOVC A, @A+DPTR TABLE: db 1 ; index 0 db 2 ; index 1 db 4 db 8

原发布者:cqguang1985 //1 (SEG_a|SEG_b|SEG_d|SEG_e|SEG_g), //2 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_g), //3 (SEG_b|SEG_c|SEG_c|SEG_f|SEG_g), //4 (SEG_a|SEG_c|SEG_d|SEG_f|SEG_g), //5 (SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|

可以是可以,不过这段程序在8位的51单片机里直接编译的话效率太低.一般都是用等价8位查表法来实现CRC16的.

网站地图

All rights reserved Powered by www.dbpj.net

copyright ©right 2010-2021。
www.dbpj.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com