《单片机系统设计及工程应用》课件第5章_第1页
《单片机系统设计及工程应用》课件第5章_第2页
《单片机系统设计及工程应用》课件第5章_第3页
《单片机系统设计及工程应用》课件第5章_第4页
《单片机系统设计及工程应用》课件第5章_第5页
已阅读5页,还剩120页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

5.1基本概念5.251系列单片机串行通信接口5.3串行口应用实例5.4RS-232C串行总线及应用习题5计算机数据通信是计算机科学与通信技术的有机结合,是现代控制系统的重要组成部分。就通信技术的实际应用而言,常见的通信方式有以下几类:

(1)按通信对象数量的不同,通信方式可分为点到点通信、一点到多点通信和多点到多点通信3种方式。

5.1基本概念

(2)按通信终端之间的连接方式可划分为两点间直通方式和交换方式。直通方式是通信双方直接用专线连接;而交换方式是通信双方必须经过交换机才能连接起来的一种通信方式,如电话系统。

(3)按数字信号传输的顺序,在数据通信中(主要指计算机通信),通信方式又有串行通信与并行通信之分。

1.并行通信

并行通信中的数据在整个传输过程中并排前进,有多少个数据线就能同时传送多少位数据。

并行通信的特点是硬件连线多、传输速率高,一般适用于近距离、高速率的通信领域。

例如,计算机主板与硬盘、计算机与打印机等之间的通信。图5.1(a)是并行通信示意图。

2.串行通信

串行通信中的数据在传输过程中一位一位地串行传输,硬件连接比较简单。最简单时只需3根连线即可实现串行通信,相对于并行通信来讲,其通信速率低,一般适用于短距离数据通信。在单片机应用系统中常采用串行通信方式。图5.1(b)是串行通信示意图。

在串行通信中,按同步方式的不同,又分为同步通信和异步通信。图5.1并行通信与串行通信(a)并行通信;(b)串行通信

3.异步通信

异步通信(AsynchronousCommunication)中的数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,一帧数据低位在前,高位在后,通过传输线被接收端一帧一帧地接收。发送端和接收端可以由各自独立的时钟来控制数据的发送和接收,这两个时钟彼此独立,互不同步。接收端是依靠字符帧格式来判断发送端是何时开始发送,何时结束发送的,其基本特征是每个字符必须用起始位和停止位作为字符开始和结束的标志。字符帧格式是异步通信的一个重要指标。

1)字符帧

字符帧(CharacterFrame)也叫字符格式或数据帧。它由起始位、数据位、奇偶校验位和停止位等4部分组成,如图5.2所示。图5.2串行异步传送的字符格式(a)无空闲位的字符格式;(b)有空闲位的字符格式

(1)起始位:位于字符帧开头,只占一位,为逻辑0,低电平。用起始位表示发送端开始发送一帧数据信号,它是字符帧的起始标志。

(2)数据位:紧跟起始位之后,用户根据情况可设置数据位为5位、6位、7位或8位,低位在前高位在后。

(3)奇偶校验位:位于数据位之后,仅占1位,用来作为一帧数据的奇/偶校验位。

(4)停止位:位于字符帧最后,为逻辑1,高电平。通常可设置停止位为1位、1.5位或2位,用于向接收端表示一帧字符信息已经发送完毕,是字符帧的结束标志。

例如,设定串行传送的字符格式为:1位起始位、8位数据位、1位偶校验位和1位停止位。用该格式分别串行传送字符“B”和“C”的字符帧结构如图5.3所示。图5.3“B”和“C”的字符帧结构(a)“B”的字符帧结构;(b)“C”的字符帧结构字符“B”的ASCII码为1000010B,发送的8位数据位为01000010B,采用偶校验,所以校验位为0。

字符“C”的ASCII码为1000011B,发送的8位数据位为01000011B,采用偶校验,由于1的个数为奇数,所以校验位为1。

2)波特率

波特率(BaudRate)是指信号传输的速率,是数据通信的一个重要指标。波特率指每秒传送二进制码元的位数,单位为b/s,即位/秒。波特率用于表征数据传输的速率,波特率越高,数据传输速率也越高。

单片机应用系统通常采用串行异步通信方式。通信时要求发送端与接收端的波特率必须一致,波特率一般为50~9600b/s。

4.同步通信

同步通信(SynchronousCommunication)是将一大批数据分成若干个数据块,数据块之间用同步字符隔开,而传输的各位二进制码之间都没有间隔。其基本特征是发送端与接收端通信时保持严格同步,即同步通信是一种连续串行传送数据的通信方式,一次通信只传输一帧信息。这里的信息帧和异步通信的字符帧不同,其数据块通常由若干个数据字符组成,如图5.4所示。图5.4(a)为单同步字符帧结构,图5.4(b)

