循环冗余校验码与纠错原理 循环冗余校验码(Cyclic Redundancy Checksum,CRC)是常用的信道编码方式,广泛应用于帧校验。 设要传送的k位信息码为(mk-1,mk-2,…,m1,m0) 所对应的多项式为: M(x)=mk-1xk-1+ mk-2xk-2+…+m1x+m0 将其左移r=n-k位,相当于M(x)乘以xr得xn-k M(x) 引入一个r位的生成多项式g (x),可有: xn-k M(x)/ g (x)=S (x) + r (x) )/ g (x) ;模2除 r (x)就被称之为CRC校验码多项式 定义传送码字 C (x) =xn-k M(x)+ r (x) 这样组成的k+r位多项式必被g (x) 整除 循环冗余校验码与纠错原理 CRC检错方法: 发送方发送信息码,并将其与g (x) 相除,得到 r (x) 后,将其系数拼在后面发给接收方; 接收方收到c (x)后,将其与g (x) 相除,最后被整除表示 所接收到的数据完全正确;不能被整除表示数据传输出错。 CRC检错码的检错能力与其生成多项式g (x) 密切相关, g (x) 一般形式为: g(x)=xn-k+ gn-k-1xn-k-1+…+g1x+1 g (x)的首项系数为1,末项系数也必须为1, g (x)的次数越高,其检错能力越强。 8251的内部结构 8251A的读/写控制真值表 8251A规定: 复位后的第一个控制命令是方式选择控制字 8251A方式选择控制字 操作命令控制字直接让8251A实现某种操作或进入规定的工作状态,它只有在设定了方式选择控制字后,才能由CPU写入。 8251A操作命令控制字 CPU可在8251A工作过程中利用输入指令读取当前8251A的状态字,从而可以检测接口和数据传输的工作状态。 8251A的状态字 8251A初始化和数据传送流程图 8251编程示例 例:编写8251异步模式下的接收和发送程序,完成256个字符的发送和接收,设端口地址:208H,209H,波特率因子16,1起始位,1停止位,无奇偶校验,每字符8位。 发送数据256字节,放在OUTBUF中 Data segment OUTBUF DB xx, xx, xx,…….. ;共256字节 Data ends MOV DX,209H MOV AL,40H ;复位命令。 OUT DX,AL MOV AL ;模式字,波特率因子16,1起始 位,1停止位,无奇偶校验,每字符8位。 OUT DX,AL MOV AL ;控制字,错误标志全复位,使RTS和DTR输出低有效,允许发送和接受 OUT DX,AL MOV SI,0 MOV CX,256 ;发送256字节 NEXT:MOV DX ,209H IN AL,DX ;状态字 AND AL,01H ;TXRDY? JZ NEXT MOV AL,OUTBUF[SI] MOV DX,208H OUT DX,AL ;发送 INC SI LOOP NEXT 发送程序 接收程序 接收256字节,放在buf中 Data segment buf DB 256 dup(?) Data ends ┆ MOV DX,209H MOV AL,40H;复位 OUT DX,AL MOV AL ;模式字 OUT DX,AL MOV AL ;控制字 OUT DX,AL MOV CX,256 ;接收256字节 MOV SI,0 NEXT: MOV DX,209H IN AL,DX ;读状态字 AND AL,02H ; RXRDY? JZ NEXT MOV DX,208H IN AL,DX ;接收1字符 MOV buf[SI],AL INC SI LOOP NEXT 小
原创力文档

文档评论(0)