导航:首页 > 操作系统 > 51单片机奇偶校验

51单片机奇偶校验

发布时间:2022-10-08 13:10:32

‘壹’ 51单片机中C语言奇偶校验位如何设置

MOV
A,
#待发数据
;数据进了A,即刻生成校验位P
MOV
C,
P
MOV
TB8,
C
;校验位送到TB8
MOV
SBUF,
A
;发送数据,以及P
上述写法,是偶校验。奇校验,需要增加一条取反指令,如下:
MOV
C,
P
CPL
C
MOV
TB8,
C
;校验位送到TB8

‘贰’ 异步通信中采用奇校验,如果传送的数据为:11010010,则奇偶校验位应为__。

1000110(0)必须添0这样原来有3个1已经是奇数了所以添上0之后1的个数还是奇数个。

奇/偶校验(ECC)是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。

如果采用奇校验,则在传输每个字节时增加一个额外的位作为校验位。当实际数据中的“1”个数为偶数时,校验位为“1”;否则,校验位为“0”,保证传输的数据满足奇校验要求。

接收端收到数据后,按奇数校验的要求检测数据中“1”的个数。如果是奇数,说明传输是正确的;否则,就意味着传输错误。

(2)51单片机奇偶校验扩展阅读:

关于奇/偶校验和的结论:

1、奇偶校验通过奇偶校验位对地进行校验。奇偶校验位是二进制数的最后一位,是一个二进制数,它指示给定数的二进制数中1的个数是奇数还是偶数。

2、奇偶校验位是最简单的错误检测码。

奇偶校验:如果给定数据位中1的个数是奇数,则奇偶校验位(即最后一位)设置为1;否则,奇偶校验位设置为0,使1的总数为偶数。

奇数校验:如果给定的数据位中1的个数是偶数,那么奇数校验位(即最后一位)被设为1,反之亦然,因此1的总数是奇数。

‘叁’ 51单片机如何初始化成8-n-1(8数据位,无奇偶校验位,1停止位)波特率,是用串口的模式几

void
uart_init(void)
{
SCON
=
0x50
;//串行方式1,
8-bit数据位,允许接收
TMOD
|=
0x21;//定时器1使用模式2,8-bit自动重装用于产生波特率
//
PCON
|=
0x80;//SMOD=1;波特率增倍
PCON
&=
0x7f;//SMOD=0;波特率不增倍
TH1
=
0xfd;
//Baud:19200(SMOD=1)或9600(SMOD=0),11.0592MHz
IE
|=
0x90;
//全局中断开,允许串口中断
TR1
=
1;
//定时器1运行,开始产生波特率
}
你可以用串口监视工具来查看单片机发出的数据是否正确,祝你成功

‘肆’ 51单片机进行串口通信的时候,如何设置奇校验还是偶校验

首先你需要设置串口工作模式为2或3
其次,你将SCON中的TB8设置为1或0来确定是奇校验或偶校验。

‘伍’ 51单片机中C语言奇偶校验位如何设置

在51单片机中,只要将一个值传送给累加器,这个数的奇偶校验值就会影响P。一般而言,在串行通讯中为确保传输数的准确,用到校验位的情况比较多。以下是程序代码:

#include<reg51.h>

main()
{
char dat;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0xd0;
while(1)
{
dat++;
ACC=dat;
TB8=P; //校验位送第九数据位TB8
SBUF=ACC;
while(TI==0);
TI=0;
}
}

‘陆’ 51单片机奇偶校验

呵呵,在这两条指令的前后,你各忽略了一条指令。请看下列程序及说明:
MOVA,#待发数据;数据进了A,即刻生成校验位P
MOVC,P
MOVTB8,C;校验位送到TB8
MOVSBUF,A;发送数据,以及P
上述写法,是偶校验。奇校验,需要增加一条取反指令,如下:
MOVC,P
CPLC
MOVTB8,C;校验位送到TB8
就这些。

‘柒’ 51单片机串口方式2中的TB8到底是用来奇偶校验还是定义地址/数据的

看书要仔细,书上的说法没有错。

TB8:工作方式2和方式3时,为发送的第9位数据,也可以当做奇偶校验位。
(跟地址/数据没有关系)

SM2:多机通信控制位(方式2和方式3)
SM2=1:只有接收到第9位(RB8=1)时,RI才置位。(如果RB8=0,RI就会等于0,就不能进入接收中断,自然丢失信息了。)
SM2=0:接收到单个字节,RI就置位。(单机通信方式)

而且这里说的奇偶校验是TB8,SM2=1时考虑的是RB8,这两个分别是不同的位,功能又不冲突。