为双同步字符帧结构。其一帧由同步字符、数据字符和校验字符3部分组成。在同步通信中,同步字符可以采用统一的标准格式,也可以由用户约定。图5.4同步通信的格式(a)单同步字符帧结构;(b)双同步字符帧结构

5.串行通信数据传送的3种方式

根据信号传输方向与传输时间的不同,串行通信有3种通信方式:单工通信、半双工通信和全双工通信,如图5.5所示。图5.5串行通信数据传送的3种方式单工通信(SimplexCommunication):在任何一个时刻,信号只能从甲方向乙方单向传输,甲方只能发信,乙方只能收信。比如广播电台与收音机、电视台与电视机的通信(点到多点)、遥控玩具、航模(点到点)、寻呼系统等均属此类。

半双工通信(HalfDuplexCommunication):在任何一个时刻,信号只能单向传输,或从甲方传向乙方,或从乙方传向甲方,但不能同时双向传送。比如对讲机、收发报机以及问询、检索等之间的通信。

全双工通信(FullDuplexCommunication):在任一时刻,信号能够双向传输,每一方都能同时进行收信与发信。比如普通电话、手机、RS-232C通信接口等。5.2.1串行口组成及相关寄存器

51单片机串行接口主要由串行口数据缓冲器SBUF、串行口控制寄存器SCON、对外接口TXD、RXD及相关控制电路等组成,其内部结构如图5.6所示。串行通信时,不仅与SBUF和SCON寄存器有关,还会涉及到电源控制寄存器PCON、定时器控制寄存器TCON及中断允许寄存器IE等相关寄存器。5.251系列单片机串行通信接口

图5.6串行通信口内部结构框图

1.串行口数据缓冲器SBUF

SBUF是两个在物理上独立的接收、发送寄存器,一个用于存放接收到的数据,另一个用于存放欲发送的数据,可同时发送和接收数据。两个缓冲器共用一个地址99H,通过对SBUF的读、写指令来区别是对接收缓冲器还是发送缓冲器操作。CPU在写SBUF时,就是修改发送缓冲器;读SBUF就是读接收缓冲器的内容。接收或发送数据,是通过串行口对外的两条独立收发信号线RXD(P3.0)、TXD(P3.1)来实现的,因此可以同时发送、接收数据,其工作方式为全双工方式。

2.串行口控制寄存器SCON

串行口控制寄存器SCON用来控制串行口的工作方式和状态,其地址为98H,可进行位寻址。单片机复位时,SCON的所有位全为0。串行口控制寄存器SCON的格式如下:

SM0、SM1:由软件设置,用于选择串行口的工作方式,可以设置4种工作方式(见表5.1,具体内容将在5.2.2节详细介绍)。表5.1串行口的工作方式

SM2:多机通信控制位。在方式2和方式3中,若SM2=1,则接收到的第9位数据(RB8)为0时不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;RB8为1时,才将接收到的前8位数据送入SBUF,并置位RI,产生中断请求。若SM2=0,则不论第9位数据为0或1,都将接收到的前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。

REN:串行接收允许控制位。若REN=0,则禁止接收;若REN=1,则允许接收,该位由软件设置。

TB8:发送数据D8位。在方式2和方式3时,TB8为所要发送的第9位信息。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:若TB8=1,表示主机发送的是地址信息。若TB8=0,表示主机发送的是数据信息;也可用TB8作为数据的奇偶校验位。在通信规约中应明确约定。

RB8:接收数据D8位。在方式2和方式3时,接收到的第9位信息。RB8可作为地址信息或数据信息的标志或奇偶校验位。方式1时,若SM2=0,则RB8为接收到的停止位。在方式0时,不使用RB8位。

TI:发送中断标志位。方式0时,当发送数据第8位结束后,或其他方式发送停止位后,即将一帧数据发送完毕,由内部硬件置位TI,向CPU请求中断。CPU响应中断后,必须用软件把TI清0。此外,TI也可供程序查询。

RI:接收中断标志位。方式0时,当接收数据的第8位结束后,或其他方式接收到停止位,即已完成一帧数据的接收,由内部硬件置位RI,向CPU请求中断。同样,CPU响应中断后,也必须用软件把RI清0。RI也可供程序查询。

3.电源控制寄存器PCON

PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,不可以位寻址,字节地址为87H。在CHMOS的8051单片机中,PCON除了最高位以外,其他位都是虚设的。

