单片机偶检验怎么写

1.单片机奇偶校验通常 , 串行通信的一帧的格式是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停止位)的模式 。
完全符合你的要求 。
2.大家好嘿嘿 俺来帮你吧
1 串口通信方式三 为9位异步通讯 8个数据位 还有一位可以做奇偶检验位 。
2 要根据通讯协议:
如加的是偶校验位 则每次将要发送到数据送给累加器A , 则 如果传送的8为数据位的1的个数为奇数 则 P=1 9位数据1的个数为偶数 正确 将P中值送给TB8 作为要发送到第九位数据;