串口通信的校验---奇偶校验,0校验,1校验

串口通信的校验---奇偶校验,0校验,1校验,第1张

设置为奇校验,先看发送方将要发送的一帧数据中有几个1,如果是偶数个1则校验位置1,保证1的个数是奇数。如果是奇数就置0。保证是奇数后发送给接收方,接受方此时要检查发送的数据位是否有误,它检查的方法就是看接受的数据里1的个数,如果发现1的个数是偶数,再看看发送来的校验位是1且模式是奇校验,偶数+1=奇数,判断数据是正确。

例:发送的数据位是01111 0000 ,使校验位置1,让1 有5个(奇数)。

发送到接受方,接受方检查数据位正确性,发现1有4个(偶数),再看校验位是1,4+1=5(奇数)。判断数据正确

设置为偶校验,先看发送方将要发送的一帧数据中有几个1,如果是奇数个1则校验位置1,如果是偶数就置0。保证1的个数是偶数。保证是偶数后发送给接收方,接受方此时要检查发送的数据位是否有误,它检查的方法就是看接受的数据里1的个数,如果发现1的个数是奇数,再看看发送来的校验位是1且模式是偶校验,奇数+1=偶数,判断数据是正确。

例:发送的数据位是01111 1000 ,使校验位置1,让1 有6个(偶数)。

发送到接受方,接受方检查数据位正确性,发现1有5个(奇数),再看校验位是1,5+1=6(偶数)。判断数据正确

设置为1校验,校验位始终为1,接收方接收到数据发现检验位为1就判断数据正确,这种方法简陋。

设置为0校验,校验位始终为0,接收方接收到数据发现检验位为0就判断数据正确,这种方法简陋。

小结:通常用奇偶校验,本质就是判断数据位中1个数+校验位 = 奇数/偶数的方法。

也存在弊端比如用奇校验发送的是0111 0001 ,校验位是1。但到接收方变成1110 0001 ,接受也判断正确,但数据并不相同。

1、51单片机SCON=0xDA,工作在方式3.(方式2也可以)

串口 1 模式 3:

波特率是可变的,其它和模式2 相同

11 位数据通过TxD/P3.1 发送,通过RxD/P3.0 接收。一帧数据包含一个起始位(0),8 个数据位(低位在

先),一个可编程的第9 位,和一个停止位(1)。发送时,第9 位数据位来自特殊功能寄存器SCON 的

TB8 位.接收时,第9 位进入特殊功能寄存器SCON 的RB8 位。

SMOD

串口1波特率在模式3 = ( 2 / 32 ) x BRT独立波特率发生器的溢出率

当SMOD = 0时,串口1波特率 = BRT 独立波特率发生器的溢出率 / 32,

当SMOD = 1时,串口1波特率 = BRT 独立波特率发生器的溢出率 / 16,

BRT独立波特率发生器的溢出率 = Fosc/12/( 256 - BRT ),当BRTx12 = 0时,

BRT独立波特率发生器的溢出率 = Fosc / ( 256 - BRT ),当BRTx12 = 1时

TB8:发送时校验位,可以奇校验或偶校验(直接置0或1),然后再发送。

RB8:接收时校验位,判断接数据是否正确。

2、程序

/*****************************************

*串口1中断

*****************************************/

void RXD_Int_Service() interrupt 4

{

uint8 ch

if(RI)

{

RI=0

Usart1.RxdDly=6 //超过0.3S清空计数

Usart1.RxdBuf[Usart1.RxdCnt]=ch

Usart1.RxdCnt++

if(Usart1.RxdCnt>=10)

{

Usart1.RxdTrue=1 //接收正确。

Usart1.RxdNum=Usart1.RxdCnt

Usart1.RxdCnt=0

}

}

if(TI)//防止发送中断

{

TI=0

}

}

void Timer0_InSevice() interrupt 1

{

TH0=0xdc //定义50ms 正常值0xfe 0x0c ,修正值:0xfe 0x16

TL0=0x00 //11.0592MHz晶振

if(Usart1.RxdDly)

{

Usart1.RxdDly-- //0.3S没有接收到数据,清0计数。

if(Usart1.RxdDly==0)

{

Usart1.RxdCnt =0 //记数清0.

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8175846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存