电源控制寄存器的格式如下:5.2.2串行口的工作方式

51系列单片机的串行口有4种工作方式,通过SCON中的SM0、SM1位来设置。

1.方式0──同步移位寄存器方式

若SM0SM1=00B,则串行口工作于方式0,这时串行口作同步移位寄存器使用。这种方式常用于扩展I/O端口,一般外接移位寄存器,实现数据串/并转换。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出,其波特率固定为fosc/12。

1)方式0发送

当一个数据写入串行口发送缓冲器SBUF时,串行口将8位数据以fosc/12的波特率从RXD引脚输出(低位在前,高位在后),发送完置中断标志TI为1,请求中断。

再次发送数据之前,必须由软件将TI清0。方式0移位输出电路图如图5.7所示。其中,74LS164为串入并出移位寄存器。图5.7方式0移位输出电路图

2)方式0接收

在满足REN=1和RI=0的条件下,串行口即开始从RXD端以fosc/12的波特率输入数据(低位在前),当接收完8位数据后,置中断标志RI为1,请求中断。再次接收数据之前,必须由软件将RI清0。方式0移位输入电路图如图5.8所示。其中,74LS165为并入串出移位寄存器。图5.8方式0移位输入电路图串行口控制寄存器SCON中的TB8和RB8在方式0中未用。值得注意的是,每当发送或接收完8位数据后,硬件会自动置TI或RI为1,CPU响应发送或接收中断后,

必须由用户用指令将TI或RI清0。方式0时,SM2必须为0。

2.方式1──8位异步串行通信方式

若SM0SM1=01B,则串行口工作于方式1。方式1是波特率可变的10位通用异步串行通信方式。发送或接收一帧信息为10位,其中包括1个起始位0,8个数据位和1个停止位1。其帧格式如图5.9所示。图5.9串行通信10位帧结构

1)方式1发送

当CPU执行一条数据写入发送缓冲器SBUF的指令时,便启动发送器发送。发送时,数据从TXD端输出,当发送完一帧数据后,置中断标志TI为1。方式1所传送的波特率取决于定时器T1的溢出率和PCON中的SMOD位。

2)方式1接收

若REN=1,RI=0时,允许串口接收数据。串行口采样RXD,当采样到由1到0跳变时,确认是起始位“0”,便开始接收一帧信息。方式1接收时,必须同时满足以下两个条件:

(1)RI=0;(2)停止位为1或SM2=0。

则接收到的一帧信息有效,一帧信息中的8位数据送入接收缓冲器SBUF,停止位送入串行口控制寄存器SCON的RB8位,同时置中断标志RI为1;若不满足上述两个条件,则信息将丢失(无效)。所以,方式1接收时,应先用指令清除RI,并设置SM2=0。

3.方式2──9位异步通信接口

若SM0SM1=10B,则串行口工作于方式2。方式2为波特率固定的11位异步串行通信方式,传送波特率与SMOD有关。发送或接收一帧信息为11位,其中包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验或多机通信)和1位停止位1,其帧格式如图5.10所示。(波特率设置将在5.2.3节介绍)图5.10串行通信11位帧结构

1)方式2发送

发送时,根据通信协议由软件设置TB8,然后用指令将要发送的数据写入SBUF,启动发送器。写SBUF的指令,除了将8位数据送入SBUF外,同时还将TB8装入发送移位寄存器的第9位,并启动发送控制器进行一次发送。一帧信息即从TXD发送出去,在送完一帧信息后,TI被自动置1,在发送下一帧信息之前,TI必须由中断服务程序或查询程序清0。

2)方式2接收

当REN=1时,允许串行口接收数据。数据由RXD端输入,当接收器采样到RXD端的负跳变,并判断起始位有效后,开始接收一帧信息,每帧接收11位信息。方式2接收时,若同时满足以下两个条件:

(1)RI=0;

(2)SM2=0或接收到的第9位数据为1。

则接收数据有效,8位数据送入SBUF,第9位送入RB8,并置RI=1;若不满足上述两个条件,则信息丢弃。

4.方式3──波特率可变的9位异步通信接口

若SM0SM1=11B,串行口工作于方式3,为波特率可变的11位异步串行通信方式。

除了波特率以外,方式3和方式2完全相同。

5.2.3波特率设置

在串行通信中,收发双方对传送的数据速率,即波特率必须事先约定。通过前面的论述,我们已经知道,51单片机的串行口通过编程可以有4种工作方式。其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率是可变的。

1.方式0和方式2的波特率

方式0的波特率是固定的,波特率是振荡频率fosc的12分频。即

