- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 串口通信
9.1概述
单片机与外界进行信息交换,称为通信。通信有并行通信和串行通信两种基本方式。并行通信是多位数据同时被发送或接收,如图9-1(a)所示;串行通信则是数据逐位依次被发送或接收,如图9-1(b)所示。并行通信和串行通信各有其优缺点,具体如表9-1所列。
(a)并行通信 (b)串行通信
图9-1 通信方式
表9-1 并行通信和串行通信的特点
通信方式 优点 缺点 并行通信 多位数据同时传输,传送速度快 线路位数多,不便长距离传送 串行通信 适合长距离通信,节省传输线路,有一定的纠错能力 多位数据逐位依次传输,传送速度较慢 9.1.1串行通信
串行通信适合长距离、节省传输线、有纠错能力的突出优点,使其逐渐成为单片机与其它系统通信的主要方式。串行通信又细分为异步通信和同步通信,单片机主要采用异步通信方式。
1、异步通信
异步通信数据按帧传输,一帧数据包含起始位、数据位、校验位和停止位。异步通信凭借传输信息中设置的起始位、停止位来保持通信同步。
异步通信对硬件要求不高,容易实现且灵活,适用于数据的随机发送/接收,但因传送一个字节的数据就要建立一次同步,加上起始位、校验位和停止位,使得工作速度相对较低。
2、同步通信
同步通信传输的信息,是由1~2个同步字符和多字节数据位组成。同步字符用于保持通信同步并作为起始位,用以触发同步时钟开始发送或接收数据;多字节数据之间不能有空隙,每位占用的时间相等。
同步通信传输速度快,但需要准确的时钟来实现收发双方的严格同步,硬件要求高,多用于批量数据传送。
9.1.2串行通信的制式
串行通信按照数据传送方向的不同,有三种传输方式:
1、单工制式
单工传输,是指通信双方传输信息时,只能从发送方单方向传送数据给接收方,如图9-2所示。
图9-2 单工通信
2、半双工制式
半双工传输,是指通信双方都有接收器和发送器,都能够进行数据的发送和接收,但不能在同一时刻接收和发送数据,即发送时不能接收,接收时不能发送。如图9-3所示。
图9-3 半双工通信
3、全双工制式
全双工传输,是指通信双方均设有发送器和接收器,通信信道相互独立,既有发送信道又有接收信道。因此,全双工传输可实现通信双方数据的同时发送和接收,即发送时可以接收,接收时也可以发送。如图9-4所示。
图9-4 全双工通信
51单片机内部的串行接口是全双工的,即它能同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入。串行口还具有接收缓冲功能,即从接收缓冲器中读出前一个已收到的字节数据之前,就可以开始接收第二字节数据了。串行口的内部结构如图9-5所示。
图9-5 串行口结构示意图
单片机知识:串口缓冲器SBUF
串口缓冲器SBUF,是在物理上彼此独立的两个缓冲器:一个是接收缓冲器,用于存放接收到的数据;另一个是发送缓冲器,用于存放待发送的数据。所以,数据的发送和接收可以同时进行。两个缓冲器共用一个地址99H,通过对SBUF的读、写语句,可以区分当前进行的操作是针对接收缓冲器还是发送缓冲器:如果CPU在写SBUF,操作的对象就是发送缓冲器;而CPU在读SBUF时,操作的对象就是接收缓冲器了。
例如:SBUF=send[i]; // 发送第i个数据
buffer[i]=SBUF; //接收数据
9.2 单片机间的串口通信
功能说明:单片机a与单片机b,通过串行口进行通信。a机发送数据,b机接收a机发送的数据,并进行相应处理。按键K1每按下一次,连接在b机P2.0引脚的蜂鸣器就报警鸣响一次,同时,连接在b机P2.7引脚的发光二极管D1闪烁一次。按键K2按下一次,连接在b机P2.0引脚的蜂鸣器报警鸣响两次,同时,连接在b机P2.7引脚的发光二极管D1闪烁两次。
硬件说明:
1、 硬件电路连接如图9-6所示,单片机a的P3.1引脚(TXD),连接到单片机b的P3.0引脚(RXD)。
2、按键K1和K2分别连接到单片机a的P1.0和P1.1引脚;
图9-6 双机串口通信硬件连接图
程序清单如下:
//双机串口通信,a机发送数据程序
#include reg52.h
#define uchar unsigned char
sbit k1=P1^0;
sbit k2=P1^1;
uchar i=0;
//************************************************************
void delay(uchar i) //延时子函数
{
uchar j,k;
for(k=0;ki;k++)
for(j=0;j110;j++);
文档评论(0)