用汇编语言实现BCH解码校验算法
rlca
movr5,a
mova,r4
rlca
movr4,a
mova,r3
rlca
movr3,a
movr7
cjner7,#10h,acc7e10;右移总次数为16次
ret
余项Y(X)的高8位在r3寄存器中,低3位在r4的高3位。
3定位
如果Y(X)=r3r4≠0,表示接收到的码组R(X)有差错,下一步则由Y(X)的值推算差错在R(X)中的位置。
理论上要找出R(X)中差错的位置,必须计算出差错校验子C(X)。在实践中,校验子C(X)的计算不仅费时间,而且多位检纠还需多个校验子C(X)。为此,经过几年的实践,把Y(X)(即r3r4)直接作为综合校验子,通过快速查表找到差错位置。查找程序的大小和检纠差错位数有关,这里以检纠4位差错为例,说明定位纠错的方法。
;4位差错位址查找子程序
bitposi:movb,0;对R(X)高位至低位的移动计数
movr2,#1fh;设表格长度
btoa:mova,b
incb
acalltabsub;调用表格子程序,读入表格值
clrc
subba,r3;Y(X)中的r3和表格值比较
jnzbinc1:不相等,转出
mova,b;相等,继续
acalltabsub
clr
subba,r4;Y(X)中的r4和表格值比较
jnzr2decl:不相等,转出
setbf0;相等,置标志位返回
ret
bincl:incb
r2decl:djnzr2,btoa
ret;表格查毕,没有相等的值,不置标志位返回
从查找子程序返回的B寄存器的值,即为差错在R(X)中从高位到低位的位数值。
;4位差错表格子程序
tabsub:inca
movca,@a+pc;将相对位置的表格送入a寄存器
ret
db0ebh;表格开始,长度为查找子程序中
db00;r2寄存器的预置值
db76h
.
.
.
4纠错
找到了差错在R(X)位置,就可以纠错了。
纠错的原理比较简单,因为单片机处理的是二进制数,而二进制数只有二个状态,即不是“0”就是“1”。也就是说,R(X)中差错位是“0”,则改为“1”;差错位是“1”,则改为“0”。所以纠错要对所在位求反就行了,程序见本刊网络补充版。
至此,整个检错、定位、纠错的BCH码校验检纠过程结束。BCH码校验算法,经过实践的检验,不失为单片机级的数据传输校验好算法。这种方法可以对多位随机差错和多位突发差错进行检验和纠错,具体位数的多少仅受单片机工作频率的限制,而不受方法的限制。
《用汇编语言实现BCH解码校验算法(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/167204.html
movr5,a
mova,r4
rlca
movr4,a
mova,r3
rlca
movr3,a
movr7
cjner7,#10h,acc7e10;右移总次数为16次
ret
余项Y(X)的高8位在r3寄存器中,低3位在r4的高3位。
3定位
如果Y(X)=r3r4≠0,表示接收到的码组R(X)有差错,下一步则由Y(X)的值推算差错在R(X)中的位置。
理论上要找出R(X)中差错的位置,必须计算出差错校验子C(X)。在实践中,校验子C(X)的计算不仅费时间,而且多位检纠还需多个校验子C(X)。为此,经过几年的实践,把Y(X)(即r3r4)直接作为综合校验子,通过快速查表找到差错位置。查找程序的大小和检纠差错位数有关,这里以检纠4位差错为例,说明定位纠错的方法。
;4位差错位址查找子程序
bitposi:movb,0;对R(X)高位至低位的移动计数
movr2,#1fh;设表格长度
btoa:mova,b
incb
acalltabsub;调用表格子程序,读入表格值
clrc
subba,r3;Y(X)中的r3和表格值比较
jnzbinc1:不相等,转出
mova,b;相等,继续
acalltabsub
clr
subba,r4;Y(X)中的r4和表格值比较
jnzr2decl:不相等,转出
setbf0;相等,置标志位返回
ret
bincl:incb
r2decl:djnzr2,btoa
ret;表格查毕,没有相等的值,不置标志位返回
从查找子程序返回的B寄存器的值,即为差错在R(X)中从高位到低位的位数值。
;4位差错表格子程序
tabsub:inca
movca,@a+pc;将相对位置的表格送入a寄存器
ret
db0ebh;表格开始,长度为查找子程序中
db00;r2寄存器的预置值
db76h
.
.
.
4纠错
找到了差错在R(X)位置,就可以纠错了。
纠错的原理比较简单,因为单片机处理的是二进制数,而二进制数只有二个状态,即不是“0”就是“1”。也就是说,R(X)中差错位是“0”,则改为“1”;差错位是“1”,则改为“0”。所以纠错要对所在位求反就行了,程序见本刊网络补充版。
至此,整个检错、定位、纠错的BCH码校验检纠过程结束。BCH码校验算法,经过实践的检验,不失为单片机级的数据传输校验好算法。这种方法可以对多位随机差错和多位突发差错进行检验和纠错,具体位数的多少仅受单片机工作频率的限制,而不受方法的限制。
《用汇编语言实现BCH解码校验算法(第2页)》