波特率B=

(5.1)

方式2的波特率由振荡频率fosc和SMOD(PCON.7)所决定,其对应公式为

波特率B=fosc×

(5.2)

当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为fosc/32。

2.方式1和方式3的波特率

方式1和方式3的波特率由定时器T1的溢出率和SMOD决定,即由下式确定:

波特率B=定时器T1的溢出率×

实际上,当定时器T1作波特率发生器使用时,通常是工作在方式2,即自动重装载的8位定时器方式,此时TL1作计数用,自动重装载的值保存在TH1内。设计数的预置值(计数初值)为X,那么每过(256-X)个机器周期,定时器溢出一次。为了避免因溢出而产生不必要的中断,此时应禁止T1中断。T1的溢出率为fosc/(12×(256-X)),其波特率为

波特率B=

(5.3)通常在系统设计时,大多数情况是先确定了系统的波特率B,而我们则要根据系统的波特率B计算定时器T1的计数初值,由式(5.3)可求出计数初值X为

X=256-

(5.4)由式(5.4)可求出不同波特率所对应的定时器T1的计数初值,如表5.2所示。表5.2定时器T1产生的常用波特率(fosc=6MHz)

例如,设串行通信口工作于方式1,波特率B=9.6Kb/s,SMOD=1,fosc

=6MHz,求T1的初值X。

只要将以上值代入式(5.4)即可求得X=252.75≈253=FDH。其中,253-252.75=0.25就是初值误差,会引起波特率误差。实际应用时,若误差影响到通信效果,则可通过

精选晶振频率来减小误差。

3.波特率误差及选择

波特率是串行通信中的一个重要参数,理想情况下,通信双方的波特率应该完全一致,波特率的一致性直接影响数据传输的正确性。但在实际情况下,由于时钟振荡频率、系统参数设置等不会完全一致,因此通信双方的波特率也就不可能达到完全一致。

一般情况下,对于11位的串行数据帧(带奇偶校验位),通信双方波特率的最大误差不应超过4.5%。由波特率的计算方法可知,当系统时钟为6MHz时,通信口采用方式1要产生的波特率为B=4800b/s,定时器T1为方式2,SMOD=0,此时T1的初值X为

X=28

≈252.75

由于X必须是整数,四舍五入后初值取X=253(FDH),实际的波特率为

B=

≈5208b/s波特率误差为

ΔB=

当用6MHz晶振设定1200b/s的波特率时,其误差仅为0.1%。而使用11.059MHz晶振时,设定各标准波特率误差都很小。这也是在系统设计时,对于要和其他系统(设备)通信的单片机应用系统,选用晶体振荡器时要考虑的一个重要因素。

在51系列单片机之间进行串行通信时,若各单片机的晶振和定时常数相同,尽管实际波特率可能与设定值有一定误差,但通信双方之间的误差很小。这只是由于晶振频率误

差引起的,并不影响正常通信。当单片机之间的晶振频率和定时常数不同或单片机与其他设备(DSP处理器、PC机等)之间进行串行通信时,就必须考虑波特率误差问题了。为了满足通信波特率的要求,可能要选用特殊晶振频率,或者采用非标准波特率。表5.3列出了使用6MHz晶振时,误差较小的波特率。表5.3供选择的部分非标准波特率(SMOD=0)

4.波特率的自动检测

在分布式多波特率通信系统中,常常要求从设备在软件上能做到波特率随主设备自动调整,使系统适应性更强,智能化程度更高。当然,一般情况下,波特率自动检测的范围仅限于标准波特率。常用实现波特率自动检测的方法有3种:

(1)从设备启动通信程序后,逐一选择标准波特率,向主设备发送某个事先约定的握手代码,直到收到主设备发回的确认码,即可判定通信波特率。

(2)利用串行异步通信每一帧起始位为低电平、停止位为高电平,用定时器记录每帧长度,从而判定系统通信波特率。

(3)利用主设备发送某一特殊码型,从设备收到的码值会随主设备的波特率不同而不同,当从机收到约定的特殊码型时,便可确认系统的通信波特率。5.2.4多机通信