串口通信最基本的控制寄存器SCON,书上的描述都很简洁,不能跳着看,要对比着一条一条理解。掌握了控制寄存器各个位的作用,串口通信也就基本了解了。

‘捌’ 51单片机中的串口通信,我想设置一个偶校验,请问怎么配置选用工作方式3的话,SCON是多少

void UartInit(void) //[email protected]
{
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xF4; //设定定时初值
TH1 = 0xFF; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}

‘玖’ 51单片机 奇偶校验

呵呵,在这两条指令的前后,你各忽略了一条指令。请看下列程序及说明:

MOV A, #待发数据 ;数据进了A,即刻生成校验位P
MOV C, P
MOV TB8, C ;校验位送到TB8
MOV SBUF, A ;发送数据,以及P

上述写法,是偶校验。奇校验,需要增加一条取反指令,如下:

MOV C, P
CPL C
MOV TB8, C ;校验位送到TB8

就这些。

‘拾’ 单片机奇偶校验

通常,串行通信的一帧的格式是8-n-1,即8位数据、无校验、1个停止位。
有时为了提高准确度,需要增加一个“奇”校验位或者“偶”校验位。
对于高级语言的做法是很简单的,只要把格式命令“8-n-1”,改为“8-P-1”或“8-O-1”即可。
串行口在带有校验位的通信方式中,是先发送8位数据,然后再发送校验位。
51单片机也可以按照带有校验位的方式进行串行通信,这在51单片机中称为9位数据方式。
51单片机中有两个位,分别称为TB8和RB8,它们在“无校验”的时候,并没有用处。
当51单片机用9位数据方式进行串行通信的时候,TB8和RB8的作用如下:
51单片机在发送的时候,先发送8位数据,然后发送TB8中的内容;
51单片机在接收的时候,先接收8位数据,然后接收校验位,存到RB8中。
编写51单片机程序的时候,应该在发送数据之前,在TB8中,写好待发送的校验位。
8位数据的校验位,可以利用单片机中奇偶标志位P来自动生成,程序如下。
MOV A, #待发数据 ;数据进了A,即刻生成奇偶标志位P
MOV C, P
MOV TB8, C ;校验位送到TB8
MOV SBUF, A ;发送数据,以及P
由于P = 1则说明A中有奇数个1,所以上述程序是“偶”校验的形式。
如果要求的是“奇”校验,则需要增加一条取反指令,如下:
MOV C, P
CPL C
MOV TB8, C ;校验位送到TB8
接收方会把收到的8位数送到SBUF,第9位数,送到RB8,然后自动设立RI = 1。
之后,就可以用RB8中的内容,对刚才收到的8位数进行正确性检验。

另一个问题:51单片机如何初始化成8-n-1(8数据位,无奇偶校验位,1停止位)波特率,是用串口的模式几?
本来想用串口的模式1,可是仔细一看,模式1是10异步通信方式,1起始位,8数据位,1停止位?
悬赏分:20 - 解决时间:2009-12-1 13:26
问题补充:首先感谢一楼的回答。我还有些疑问,刚才用示波器看了下,当发送0xFF时,示波器显示一位低电平,其余为高电平,这点应该是对的,因为起始位是0.可是为什么发送0xAA时,示波器的(起始位+数据位+停止位)序列是:0 + 0101 0101 + 1,而0x55的序列为:0 +1010 1010 + 1,这两个值好像不对,是相反了,要是调一下刚好对?
;-----------------------------------------------------------------
最佳答案用串口的模式1,是10位异步通信方式。
1起始位,8数据位,1停止位,没有奇偶校验位。
这种模式就是:8-n-1(8数据位,无奇偶校验位,1停止位)的模式。
完全符合你的要求。

阅读全文

与51单片机奇偶校验相关的资料

热点内容
乐高机器人的编程软件下载 浏览:223
工作中怎么使用加密狗 浏览:735
云服务器的后台找不到 浏览:98
php逐行写入文件 浏览:912
javaoracleweb 浏览:440
京东加密码怎么弄 浏览:467
单片机程序员培训 浏览:992
PHP商城源代码csdn 浏览:636
怎么把电脑里文件夹挪出来 浏览:693
java流程处理 浏览:685
ftp创建本地文件夹 浏览:660
腰椎第一节压缩 浏览:738
xp去掉加密属性 浏览:117
2345怎么压缩文件 浏览:982
迷你夺宝新算法 浏览:407
服务器如何防止木马控制 浏览:715
压缩空气用电磁阀 浏览:742
微信为什么不能设置加密认证 浏览:672
邓伦参加密室逃脱视频 浏览:391
音频压缩编码标准 浏览:300