51单片机串行通信奇偶校验的设置方法
来源:互联网 发布:房间改造软件 编辑:程序博客网 时间:2024/05/21 03:54
51单片机串行通信奇偶校验的设置方法
悬赏分:10 - 解决时间:2009-12-5 10:21
;=================================================================
最佳答案:
通常,串行通信的一帧的格式是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位数进行正确性检验。
;-----------------------------------------------------------------
提问者对于答案的评价:谢谢了
原题网址:http://zhidao.baidu.com/question/127691018
;=================================================================
另一个问题: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或方式3。
把奇偶校验位,放到TB8上,就可以发送了,这就是偶校验。
接收的奇偶校验位,在RB8中。
--------------------
呵呵,你还用上了示波器,奢侈!
你观察的很正确。
记住:串行通信,是“低位在前”。这就对了。
你补充的提问太多了,都足够再开一、二个问题了,这20分,真值!
;-----------------------------------------------------------------
回答者: 做而论道 - 十一级 2009-11-30 23:10
提问者对于答案的评价:谢谢,真心帮助他人的人!~问题搞清楚了,串口数据传输是从低位开始穿,所以发送0xFF与0x55是相反的。
原题网址:http://zhidao.baidu.com/question/127527034.html
;=================================================================
- 51单片机串行通信奇偶校验的设置方法
- 双机(51单片机)串行通信最基本的方法
- Linux PC和51系列单片机串行通信的设计
- 51 单片机 C 语言串行双机通信的问题
- 单片机间的RS232串行通信程序
- 51单片机编程:双机串行通信
- 单片机串行通信总结
- 用VC++6.0实现PC机与单片机之间串行通信的方法
- 用VC++6.0实现PC机与单片机之间串行通信的方法
- 用VC++6.0实现PC机与单片机之间串行通信的方法(转载)
- 【转】用VC++6.0实现PC机与单片机之间串行通信的方法
- 用VC++6.0实现PC机与单片机之间串行通信的方法
- 串行通信总结(实现两个单片机之间的通信)
- 11.1 单片机串行通信介绍
- 利用“串口调试助手”等软件调试 PROTEUS 环境中 51单片机 的串行通信
- PC机与单片机串行通信的硬件设计
- 单片机和PC之间的串行通信程序
- Matlab与单片机的串行通信及数据处理
- 实现每隔1秒计一个数,显示00到99
- python set集合
- 单片机实现灯左右移动和闪烁的程序
- 编写51单片机程序,输出方波,at89s52的单片机
- 延时程序耗费时间的精确算法
- 51单片机串行通信奇偶校验的设置方法
- Java开发微信支付流程及容易入坑的点
- 用扫描法读出4×4矩阵键盘,在数码管显示按键值
- c++学习之继承篇(多重继承之虚继承)
- 汇编程序:用减奇数法开平方(16位)
- 正负数、0,个数的统计
- 三个无符号数求最大值
- 信号与系统中的傅里叶级数的意义
- AngularJS中的$http深入分析