51系列单片机的多机通信通常采用主从式多机通信方式。在主从式多机系统中,有一台主机,多台从机,利用这种方式可以构成各种分布式控制系统,其系统结构如图5.11所示。其中,n个从机各有惟一的一个地址码,地址码是识别从机身份的标志。主机发出的信息可以传送到各个从机或传送到某个指定的从机,而从机发出的信息只能被主机接收。图5.11主从式多机通信系统多机通信中,要保证主机与从机间进行可靠的通信,通信接口必须具有从机身份的识别功能。串行口控制寄存器SCON中的SM2位就是为满足这一要求而设置的多机通信控制位。串行口以方式2或方式3实现多机通信,主机发出的信息有两类,一类为地址信息,用来确定需要和主机通信的从机,其特征是主机串行传送的第9位信息TB8为1,即主机令TB8=1呼叫从机;另一类是数据信息,特征是串行传送的第9位信息TB8为0,实现主从间的数据传输。对从机来说,也要利用SCON寄存器中的SM2位的控制功能来区分地址信息和数据信息。在接收时,令RI=0,若SM2为1,则仅当接收到的第9位信息RB8为1时,接收到的一帧信息才有效,接收到的数据才装入SBUF,置位RI,请求CPU对主机发出的信息进行处理。若SM2为1,接收到的第9位信息RB8为0时,则接收到的一帧信息无效。若从机令SM2为0,则接收到一个数据后,不管第9位信息RB8是0还是1,都将数据装入接收缓冲器SBUF,并置位中断标志RI,请求CPU处理。因此,对于从机来说,在接收地址时,应使SM2=1,以便接收到主机发来的地址码,从而确定主机是否打算和从机通信。一经确认后,从机应使SM2=0,以便接收数据或识别下一个地址码。主从式多机通信的一般过程如下:

(1)使所有从机的SM2位置1(此时,所有的从机处于监听状态),以便接收主机发来的地址码。

(2)主机发出一帧地址信息,其中包括8位需要与之通信的从机地址码,第9位信息TB8为1。

(3)所有从机接收到地址帧后,各自将所接收到的地址与本机地址相比较,若与本机地址相同,则该从机便使SM2位清0以接收主机随后发来的数据信息;对于地址不符合的从机,仍保持SM2=1的状态(仍处于监听状态),对主机随后发来的数据不予理睬,直至主机发送一个新的地址帧。

(4)主机给已被寻址的从机发送控制指令和数据(数据帧的第9位为0)。前面介绍了串行通信口的基础知识,为了读者对串行通信口应用有一个全面了解,在此对串行通信口的应用过程中要做的工作进行简要归纳。

5.3串行口应用实例

(1)确定通信规约,通信双方要明确约定以下内容:

通信方式——明确采用何种通信方式、帧结构、各位含义等。

通信速率——通常规定通信波特率。

校验方式——确定传输数据的校验方式。通常采用奇/偶校验,同步传输时有纵校验、横校验等。

回送信息——传输信息被确认后,向对方回送何种信

代码含义——传输1帧数据中各个代码的含义。

(2)确定相关器寄存器的值(各寄存器的具体设定方法在前面已作了详细介绍)。

①串行口控制寄存器SCON。

②电源控制寄存器PCON的PCON.7,波特率加倍系数位SMOD。

③对于方式1、方式3要设置波特率,实际上就是设置定时器T1为方式2,相关的寄存器有:定时器/计数器方式寄存器TMOD、定时器/计数器控制寄存器TCON及初值寄存器TH1、TL1。定时器T1初值X可用式(5.4)计算。

(3)编写程序,按照以上确定的各寄存器的值对串行口初始化。并编写中断服务程序。5.3.1利用串行口扩展LED显示器

单片机中并行口总是有限的,根据需要可用串行口扩展并行口。在此,利用串行口扩展一个8位LED显示器,硬件电路如图5.12所示。图中串行口工作在方式0,串行数据从RXD(P3.0)端输出。74LS164是一个串行输入并行输出的8位移位寄存器,其引脚1和2是串行数据输入端;引脚3~6和10~13是并行数据的输出端,每个74LS164的输出端Q7~Q0各驱动一个共阴极LED显示器;CLR是74LS164的清0端,

由P1.6提供清0信号,当CLR为0时,Q7~Q0输出为0,8个LED显示空白字符;同步移位脉冲由TXD(P3.1)送出,P1.7=1时允许74LS164串行接收数据,其波特率固定为fosc/12。图5.12扩展一个8位LED显示器

ORG0000

LJMPSTART

ORG0100

START:MOVSCON,#00H;串行口工作在方式0

MOVR7,#08H ;R7为计数器,显示8个字符MOVR0,#77H ;R0指向DISBUF的末地址

LCALLDISP ;调用显示子程序DISP:CLRP1.6 ;清显示器 SETBP1.6 SETBP1.7;允许74LS164串行接收数据

DISP1:MOVA,@R0;取显示字符

MOVDPTR,#TABL

MOVCA,@A+DPTR;查表获得显示码

