一、计算机串行通信基础
若干个数据处理设备(计算机主机,外部设备)之间的信息交换称为数据通信。计算机与外设之间的数据通信有两种不同的方式:并行通信和串行通信。
并行通信是指数据的各位同时传送,每一位数据都需要一条传输线,如图4.9(a)所示。对于单片机,一次传送一个字节数据,因而需要8根数据线。这种通信方式只适合于短距离的数据传输。它的特点是传输速度快,但传输线多。
串行通信是指数据的各位分时传送,只需要一根数据线。对于一个字节数据,至少要分8次传送,如图4.9(b)所示。
图4.9 并行通信和串行通信示意图
可见,串行通信比并行通信的数据传输速度要低。随着现代通信技术的发展,串行通信也能达到很高的速度,完全能满足一般数据通信对传输速度的要求。串行通信可大大节省传输线路,而且能进行远距离的数据传输。
1.异步通信和同步通信
串行通信根据传送方式的不同又分为异步通信和同步通信。
(1)异步通信。
异步传输的特点是数据以字符为单位传送,在每一个字符数据的传送过程中都要加进一些识别信息位和校验位,构成一帧字符信息,或称为字符格式。在发送信息时,信息位的同步时钟(即发送一个信息位的定时信号)并不发送到线路上去,在数据的发送端和接收端各自有独立的时钟源。
异步通信的一帧数据格式由四部分组成:起始位、数据位、奇偶校验位和停止位,如图4.10所示。
图4.10 异步通信帧格式
起始位:按照串行通信协议的规定,在通信双方不进行数据传输时,线路呈逻辑“1”。在发送端需要发送字符时,首先发送一个起始位,即将线路置成逻辑“0”,起始位长度占1位。
数据位:数据位紧跟在起始位之后,用户根据情况可取5位、6位、7位或8位,低位在前高位在后。
奇偶校验位:在数据位之后,便是一个奇偶校验位。它是根据通信双方采用何种校验方式(奇校验或偶校验)的约定而加入的。目前专用于串行通信的IC芯片大多采用这种校验方式。在传输过程中,CPU可以根据此标志进行纠错处理。
停止位:它用来表示一个字符数据的结束,用逻辑“1”表示。停止位长度可以是1位、1.5位或2位。
停止位之后紧接着可以是下一个字符的起始位,也可以是若干个空闲位(逻辑“1”)。它意味着线路处于等待状态。
(2)同步通信。
同步通信是一种连续串行传送数据的通信方式,一次通信只传输一帧信息。这里的信息帧和异步通信的字符帧不同,通常有若干个数据字符,如图4.11所示。图4.11(a)为单同步字符帧结构,图4.11(b)为双同步字符帧结构,但它们均由同步字符、数据字符和校验字符CRC(循环冗余校验)三部分组成。
与异步通信不同的是,同步方式需要提供单独的时钟信号,且要求接收器时钟和发送器时钟严格保持同步。为此在硬件电路上采取了一些复杂的措施来加以保证。
图4.11 同步通信的字符帧格式
2.波特率
串行通信的数据传输速率是用波特率来表示的。波特率定义为每秒钟传送二进制数码的位数。在异步通信中,波特率为每秒传送的字符数与每个字符位数的乘积。假如每秒传送120个字符,而每个字符按上述规定包含10位(起始位、校验位、停止位各1位,数据位7位),则波特率为:
120字符/秒×10位/字符=1200位/秒(bps)
波特率越高,数据传输的速度越快,一般异步通信的波特率在50~9600位/秒之间。
有两点需要注意:
(1)波特率并不等于有效数据位的传输速率。例如:对于10位帧格式的数据传输,其中只有7位是有效数据位,3位是识别信息位,所以有效数据位的传输速率是:
120字符/秒×7位/字符=840位/秒(bps)
(2)波特率也不等同于时钟频率。通常采用高于波特率若干位的时钟频率(16或64倍)对1位数据进行检测,以防止传输线路上可能出现短时间的脉冲干扰,从而保证对数据信号的正确接收。
3.串行通信制式
在串行通信中,按通信双方数据传输的方向,可分为单工(Simplex)、半双工(Half Duplex)和全双工(Full Duplex)三种制式。如图4.12所示。
单工是指两个通信设备中一个只能作发送、一个只能作接收,数据传送是单方向的,如图4.12(a)所示。
半双工是指两个通信设备中都有一个发送器和一个接收器,相互可以发送和接收数据,但不能同时在两个方向上传送,即每次只能有一个发送器和一个接收器工作,如图4.12(b)所示。
图4.12 串行通信制式
全双工是指两个通信设备可以同时发送和接收数据,数据传送可以同时在两个方向进行,如图4.12(c)所示。尽管许多串行通信接口电路具有全双工功能,但在实际应用中,大多数情况只工作于半双工方式,这种用法比较简单、实用。
二、MCS-51单片机的串行口
串行接口电路的种类和型号很多,能够完成异步通信的硬件电路称为UART,即通用异步接收器/发送器;能够完成同步通信的硬件电路称为USRT;既能够完成异步又能同步通信的硬件电路称为USART。
从本质上说,所有的串行接口电路都是以并行数据形式与CPU接口,以串行数据形式与外部逻辑接口。它们的基本功能都是从外部逻辑接收串行数据,转换成并行数据后传送给CPU,或从CPU接收并行数据,转换成串行数据后输出到外部逻辑。
1.串行口的结构
MCS-51单片机内置一个全双工的串行口,既具有通用异步接收和发送器UART的全部功能,也具有同步移位寄存器的功能。串行口基本结构如图4.13所示。主要由两个独立的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器),串行口控制寄存器、输入移位寄存器及若干控制门电路组成。
图4.13 串行口结构框图
2.串行口控制寄存器SCON
串行口工作方式的设定、接收与发送控制的设置都是通过对串行口控制寄存器SCON的编程确定的。SCON是一个特殊功能寄存器,其地址为98H,可位寻址,其各位的作用定义如下:
SM0、SM1:串行口工作方式选择位,工作方式选择,如表4.3所示。其中fosc是振荡器的频率。
表4.3 工作方式选择
SM2:多机通信控制位。在方式0下,SM2应为0。在方式1下,如果SM2=0,则只有收到有效的停止位时才会激活RI。在方式2和方式3下,如置SM2=1,则只有在收到的第9位数据为1时,RI被激活(RI=1,申请中断,要求CPU取走数据)。
REN:允许接收控制位。由软件置位或清零。REN=1,允许接收;REN=0,禁止接收。
TB8:在方式2和方式3下,存放要发送的第9位数据,常用作奇偶校验位。在多机通信中,可作为区别地址帧或数据帧的标识位,若为地址帧,TB8=1;若为数据帧,TB8=0。
RB8:在方式2和方式3下,存放接收到的第9位数据;在方式1下,如SM2=0,则该位为接收到的停止位;方式0不用此位。
TI:发送中断标志。在方式0下,发送完第8位数据位时,由硬件置位;在其他方式下,当开始发送停止位时,由硬件将TI置位,即是向CPU申请中断,CPU可以发送下一帧数据。在任何方式下,TI必须由软件清零。
RI:接收中断标志。在方式0下,接收完第8位数据位时,由硬件置位;在其他方式下,当接收到停止位时RI置位,即申请中断,要求CPU取走数据。它必须由软件清零。
3.串行口的工作方式
(1)方式0。
此时串行口工作于同步移位寄存器方式,串行口相当于一个并入串出或串入并出的移位寄存器。数据从RXD输入或输出(低位在先,高位在后),TXD输出同步移位时钟,其传输波特率是固定的,为fosc/12。发送过程从数据写入SBUF开始,当8位数据传送完毕后,TI被置1。接收时,必须先使REN=1、RI=0,当8位数据接收完后,RI会置1,此时接收数据存于SBUF中。若要再次发送和接收数据,必须用软件将TI、RI清零。
这种方式常用于单片机外围接口电路的扩展。
(2)方式1。
此时串行口工作于异步通信方式,帧数据格式为10位(8位数据,起始位、停止位各1位)。其传输波特率是可变的,对于80C51串行口的波特率由工作在方式2下的定时器T1的溢出率决定。此时常设置定时器T1工作在方式2下,且禁止中断。
其中,SMOD为电源及波特率控制寄存器PCON(87H)中的最高位。SMOD=1时,表示波特率加倍;SMOD=0时,表示波特率不加倍。X为定时器T1的初值。
当串行口以方式1发送时,进行写入SBUF操作,就可将数据位逐一由TXD端送出。当发送一帧数据后,将TI置1。
当串行口以方式1接收时,需控制SMOD中的REN为1,此时对RXD引脚进行采样,当采样到起始位有效时,开始接收数据。当一帧数据接收完毕,且RI=0、SM2=0或接收到RB8=1时,接收数据有效,RI置1,此时可进行读SBUF操作。
若要再次发送和接收数据,必须用软件将TI、RI清零。
(3)方式2和方式3。
此时串行口工作于异步通信方式,帧数据格式为11位(起始位1位、8位数据位、1位可编程数据位、1位停止位)。
方式2与方式3的差别仅在于,方式2的波特率为fosc/32(SMOD=1)或fosc/64(SMOD=0),而方式3与方式1一样,波特率是可变的,也是由定时器T1的溢出率决定。
发送时,由软件设置TB8后构成第9位数据进行发送,TB8可作为多机通信中的地址/数据信息的标志位,也可作为奇偶校验位。方式2、3的发送过程与方式1的发送过程类似。
方式2、3的接收过程与方式1的接收过程类似,当接收到第9位数据后,将这一位送入RB8中。
表4.4列出了用定时器T1产生各种常用波特率的方法。
表4.4 定时器1产生的常用波特率
表4.5给出了串行口四种工作方式的特性小结。
表4.5串行口工作方式一览表
三、串行通信的程序设计
1.串行口的初始化编程
串行口的初始化编程主要是对串行口控制寄存器SCON、电源控制寄存器PCON中的SMOD位的设定及对串行口波特率发生器T1的初始化。如果涉及中断系统,则还需要对中断允许控制寄存器IE及中断优先级控制寄存器IP进行设定。
常用初始化内容如下,可根据需要增减其中各项。
SCON=工作方式控制字;//设定串行口工作方式
PCON=0X80;//波特率加倍时设定
TMOD=0X20;波特率可变时,用于设定T1工作方式
TH1=定时初值;(www.daowen.com)
TL1=定时初值;
ET1=0;//禁止定时器T1中断
TR1=1;//启动T1,产生波特率
EA=1;//若使用中断方式,开CPU中断
ES=1;//开串行口中断
PS=1;//设定串行口为高优先级中断
例4-1 按项目4任务要求,若fosc=12MHz,波特率为4800bps,设SMOD=1,则定时/计数器T1的计数初值为多少?若允许串行口中断,进行初始化编程。
分析:要设定波特率为4800bps,首先应计算定时初值:
初始化程序如下:
2.发送和接收程序设计
通信过程包含两部分:发送和接收,因此通信软件也包括发送程序和接收程序。它们分别位于发送机和接收机中。发送和接收程序的设计一般采用两种设计方法:查询和中断。
异步串行通信是以帧为基本传送单位的。在每次发送或接收完一帧数据后,将由硬件使SCON中的TI或RI置1。
查询方式就是根据TI或RI的状态是否有效,来判断一次数据发送或接收是否完成,在发送程序中,首先将数据发送出去,然后查询是否发送完毕,再决定发下一帧数据,即“先发后查”。在接收程序中,首先判断是否接收到一帧数据,然后保存这一帧数据,再次查询是否接收到下一帧数据,即“先查后收”。
例4-2 在串行计数器中,甲乙机发送接收按键的计数值数采用查询方式,要求:编制程序并进行Proteus仿真。
(1)甲机串行口查询式发送程序。
(2)乙机串行口查询式接收程序。
甲乙机采用查询时方式发送接收计数值后,仿真运行效果如图4.14所示。
图4.14 串行计数器查询时数据传送仿真效果
采用中断方法编程,则将TI、RI作为中断申请标志。如果设置系统允许串行口中断,则每当TI或RI产生一次中断申请,就表示一帧数据发送或接收结束。CPU响应一次中断申请,执行一次中断服务程序,在中断服务程序中完成数据的发送或接收,其中,发送程序中必须有一次发送数据的操作,目的是为了启动第一次中断,之后的所有数据的发送均在中断服务程序中完成。而接收程序中,所有的数据接收操作均在中断服务程序中完成。
例如:在串行计数器中,甲乙机发送接收按键的计数值数采用了中断方式,中断服务程序如下:
(1)甲机串行口发送中断服务程序。
四、串行通信总线标准及其接口
在单片机应用系统中,在采用异步通信设计通信接口时,必须根据需要选择标准接口,采用了标准接口,能够方便地把单片机和外设连接起来。异步通信接口主要有RS-232C接口,RS-449、RS-422和RS-485接口。下面详细介绍RS-232C标准接口。
1.RS-232C接口
RS-232C是使用最早、应用最多的一种异步串行通信总线标准。它是电子工业协会(EIA)1962年公布,1969年最后修订而成的。RS-232C主要用来定义计算机系统的一些数据终端设备(DTE)和数据电路终接设备(DCE)之间的电气性能。
RS-232C串行接口总线适用于:设备之间的通信距离不大于15 m,传输速率最大为20 kb/s。
(1)RS-232C信息格式标准。
RS-232C采用串行格式,如图4.15所示。该标准规定:信息的开始为起始位,信息的结束为停止位;信息本身可以是5、6、7、8位再加一位奇偶校验位。如果两个信息之间无信息,则写“1”,表示空。
图4.15 RS-232C信息格式
(2)RS-232C电平转换器。
RS-232C规定了自己的电气标准,由于它是在TTL电路之前研制的,所以它的电平不是+5 V和地,而是采用负逻辑,即逻辑“0”:+5 V~+15 V;逻辑“1”:-5 V~-15 V。因此,RS-232C不能和TTL电平直接相连,使用时必须进行电平转换,否则将使TTL电路烧坏,实际应用时必须注意。MAX232、MC1488、MC1489是常用的电平转换集成电路。其中MAX232芯片是低功耗、单电源、双RS-232C发送接收器,可实现TTL到EIA的双向电平转换。其内部结构和引脚排列如图4.16、4.17所示。电容配置参见表4.6。
图4.16 MAX232内部结构
图4.17 MAX232引脚图
表4.6 MAX232电容配置表
(3)RS-232C总线规定。
RS-232C标准总线共25根,采用标准的DB-25类型的连接器。一般情况下只需使用其中的9根信号线。所以就产生了一个简化的DB-9连接器,如图4.18所示,其各引脚的排列如图4.19所示,各引脚定义如表4.7所示。
图4.18 DB-9连接器
图4.19 DB-9连接器引脚图
表4.7 DB-9连接器各引脚定义
在最简单的全双工系统中,仅用发送数据、接收数据和信号地三根线即可。对于MCS-51单片机,利用其RXD(串行数据接收端)线、TXD(串行数据发送端)线和一根地线,就可以构成符合RS-232C接口标准的全双工通信口。
2.RS-422A和RS-485接口标准
RS-232C虽然应用广泛,但因为推出较早,在现代通信系统中存在以下缺点:传输距离短,传输速率低;通信距离较大时,有电平偏移;抗干扰能力差。鉴于此,EIA制定了新的接口标准RS-422A、RS-485等。
RS-422A输出驱动器为双端平衡驱动器。如果其中一条线为逻辑“1”状态,另一条线就为逻辑“0”,比采用单端不平衡驱动对电压的放大倍数大一倍。差分电路能从地线干扰中拾取有效信号,差分接收器可以分辨200mV以上电位差。若传输过程中混入了干扰和噪声,由于差分放大器的作用,可使干扰和噪声相互抵消。因此可以避免或大大减弱地线干扰和电磁干扰的影响。RS-422A传输速率(90Kbps)时,传输距离可达1200米。
RS-485是RS-422A的变型:RS-422A用于全双工,而RS-485则用于半双工。RS-485是一种多发送器标准,在通信线路上最多可以使用32对差分驱动器/接收器。如果在一个网络中连接的设备超过32个,还可以使用中继器。
RS-485的信号传输采用两线间的电压来表示逻辑1和逻辑0。由于发送方需要两根传输线,接收方也需要两根传输线。传输线采用差动信道,所以它的干扰抑制性极好,又因为它的阻抗低,无接地问题,所以传输距离可达1200米,传输速率可达1Mbps。
五、单片机与PC机的通信
在PC机系统内部装有异步通信适配器,利用它可以实现异步串行通信。而MCS-51系列单片机本身有一个全双工的串行接口,只要配以电平转换的驱动电路、隔离电路就可组成一个简单可行的通信接口。PC机和单片机最简单的是三线式连接,但单片机输入、输出电平为TTL电平,而PC机配置的是RS-232标准串行接口,二者的电气规范不同,所以要加电平转换器。
例4-3 将PC机键盘输入字符发送给单片机,单片机接收PC机发来的字符后,在外接的LED数码管上显示接收字符的ASCII码,并将其回送PC机。要求设计并仿真。
通信双方约定:波特率4800b/s,数据8位,一个停止位,无奇偶校验位。
(1)接口设计。
采用MAX232的PC机和单片机串行口接口电路,与PC机连接采用DB-9标准插座。但仅使用RXD、TXD、GND三条线进行信号传输。如图4.20给出了采用MAX232芯片的PC机和单片机串行通信接口电路,与PC机相连采用9芯标准插座。
图4.20 PC机与单片机串行接口电路
(2)程序设计。
单片机通过中断方式接收PC机发送的数据并回送,选择串行工作方式1,定时器T1工作于方式2,SMOD=1,fosc=11.0592MHz,计算T1初值为0xf3。
程序如下:
(3)Proteus仿真。
①绘制电路。
PC机和单片机串行口接口电路以及所需的虚拟终端如图4.21所示。
图4.21 单片机与PC机的通信电路
②属性设置。
PC机的虚拟终端属性设置要完全相同,单片机的串行口虚拟终端属性设置要完全相同。单片机的波特率、数据位、停止位和校验位要与串行口模型设置的一样。但单片机虚拟终端与PC机虚拟终端在RX/TX Polarlty属性的设置是相反的,是因为MAX232具有信号反向后输出功能。
③仿真运行。
加载hex目标代码,进入Proteus调试环境,选择虚拟终端PCT的“Echo Typed Characters”项后,在其窗口中输入字符“A”后,可以看到单片机MCUR中显示“A”并在两位LED数码管显示出了“A”的ASCII码41,在MCUT和PCT终端窗口也显示了单片机回送的“A”。由此可看出屏幕上显示的字符与所键入的字符相同,说明二者之间的通信正常。运行结果如图4.22所示。
图4.22 仿真运行
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。