MOVSBUF,A ;串行发送DISP2:JNBTI,DISP2;等待发送完毕

CLRTI ;发送完毕则清中断标志

DECR0 ;R0指向下一字符

DJNZR7,DISP1

CLRP1.7 ;禁止74LS164接收数据

RET

TABL:DB3FH,06H,5BH,4FH,66H,6DH,7DH,

07H;0~F的显示码

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H5.3.2利用串行口输入开关量

用AT89C51的串行口外接74LS165移位寄存器扩展8位开关量输入端口,输入数据由8个开关S7~S0提供,电路如图5.13所示。74LS165是8位并入/串入移位寄存器,当控制端SHIFT/LOAD为0时,165并行装入S0~S7提供的数据;当SHIFT/LOAD为1时,在时钟CK的作用下H~A依次由QH端移位输出。CP为时钟禁止控制端,高电平禁止,DS为数据串输入端,在此未用。图5.13用串行口输入开关量当CPU需要输入S7~S0提供的数据时,将串行口设置为方式0(SM0SM1=00B)启动串行口,串行输入8位开关量,然后根据开关S7~S0的功能转向不同的处理程序,参考程序如下:

START:;必要时启动串行口

CLRP1.0;SHIFT/LOAD=0,74LS165并行装入

;数据S0~S7

STEBP1.0 ;SHIFT/LOAD=1,允许74LS165串行

;移位

MOVSCON,#10H;设置串行口方式0,REN=1允

;许接收

JNBRI,$ ;查询RI

CLRRI ;查询结束,清RI

MOVA,SBUF ;输入数据

;S7~S0的功能处理程序

JBACC.0,KEY0 ;转向S0的处理程序

JBACC.1,KEY1;转向S1的处理程序

5.3.3双机通信系统

利用串行口可以实现两台机器间的全双工通信。如图5.14所示,设甲乙两台机器按全双工方式收发ASCII码字符,数据位为8位,其中最高一位用来作奇偶校验位,采用偶校验方式,要求传送的波特率为1200b/s。假设发送缓冲区OUTBUF首址为片内RAM60H,接收缓冲区INBUF首址为RAM70H,时钟频率fosc=6MHz,试编写有关的通信程序。图5.14双机通信系统

1.确定通信方式

根据系统要求,通信双方要相互约定:7位ASCII码加1位校验位共8位数据,故可采用串行口方式1进行通信。51单片机的奇偶校验位P是当累加器A中“1”的个数为奇数时P=1,为偶数时P=0。直接把P的值放入ASCII码的最高位(奇偶校验位),即为偶校验方式。

2.计算定时器T1的计数初值

对于串行口方式1,波特率由定时器T1的溢出率和SMOD决定,定时器T1采用工作方式2,可以避免计数溢出后用软件重装定时初值。取SMOD=0,按式(5.4)可求得

计数初值X为

X=256-

=256-

=243

=F3H

也可以通过查表5.2确定X=F3H。

3.确定相关寄存器参数

(1)串行口控制寄存器SCON。

SM0、SM1=01时为方式1,在SM2=0和REN=1条件下,允许接收数据,其余各位均取0,则SCON)=01010000B=50H。

(2)电源控制寄存器PCON。由于SMOD=0,因此(PCON)=00H(同系统复位以后的状态,可不赋值)。

(3)确定定时器方式寄存器TMOD。由于只用T1,且为定时方式2,因此(TMOD)=

00100000B=20H。

请注意:串行通信端口的接收中断RI、发送中断TI共用一个中断向量(0023H),因此,串行口中断请求后,中断服务程序首先要判断是RI、TI当中的哪个请求中断。

4.编写有关的通信程序

主程序:ORG0000H

LJMPMAIN

ORG0023H;串行中断入口

LJMPSINOUT

ORG0040HMAIN:MOVTMOD,#20H;定时器T1设为方式2

MOVTL1,#0F3H;装入定时器初值

MOVTH1,#0F3H;8位重装值

SETBTR1;启动定时器T1

MOVSCON,#50H;串行口设为方

MOVR0,#60H;OUTBUF首址

MOVR1,#70H;INBUF首址

SETBEA;开中断

SETBES;允许串行口中断

LCALLSOUT;先发送1个字符

LJMP$;等待中断

;中断服务程序

SINOUT:JNBRI,SEND;若不是接收,则转向发送

LCALLSIN;若是接收,则调用接收子程序RETI;中断返回

SEND:LCALLSOUT;若是发送,则调用发送子程序RETI;中断返回

;发送子程序SOUT:MOVA,@R0;取发送数据到A

MOVC,P;偶校验位赋予C

MOVACC.7,C;送入ASCII码最高位中

INCR0;修改发送数据指针

MOVSBUF,A;发送数据

CLRTI;清发送中断标志

RET;子程序返回

;接收子程序SIN:MOVA,SUBF;读入接收缓冲区内容

JNBP,EXIT;若P=0,则接收正确

ERROR:…

;若P=1,则接收错误

;出错处理

EXIT:ANLA,#7FH;删去校验位

MOV@R1,A;存入接收缓冲区

INCR1;修改接收缓冲区指针

CLRRI;清接收中断标志

RET;子程序返回对图5.14所示的系统也可以用方式2实现两台机器间的全双工通信。在方式2下,串行口为9位UART,发送或接收一帧数据包括1位起始位0,8位数据位,1位可编程位(TB8)和1位停止位1。此时,可编程位TB8用于奇偶校验位,发送子程序直接把PSW中的P标志送入串行口控制寄存器SCON的TB8位,作为一帧信息的第9位数据一起发送,接收子程序对接收到的RB8进行再次校验,若接收错误,则进行出错处理。方式2的编程方法与上述过程相似,主程序完成对相关寄存器和中断系统的初始化后,先调用发送子程序,发完一帧信息后TI被置1,向CPU请求中断,CPU响应中断后再发送下一帧信息或接收一帧信息。请读者完成主程序的编写,下面给出的发送子程序和接收子程序仅供参考:

;发送子程序

SOUT2:PUSH PSW

PUSH ACC

CLR TI ;清发送中断标志

MOV A,@R0;取发送数据

MOV C,PMOV TB8,C ;标志P送入TB8位

MOV SBUF,A ;发送数据

INC R0 ;修改发送数据指针R0

POP ACC

POP PSW

RET ;子程序返回

;接收子程序SIN2: PUSH PSW

PUSH ACC

CLR RI;清接收中断标志

MOV A,SBUF;读入接收缓冲区内容

MOV C,P ;取奇偶校验位

JNC S1;P为0,偶校验正确

JNB RB8,ERROR;若两次校验位不一致,则

;出错

LJMP S2S1:JBRB8,ERROR;若双方的校验位不一致,则出错

S2:MOV@R1,A ;存入接收缓冲区

INC R1 ;修改接收缓冲区指针R1

POP ACC

POP PSW

RET ;子程序返回

;误码处理子程序

ERROR:…

;出错处理

RET 5.3.4电流环在通信系统中的应用

在串行通信中,一般用传输线上的高低电平表示“1”和“0”,用TTL电平进行通信时,有效通信距离短,往往满足不了工程中的实际需求。工程应用中,为了实现远距离通信,或连接干扰较大的设备,常常采用20mA的电流环进行串行通信。图5.15给出了用20mA的电流环进行远距离通信的接口电路。图中,甲方发送数据,经SN75452进行功率放大送往接收方的光电隔离器4N25进行光电隔离转换。当发送端数据为“1”时,SN75452导通,传输线上约有20mA的电流流过,光电隔离器4N25中的发光管发光,光敏三极管导通,使得7404输入为低电平,反相后RXD接收端数据为“1”;当发送端数据为“0”时,SN75452截止,传输线上无电流流过,光电隔离器4N25中的发光管不发光,使得7404输入为高电平,反相后RXD接收端数据为“0”。图5.15用电流环进行远距离通信图5.15电路中,利用传输线上有无电流流过表示“1”和“0”,20mA电流环传输线的低阻特性使其对电气噪声不敏感,信号不易受干扰,不但提高了系统的抗干扰能力,而且能实现远距离通信,是控制系统中常用的电路形式。若对图5.15中的电路进行适当的扩展便可实现甲乙双方的双向通信。需要注意的是,电流环电路在信号传输过程中,信号要进行电压→电流→光→电压的一连串物理量的转换。这些转换是需要时间的,因此,在电流环电路中,一般数据的传输速率不宜过高。5.4.1RS-232C总线

RS-232C标准是美国电子工业协会(EIA)在1969年颁布的一种推荐标准,RS是RecommendedStandard的缩写。RS-232C总线的诞生是人们普遍采用公用电话网为媒体进行数据通信的结果,也是调制解调器商品化的产物。5.4RS-232C串行总线及应用

RS-232C总线是一种DTE和DCE间的信号传输线,DTE(DataTerminalEquipment)是数据终端设备的简称,

DCE(DataCommunicationEquipment)是数据通信设备的简称。RS-232C在当代微型计算机系统中得到了广泛使用。PC机通过25线或9线的D型连接器实现主机与RS-232C的连接,连接器的引脚定义如图5.16所示。图5.16DB-25/DB-9连接器

RS-232C的标准定义为25条信号线,引脚定义见表5.4。每条引脚在“符号”一栏中按第一个字母分为5类:A表示地线或公共回线;B表示数据线;C表示控制线;

D表示定时线;S表示次级信道线。

RS-232C的25条信号引脚功能如下。表5.4RS-232C各信号引脚定义

1.本地通信线(6条)

AA和AB:AA为保护地线,常与机壳相连,以构成屏蔽地;AB为信号地线,是除保护地外其他信号线的测量基准点。

BA和BB:BA为发送数据线TXD,数据由DTE发送DCE接收;BB为接收数据线RXD,信号由DCE发送DTE接收。平时,TXD线始终保持逻辑1(传号)状态,只有在发送数

据时才有可能变为逻辑0(空号)状态。RXD线在不发送数据的全部时间里以及发送数据的间隔期内,也始终保持逻辑1(传号)状态。

CA和CB:CA为请求发送线RTS,由DTE发送DCE接收;CB为允许发送线CTS,由DCE发送DTE接收。这一对线主要用于DTE询问DCE对信道的连接状况。当DTE需要发送数据时,它就使RTS变为逻辑1有效,用于请求DCE去接通通信链路。一旦DCE和通信链路接通,DCE就使CTS变为逻辑1有效,通知DTE可以在TXD线上发送数据了。

上述6条线通常可以实现本地微型计算机系统间的串行通信,故常称之为本地通信线。这类通信的距离短,DCE可以采用零调制解调器或一般的Modem,不需另附数据通信设备。

2.远程通信线(7条)

CD:为数据终端就绪线DTR。DTR由DTE发出DCE接收,用于表示数据终端(DTE)的状态。若DTR=1,则表示DTE准备就绪;若DTR=0,表示DTE尚未准备就绪。通常,

DTE在加电启动后就准备就绪了。

CC:为数据装置就绪线DSR,由DCE发出DTE接收,是DTE的应答线,用于表示DCE中数据装置的状态。若DSR=1,则表示DCE的数据设备已准备好(如自动呼叫成功),但DCE是否和信道接通应由CTS指示;若DSR=0,则表示DCE中数据装置尚未准备好。

CE:为振铃指示器线RI,由DCE发出DTE接收,用于表示通信的另一方有无振铃。若RI=1,则表示DCE正在接收对方DCE发来的振铃信号。RI在DCE没有收到振铃信号的所有其他时间内都维持在逻辑0电平状态。

CF:为数据载波检测线DCD,又称为接收线路信号检测线。DCD信号由DCE发出DTE接收。当本地DCE正接收来自远程的DCE载波信号时,DCE变为逻辑1。在调制解调器中,DCD常接到标有载波(Carrier)的发光二极管指示器上。

DA/DB:在同步通信方式必须使用的两条线,但两个信号不能同时使用,只能使用其中一个。DA是DTE为源的发送信号码元定时线,该信号是由DTE产生的同步时钟,用于使Modem能和DTE同步地发送数据;DB是DCE为源的发送信号码元定时线,同步时钟由DCE产生,用于使Modem和DTE同步发送数据。

DD:接收信号的码元定时线,该信号由DCE产生,用作同步接收时钟,接收时必须把此信号从解调器发送给DTE。以上7条通信线配合6条本地通信线,常在以公用电话网为媒体的远程通信中使用,以协调DTE和DCE间的数据传输。应当指出:在以公用电话网为媒体的远程通信中,TXD线上发送数据的条件是RTS、CTS、DTR和DSR皆应为逻辑1有效状态,但在没有专用数据装置的本地通信中DTR和DSR两条线是可以不用的。

3.其他引线(12条)

这些引线的定义和名称已在表5.3中列出。其中,5条留作用户定义,其余7条在大多数微型计算机系统中都空出不用,故在此从略。5.4.2RS-232C在工程中的应用

为了提高数据通信的可靠性和抗干扰能力,RS-232C标准中规定,发送端信号逻辑“0”(空号)电平范围为+5~+15V,逻辑“1”(传号)电平范围为-5~-15V;接收端逻辑“0”为+3~+15V,逻辑“1”为-3~-15V。噪声容限为2V。-5~+5V以及-3~+3V之间分别为发送端和接收端点信号的不确定区。通常,RS-232C总线逻辑电平采用+12V表示“0”,-12V表示“1”。为了实现上述电平转换,RS-232C可采用运算放大器、晶体管和光电隔离器电路来完成电平转换,或采用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论