《串行通信基础》PPT课件.ppt

上传人:小飞机 文档编号:5457026 上传时间:2023-07-09 格式:PPT 页数:100 大小:254KB
返回 下载 相关 举报
《串行通信基础》PPT课件.ppt_第1页
第1页 / 共100页
《串行通信基础》PPT课件.ppt_第2页
第2页 / 共100页
《串行通信基础》PPT课件.ppt_第3页
第3页 / 共100页
《串行通信基础》PPT课件.ppt_第4页
第4页 / 共100页
《串行通信基础》PPT课件.ppt_第5页
第5页 / 共100页
点击查看更多>>
资源描述

《《串行通信基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《串行通信基础》PPT课件.ppt(100页珍藏版)》请在三一办公上搜索。

1、8.1 串行通信基础 8.2 串行通信总线标准及其接口 8.3 MCS-51的串行接口 8.4 MCS-51单片机之间的通信 8.5 PC机和单片机之间的通信,返回主目录,第8章 串行口通信技术,8.1 串行通信基础,在计算机系统中,CPU和外部通信有两种通信方式:并行通信和串行通信。并行通信,即数据的各位同时传送;串行通信,即数据一位一位顺序传送。图8.2为这两种通信方式的示意图。,图8.2 两种通信方式的示意图(a)并行通信;(b)串行通信,8.1.1 串行通信的分类 按照串行数据的时钟控制方式,串行通信可分为同步通信和异步通信两类。1.异步通信(Asynchronous Communic

2、ation)在异步通信中,数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,每一帧数据均是低位在前,高位在后,通过传输线被接收端一帧一帧地接收。发送端和接收端可以由各自独立的时钟来控制数据的发送和接收,这两个时钟彼此独立,互不同步。在异步通信中,接收端是依靠字符帧格式来判断发送端是何时开始发送,何时结束发送的。字符帧格式是异步通信的一个重要指标。,1)字符帧(Character Frame)字符帧也叫数据帧,由起始位、数据位、奇偶校验位和停止位等4部分组成,如图8.3所示。,图8.3 异步通信的字符帧格式(a)无空闲位字符帧;(b)有空闲位字符帧,(1)起始位:位于字符帧开

3、头,只占一位,为逻辑0低电平,用于向接收设备表示发送端开始发送一帧信息。(2)数据位:紧跟起始位之后,用户根据情况可取5位、6位、7位或8位,低位在前高位在后。(3)奇偶校验位:位于数据位之后,仅占一位,用来表征串行通信中采用奇校验还是偶校验,由用户决定。(4)停止位:位于字符帧最后,为逻辑1高电平。通常可取1位、1.5位或2位,用于向接收端表示一帧字符信息已经发送完,也为发送下一帧作准备。,在串行通信中,两相邻字符帧之间可以没有空闲位,也可以有若干空闲位,这由用户来决定。图8.3(b)表示有3个空闲位的字符帧格式。2)波特率(baud rate)异步通信的另一个重要指标为波特率。波特率为每秒

4、钟传送二进制数码的位数,也叫比特数,单位为b/s,即位/秒。波特率用于表征数据传输的速度,波特率越高,数据传输速度越快。但波特率和字符的实际传输速率不同,字符的实际传输速率是每秒内所传字符帧的帧数,和字符帧格式有关。通常,异步通信的波特率为509600 b/s。,异步通信的优点是不需要传送同步时钟,字符帧长度不受限制,故设备简单。缺点是字符帧中因包含起始位和停止位而降低了有效数据的传输速率。2.同步通信(Synchronous Communication)同步通信是一种连续串行传送数据的通信方式,一次通信只传输一帧信息。这里的信息帧和异步通信的字符帧不同,通常有若干个数据字符,如图8.4所示。

5、图8.4(a)为单同步字符帧结构,图8.4(b)为双同步字符帧结构,但它们均由同步字符、数据字符和校验字符CRC三部分组成。在同步通信中,同步字符可以采用统一的标准格式,也可以由用户约定。,图8.4 同步通信的字符帧格式(a)单同步字符帧格式;(b)双同步字符帧格式,8.1.2 串行通信的制式 在串行通信中数据是在两个站之间进行传送的,按照数据传送方向,串行通信可分为单工(simplex)、半双工(half duplex)和全双工(full duplex)三种制式。图8.5为三种制式的示意图。在单工制式下,通信线的一端接发送器,一端接接收器,数据只能按照一个固定的方向传送,如图8.5(a)所示

6、。在半双工制式下,系统的每个通信设备都由一个发送器和一个接收器组成,如图8.5(b)所示。,图8.5 单工、半双工和全双工三种制式示意图,在这种制式下,数据能从A站传送到B站,也可以从B站传送到A站,但是不能同时在两个方向上传送,即只能一端发送,一端接收。其收/发开关一般是由软件控制的电子开关。全双工通信系统的每端都有发送器和接收器,可以同时发送和接收,即数据可以在两个方向上同时传送,如图8.5(c)所示。在实际应用中,尽管多数串行通信接口电路具有全双工功能,但一般情况下,只工作于半双工制式下,这种用法简单、实用。,8.1.3 串行通信的接口电路 串行接口电路的种类和型号很多。能够完成异步通信

7、的硬件电路称为UART,即通用异步接收器/发送器(Universal Asychronous Receiver/Transmitter);能够完成同步通信的硬件电路称为USRT(Universal Sychronous Receiver/Transmitter);既能够完成异步又能同步通信的硬件电路称为USART(Universal Sychronous Asychronous Receiver/Transmitter);从本质上说,所有的串行接口电路都是以并行数据形式与CPU接口,以串行数据形式与外部逻辑接口。它们的基本功能都是从外部逻辑接收串行数据,转换成并行数据后传送给CPU,或从CPU

8、接收并行数据,转换成串行数据后输出到外部逻辑。,8.2 串行通信总线标准及其接口,8.2.1 RS-232C接口 RS-232C是使用最早、应用最多的一种异步串行通信总线标准。它是美国电子工业协会(EIA)1962年公布,1969年最后修定而成的。其中,RS表示Recommended Standard,232是该标准的标识号,C表示最后一次修定。RS-232C主要用来定义计算机系统的一些数据终端设备(DTE)和数据电路终接设备(DCE)之间的电气性能。,例如CRT、打印机与CPU的通信大都采用RS-232C接口,MCS-51单片机与PC机的通信也是采用该种类型的接口。由于MCS-51系列单片机

9、本身有一个全双工的串行接口,因此该系列单片机用RS-232C串行接口总线非常方便。RS-232C串行接口总线适用于:设备之间的通信距离不大于15 m,传输速率最大为20 kb/s。1.RS-232C信息格式标准 RS-232C采用串行格式,如图8.6所示。该标准规定:信息的开始为起始位,信息的结束为停止位;信息本身可以是5、6、7、8位再加一位奇偶校验位。如果两个信息之间无信息,则写“1”,表示空。,图8.6 RS-232C信息格式,2.RS-232C电平转换器 RS-232C规定了自己的电气标准,由于它是在TTL电路之前研制的,所以它的电平不是+5 V和地,而是采用负逻辑,即逻辑“0”:+5

10、 V+15 V;逻辑“1”:-5 V-15 V。因此,RS-232C不能和TTL电平直接相连,使用时必须进行电平转换,否则将使TTL电路烧坏,实际应用时必须注意!常用的电平转换集成电路是传输线驱动器MC1488和传输线接收器MC1489。MC1488内部有三个与非门和一个反相器,供电电压为12 V,输入为TTL电平,输出为RS-232C电平。MC1489内部有4个反相器,供电电压为5 V,输入为RS-232C电平,输出为TTL电平。,图8.7 MAX232引脚图,另一种常用的电平转换电路是MAX232。图8.7为MAX232的引脚图。,图8.8 RS-232C引脚图,3.RS-232C总线规定

11、 RS-232C标准总线为25根,采用标准的D型25芯插头座。各引脚的排列如图8.8所示。,在最简单的全双工系统中,仅用发送数据、接收数据和信号地三根线即可。对于MCS-51单片机,利用其RXD(串行数据接收端)线、TXD(串行数据发送端)线和一根地线,就可以构成符合RS-232C接口标准的全双工通信口。,8.2.2 RS-449、RS-422A、RS-423A标准接口 RS-232C虽然应用广泛,但因为推出较早,在现代通信系统中存在以下缺点:数据传输速率慢,传输距离短,未规定标准的连接器,接口处各信号间易产生串扰。鉴于此,EIA制定了新的标准RS-449,该标准除了与RS-232C兼容外,在

12、提高传输速率,增加传输距离,改善电气性能等方面有了很大改进。1.RS-449标准接口 RS-449是1977年公布的标准接口,在很多方面可以代替RS-232C使用。,RS-449与RS-232C的主要差别在于信号在导线上的传输方法不同:RS-232C是利用传输信号与公共地的电压差,RS-449是利用信号导线之间的信号电压差,在1219.2 m的24-AWG双铰线上进行数字通信。RS-449规定了两种接口标准连接器,一种为37脚,一种为9脚。RS-449可以不使用调制解调器,它比RS-232C传输速率高,通信距离长,且由于RS-449系统用平衡信号差传输高速信号,所以噪声低,又可以多点或者使用公

13、共线通信,故RS-449通信电缆可与多个设备并联。,2.RS-422A、RS-423A标准接口 RS-422A文本给出了RS-449中对于通信电缆、驱动器和接收器的要求,规定双端电气接口形式,其标准是双端线传送信号。它具体通过传输线驱动器,将逻辑电平变换成电位差,完成发送端的信息传递;通过传输线接收器,把电位差变换成逻辑电平,完成接收端的信息接收。RS-422A比RS-232C传输距离长、速度快,传输速率最大可达10 Mb/s,在此速率下,电缆的允许长度为12 m,如果采用低速率传输,最大距离可达1200 m。RS-422A和TTL进行电平转换最常用的芯片是传输线驱动器SN75174和传输线接

14、收器SN75175,这两种芯片的设计都符合EIA标准RS-422A,均采用+5 V电源供电。,RS-422A的接口电路如图8.9所示,发送器SN75174将TTL电平转换为标准的RS-422A电平;接收器SN75175将RS-422A接口信号转换为TTL电平。RS-423A和RS-422A文本一样,也给出了RS-449中对于通信电缆、驱动器和接收器的要求。RS-423A给出了不平衡信号差的规定,而RS-422A给出的是平衡信号差的规定。RS-422标准接口的最大传输速率为100 kb/s,电缆的允许长度为90m。,图8.9 RS-422A接口电平转换电路,图8.10 RS-423A接口电平转换

15、电路,RS-423A也需要进行电平转换,常用的驱动器和接收器为3691和26L32。其接口电路如图8.10所示。,8.2.3 20 mA电流环路串行接口 20 mA电流环是目前串行通信中广泛使用的一种接口电路。电流环串行通信接口的最大优点是低阻传输线对电气噪声不敏感,而且易实现光电隔离,因此在长距离通信时要比RS-232C优越得多。图8.11是一个实用的20 mA电流环接口电路。它是一个加上光电隔离的电流环传送和接收电路。在发送端,将TTL电平转换为环路电流信号,在接收端又转换成TTL电平。,图8.11 20 mA电流环接口电路,(1)通信速度和通信距离。通常的标准串行接口,都要满足可靠传输时

16、的最大通信速度和传送距离指标,但这两个指标具有相关性,适当降低传输速度,可以提高通信距离,反之亦然。例如,采用RS-232C标准进行单向数据传输时,最大的传输速度为20 kb/s,最大的传输距离为15 m。而采用RS-422A标准时,最大的传输速度可达10 Mb/s,最大的传输距离为300 m,适当降低传输速度,传输距离可达1200 m。,(2)抗干扰能力。通常选择的标准接口,在保证不超过其使用范围时都有一定的抗干扰能力,以保证可靠的信号传输。但在一些工业测控系统中,通信环境十分恶劣,因此在通信介质选择、接口标准选择时,要充分考虑抗干扰能力,并采取必要的抗干扰措施。例如在长距离传输时,使用RS

17、-422A标准,能有效地抑制共模信号干扰;使用20mA电流环技术,能大大降低对噪声的敏感程度。在高噪声污染的环境中,通过使用光纤介质可减少噪声的干扰,通过光电隔离可以提高通信系统的安全性。,8.3 MCS-51的串行接口,8.3.1 MCS-51串行口结构 MCS-51内部有两个独立的接收、发送缓冲器SBUF。SBUF属于特殊功能寄存器。发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入,二者共用一个字节地址(99H)。串行口的结构如图8.12所示。,图8.12 串行口结构示意图,在实训8中,甲机发送数据时,是由一条写发送缓冲器的指令(MOV SBUF,A)把数据写入串行口的发送缓冲器SB

18、UF中,然后从TXD端一位一位地向外部发送。同时,接收端RXD也可以一位一位地接收外部数据,当收到一个完整的数据后通知CPU,再由一条指令(MOV A,SBUF)把接收缓冲器SBUF的数据读入累加器。实训中乙机的接收就是通过该条指令完成的。与MCS-51串行口有关的特殊功能寄存器有SBUF、SCON、PCON,下面对它们分别做以详细讨论。,1.串行口数据缓冲器SBUF SBUF是两个在物理上独立的接收、发送寄存器,一个用于存放接收到的数据,另一个用于存放欲发送的数据,可同时发送和接收数据。两个缓冲器共用一个地址99H,通过对SBUF的读、写指令来区别是对接收缓冲器还是发送缓冲器进行操作。CPU

19、在写SBUF时,就是修改发送缓冲器;读SBUF,就是读接收缓冲器的内容。接收或发送数据,是通过串行口对外的两条独立收发信号线RXD(P3.0)、TXD(P3.1)来实现的,因此可以同时发送、接收数据,其工作方式为全双工制式。,2.串行口控制寄存器SCON 实训中,收发双方都有对SCON的编程,SCON用来控制串行口的工作方式和状态,可以位寻址,字节地址为98H。单片机复位时,所有位全为0。SCON的格式如图8.13所示。,图8.13 SCON的各位定义,对各位的说明如下:SM0、SM1:串行方式选择位,其定义如表8.1所示。SM2:多机通信控制位,用于方式2和方式3中。在方式2和方式3处于接收

20、方式时,若SM2=1,且接收到的第9位数据RB8为0时,不激活RI;若SM2=1,且RB8=1时,则置RI=1。在方式2、3处于接收或发送方式时,若SM2=0,不论接收到的第9位RB8为0还是为1,TI、RI都以正常方式被激活。在方式1处于接收时,若SM2=1,则只有收到有效的停止位后,RI置1。在方式0中,SM2应为0。REN:允许串行接收位。它由软件置位或清零。REN=1时,允许接收;REN=0时,禁止接收。在实训8中,由于乙机用于接收数据,因此使用位操作指令SETB REN,允许乙机接收。,TB8:发送数据的第9位。在方式2和方式3中,由软件置位或复位,可做奇偶校验位。在多机通信中,可作

21、为区别地址帧或数据帧的标识位,一般约定地址帧时,TB8为1,数据帧时,TB8为0。RB8:接收数据的第9位。功能同TB8。TI:发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其它方式中,在发送停止位之初由硬件置位。因此,TI是发送完一帧数据的标志,可以用指令JBC TI,rel来查询是否发送结束。实训中采用的就是这种方法。TI=1时,也可向CPU申请中断,响应中断后,必须由软件清除TI。,RI:接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其它方式中,在接收停止位的中间由硬件置位。同TI一样,也可以通过JBC RI,rel来查询是否接收完一帧数据。RI=1时,也可申

22、请中断,响应中断后,必须由软件清除RI。表8.1 串行方式的定义,在实训中,采用指令MOV SCON,#40H,使单片机工作在串行通信的方式1下。3.电源及波特率选择寄存器PCON PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,不可以位寻址,字节地址为87H。在HMOS的8051单片机中,PCON除了最高位以外,其它位都是虚设的。其格式如图8.14所示。,图8.14 PCON的各位定义,8.3.2 MCS-51串行的工作方式 MCS-51的串行口有4种工作方式,通过SCON中的SM1、SM0位来决定,如表8.1所示。1.方式0 在方式0下,串行口作同步移位寄存器用,其波特率固

23、定为fosc/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口。1)发送 当一个数据写入串行口发送缓冲器SBUF时,串行口将8位数据以fosc/12的波特率从RXD引脚输出(低位在前),发送完置中断标志TI为1,请求中断。在再次发送数据之前,必须由软件清TI为0。具体接线图如图8.15所示。其中,74LS164为串入并出移位寄存器。,图8.15 方式0用于扩展I/O口输出,2)接收 在满足REN=1和RI=0的条件下,串行口即开始从RXD端以fosc/12的波特率输入数据(低位在前),当接收完8位数据后,置中断标志RI为1,请求中

24、断。在再次接收数据之前,必须由软件清RI为0。具体接线图如图8.16所示。其中,74LS165为并入串出移位寄存器。串行控制寄存器SCON中的TB8和RB8在方式0中未用。值得注意的是,每当发送或接收完8位数据后,硬件会自动置TI或RI为1,CPU响应TI或RI中断后,必须由用户用软件清0。方式0时,SM2必须为0。,图8.16 方式0用于扩展I/O口输入,2.方式1 实训8中,收发双方都是工作在方式1下,此时,串行口为波特率可调的10位通用异步接口UART。发送或接收一帧信息,包括1位起始位0,8位数据位和1位停止位1。其帧格式如图8.17所示。1)发送 发送时,数据从TXD端输出,当数据写

25、入发送缓冲器SBUF后,启动发送器发送。当发送完一帧数据后,置中断标志TI为1。方式1所传送的波特率取决于定时器1的溢出率和PCON中的SMOD位,,图8.17 10位的帧格式,2)接收 接收时,由REN置1,允许接收,串行口采样RXD,当采样由1到0跳变时,确认是起始位“0”,开始接收一帧数据。当RI=0,且停止位为1或SM2=0时,停止位进入RB8位,同时置中断标志RI;否则信息将丢失。所以,方式1接收时,应先用软件清除RI或SM2标志。3.方式2 方式2下,串行口为11位UART,传送波特率与SMOD有关。发送或接收一帧数据包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验)和1位

26、停止位1。其帧格式如图8.18所示。,图8.18-11位的帧格式,1)发送 发送时,先根据通信协议由软件设置TB8,然后用指令将要发送的数据写入SBUF,启动发送器。写SBUF的指令,除了将8位数据送入SBUF外,同时还将TB8装入发送移位寄存器的第9位,并通知发送控制器进行一次发送。一帧信息即从TXD发送,在送完一帧信息后,TI被自动置1,在发送下一帧信息之前,TI必须由中断服务程序或查询程序清0。,2)接收 当REN=1时,允许串行口接收数据。数据由RXD端输入,接收11位的信息。当接收器采样到RXD端的负跳变,并判断起始位有效后,开始接收一帧信息。当接收器接收到第9位数据后,若同时满足以

27、下两个条件:RI=0和SM2=0或接收到的第9位数据为1,则接收数据有效,8位数据送入SBUF,第9位送入RB8,并置RI=1。若不满足上述两个条件,则信息丢失。4.方式3 方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。,8.3.3 MCS-51串行口的波特率 在串行通信中,收发双方对传送的数据速率,即波特率要有一定的约定。通过8.3.2节的论述,我们已经知道,MCS-51单片机的串行口通过编程可以有4种工作方式。其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可变,由定时器1的溢出率决定,下面加以分析。1.方式0和方式2 在方式0中,波特率为

28、时钟频率的1/12,即fosc/12,固定不变。在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为fosc/32.即波特率=。,2.方式1和方式3 在方式1和方式3下,波特率由定时器1的溢出率和SMOD共同决定。即:方式1和方式3的波特率=定时器1溢出率 其中,定时器1的溢出率取决于单片机定时器1的计数速率和定时器的预置值。计数速率与TMOD寄存器中的C/位有关。当C/=0时,计数速率为fosc/12;当C/=1时,计数速率为外部输入时钟频率。,实际上,当定时器1做波特率发生器使用时,通常是工作在模式2,即自动重装载的8位定时器

29、,此时TL1作计数用,自动重装载的值在TH1内。设计数的预置值(初始值)为X,那么每过256-X个机器周期,定时器溢出一次。为了避免因溢出而产生不必要的中断,此时应禁止T1中断。溢出周期为溢出率为溢出周期的倒数,所以 波特率=,表8.2列出了各种常用的波特率及获得办法。下面我们来分析实训8中的波特率,实训8中波特率编程如下:MOV TMOD,#20H MOV TL1,#0F4H MOV TH1,#0F4H SETB TR1 实训电路板若采用11.059 MHz的晶振,分析TMOD的设置,对照表8.2,可知实训8中串行通信的波特率应为2400 b/s。,表8.2 定时器1产生的常用波特率,8.4

30、 MCS-51单片机之间的通信,8.4.1 双机通信硬件电路 如果两个MCS-51单片机系统距离较近,那么就可以将它们的串行口直接相连,实现双机通信,如图8.19所示。这也是在实训8中采用的电路。为了增加通信距离,减少通道和电源干扰,可以在通信线路上采用光电隔离的方法,利用RS-422A标准进行双机通信,实用的接口电路如图8.20所示。,图8.19 双机异步通信接口电路,图8.20 RS-422A双机异步通信接口电路,发送端的数据由串行口TXD端输出,通过74LS05反向驱动,经光电耦合器送到驱动芯片SN75174的输入端。SN75174将输出的TTL信号转换为符合RS-422A标准的差动信号

31、输出,经传输线(双绞线)将信号送到接收端。接收芯片SN75175将差动信号转换为TTL信号,通过反向后,经光电耦合器到达接收机串行口的接收端。每个通道的接收端都有三个电阻:R1,R2,R3。R1为传输线的匹配电阻,取值在1001 k之间,其它两个电阻是为了解决第一个数据的误码而设置的匹配电阻。值得注意的是,光电耦合器必须使用两组独立的电源,只有这样才能起到隔离、抗干扰的作用。,8.4.2 双机通信软件编程 实训8中,我们完成了两个单片机进行通信的实验,对于双机异步通信的程序通常采用两种方法:查询方式和中断方式。实训8中,发送和接收数据都采用的是查询方法。下面通过程序示例介绍这两种方法。1.查询

32、方式 1)甲机发送 编程将甲机片外1000H101FH单元的数据块从串行口输出。定义方式2发送,TB8为奇偶校验位。发送波特率375 kb/s,晶振为12 MHz,所以SMOD=1。,参考发送子程序如下:MOV SCON,#80H;设置串行口为方式2 MOV PCON,#80H;SMOD=1 MOV DPTR,#1000H;设数据块指针 MOV R7,#20H;设数据块长度START:MOVX A,DPTR;取数据给A MOV C,P MOV TB8,C;奇偶位P送给TB8 MOV SBUF,A;数据送SBUF,启动发送,WAIT:JBC TI,CONT;判断一帧是否发送完。若发送完,清TI,

33、取下一个数据 AJMP WAIT;未完等待 CONT:INC DPTR;更新数据单元 DJNZ R7,START;循环发送至结束 RET,2)乙机接收 编程使乙机接收甲机发送过来的数据块,并存入片内50H6FH单元。接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。在进行双机通信时,两机应采用相同的工作方式和波特率。参考接收子程序如下:MOV SCON,#80H;设置串行口为方式2 MOV PCON,#80H;SMOD=1 MOV R0,#50H;设置数据块指针 MOV R7,#20H;设置数据块长度 SETB REN;启动接收,WAIT:JBC RI,READ;判

34、断是否接收完一帧。若完,清RI,读入数据 AJMP WAIT;未完等待 READ:MOV A,SBUF;读入一帧数据 JNB PSW.0,PZ;奇偶位为0则转 JNB RB8,ERR;P=1,RB8=0,则出错 SJMP RIGHT;二者全为1,则正确 PZ:JB RB8,ERR;P=0,RB8=1,则出错,RIGHT:MOV R0,A;正确,存放数据 INC R0;更新地址指针 DJNZ R7,WAIT;判断数据块是否接收完 CLR PSW.5;接收正确,且接收完清F0标志 RET;返回 ERR:SETB PSW.5;出错,置F0标志为1 RET;返回,在上述查询方式的双机通信中,因为发送双

35、方单片机的串行口均按方式2工作,所以帧格式是11位的,收发双方均是采用奇偶位TB8来进行校验的。传送数据的波特率与定时器无关,所以程序中没有涉及定时器的编程。与实训8的程序做以比较,可以看出,实训中收发双方单片机的串行口均按方式1工作,即10位的帧格式进行通信,没有进行数据的校验。传送数据的波特率与定时器有关,所以实训中的通信程序有对定时器编程的语句。2.中断方式 在很多应用中,双机通信的接收方都采用中断的方式来接收数据,以提高CPU的工作效率;发送方仍然采用查询方式发送。,1)甲机发送 上面的通信程序,收发双方是采用奇偶位TB8来进行校验的,这里介绍一种用累加和进行校验的方法。编程将甲机片内

36、60H6FH单元的数据块从串行口发送,在发送之前将数据块长度发送给乙机,当发送完16个字节后,再发送一个累加校验和。定义双机串行口按方式1工作,晶振为11.059 MHz,波特率为2400 b/s,定时器1按方式2工作。经计算或查表8.2得到定时器预置值为0F4H,SMOD=0。参考发送子程序如下:,MOV TMOD,#20H;设置定时器1为方式2 MOV TL1,#0F4H;设置预置值 MOV TH1,#0F4H SETB TR1;启动定时器1 MOV SCON,#50H;设置串行口为方式1,允许接收START:MOV R0,#60H;设置数据指针 MOV R5,#10H;设置数据长度 MO

37、V R4,#00H;累加校验和初始化 MOV SBUF,R5;发送数据长度,WAIT1:JBC TI,TRS;等待发送 AJMP WAIT1 TRS:MOV A,R0;读取数据 MOV SBUF,A;发送数据 ADD A,R4 MOV R4,A;形成累加和 INC R0;修改数据指针,WAIT2:JBC TI,CONT;等待发送一帧数据 AJMP WAIT2 CONT:DJNZ R5,TRS;判断数据块是否发送完 MOV SBUF,R4;发送累加校验和WAIT3:JBC TI,WAIT4;等待发送 AJMP WAIT3WAIT4:JBC RI,READ;等待乙机回答 AJMP WAIT4,RE

38、AD:MOV A,SBUF;接收乙机数据 JZ RIGHT;00H,发送正确,返回 AJMP START;发送出错,重发 RIGHT:RET 2)乙机接收 乙机接收甲机发送的数据,并存入以2000H开始的片外数据存储器中。首先接收数据长度,接着接收数据,当接收完16个字节后,接收累加和校验码,进行校验。数据传送结束后,根据校验结果向甲机发送一个状态字,00H表示正确,0FFH表示出错,出错则甲机重发。,接收采用中断方式。设置两个标志位(7FH,7EH位)来判断接收到的信息是数据块长度、数据还是累加校验和。参考接收程序如下:ORG 0000H LJMP CSH;转初始化程序 ORG 0023H

39、LJMP INTS;转串行口中断程序 ORG 0100H,CSH:MOV TMOD,#20H;设置定时器1为方式2 MOV TL1,#0F4H;设置预置值 MOV TH1,#0F4H SETB TR1;启动定时器1 MOV SCON#50H;串行口初始化 SETB 7FH;置长度标志位为1 SETB 7EH;置数据块标志位为1,MOV 31H,#20H;规定外部RAM的起始地址 MOV 30H,#00H MOV 40H,#00H;清累加和寄存器 SETB EA;允许串行口中断 SETB ES LJMP MAIN;MAIN为主程序,根据用户要求编写,INTS:CLR EA;关中断 CLR RI;

40、清中断标志 PUSH A;保护现场 PUSH DPH PUSH DPL JB 7FH,CHANG;判断是数据块长度吗?JB 7EH,DATA;判断是数据块吗?,SUM:MOV A,SBUF;接收校验和 CJNZ A,40H,ERR;判断接收是否正确 MOV A,#00H;二者相等,正确,向甲机发送00H MOV SBUF,AWAIT1:JNB TI,WAIT1 CLR TI SJMP RETURN;发送完,转到返回ERR:MOV A,#0FFH;二者不相等,错误,向甲机发送FFH MOV SBUF,A,WAIT2:JNB TI,WAIT2 CLR TI SJMP AGAIN;发送完,转重新开始

41、CHANG:MOV A,SBUF;接收长度 MOV 41H,A;长度存入41H单元 CLR 7FH;清长度标志位 SJMP RETURN;转返回DATA:MOV A,SBUF;接收数据 MOV DPH,31H;存入片外RAM MOV DPL,30H,MOVX DPTR,A INC DPTR;修改片外RAM的地址 MOV 31H,DPH MOV 30H,DPL ADD A,40H;形成累加和,放在40H单元 MOV 40H,A DJNZ 41H,RETURN;判断数据块是否接收完 CLR 7EH;接收完,清数据块标志位 SJMP RETURN,AGAIN:SETB 7FH;接收出错,恢复标志位,

42、重新开始接收 SETB 7EH MOV 31H,#20H;恢复片外RAM起始地址 MOV 30H,#00H MOV 40H,#00H;累加和寄存器清零 RETURN:POP DPL;恢复现场 POP DPH POP A SETB EA;开中断 RETI;返回,8.4.3 多机通信 MCS-51串行口的方式2和方式3有一个专门的应用领域,即多机通信。这一功能通常采用主从式多机通信方式,在这种方式中,要用一台主机和多台从机。主机发送的信息可以传送到各个从机或指定的从机,各从机发送的信息只能被主机接收,从机与从机之间不能进行通信。图8.21是多机通信的一种连接示意图。多机通信的实现,主要依靠主、从机

43、之间正确地设置与判断SM2和发送或接收的第9位数据来(TB8或RB8)完成的。我们首先将上述二者的作用总结如下。,图8.21 多机通信连接示意图,多机通信的实现,主要依靠主、从机之间正确地设置与判断SM2和发送或接收的第9位数据来(TB8或RB8)完成的。我们首先将上述二者的作用总结如下。在单片机串行口以方式2或方式3接收时,一方面,若SM2=1,表示置多机通信功能位。这时有两种情况:接收到第9位数据为1,此时数据装入SBUF,并置RI=1,向CPU发中断请求;接收到第9位数据为0,此时不产生中断,信息将被丢失,不能接收。另一方面,若SM2=0,则接收到的第9位信息无论是1还是0,都产生RI=

44、1的中断标志,接收的数据装入SBUF。根据这个功能,就可以实现多机通信。,在编程前,首先要给各从机定义地址编号,如分别为00H、01H、02H等。在主机想发送一个数据块给某个从机时,它必须先送出一个地址字节,以辨认从机。编程实现多机通信的过程如下:(1)主机发送一帧地址信息,与所需的从机联络。主机应置TB8为1,表示发送的是地址帧。例如:MOV SCON,#0D8H;设串行口为方式3,TB8=1,允许接收(2)所有从机初始化设置SM2=1,处于准备接收一帧地址信息的状态。例如:MOV SCON,#0F0H;设串行口为方式3,SM2=1,允许接收,(3)各从机接收到地址信息,因为RB8=1,则置

45、中断标志RI。中断后,首先判断主机送过来的地址信息与自己的地址是否相符。对于地址相符的从机,置SM2=0,以接收主机随后发来的所有信息。对于地址不相符的从机,保持SM2=1的状态,对主机随后发来的信息不理睬,直到发送新的一帧地址信息。(4)主机发送控制指令和数据信息给被寻址的从机。其中,主机置TB8为0,表示发送的是数据或控制指令。对于没选中的从机,因为SM2=1,RB8=0,所以不会产生中断,对主机发送的信息不接收。,8.5 PC机和单片机之间的通信,8.5.1 接口设计 PC机与单片机之间可以由RS-232C、RS-422A或RS-423等接口相连,关于这些标准接口的特征,我们已经在前面的

46、篇幅中介绍过。在PC机系统内都装有异步通信适配器,利用它可以实现异步串行通信。该适配器的核心元件是可编程的Intel 8250芯片,它使PC机有能力与其它具有标准的RS-232C接口的计算机或设备进行通信。而MCS-51单片机本身具有一个全双工的串行口,因此只要配以电平转换的驱动电路、隔离电路就可组成一个简单可行的通信接口。同样,PC机和单片机之间的通信也分为双机通信和多机通信。,PC机和单片机最简单的连接是零调制三线经济型。这是进行全双工通信所必须的最少线路。因为MCS-51单片机输入、输出电平为TTL电平,而PC机配置的是RS-232C标准接口,二者的电气规范不同,所以要加电平转换电路。常

47、用的有MC1488、MC1489和MAX232,图8.22 给出了采用MAX232芯片的PC机和单片机串行通信接口电路,与PC机相连采用9芯标准插座。,图8.22 PC机和单片机串行通信接口,8.5.2 软件编程 这里,我们列举一个实用的通信测试软件,其功能为:将PC机键盘的输入发送给单片机,单片机收到PC机发来的数据后,回送同一数据给PC机,并在屏幕上显示出来。只要屏幕上显示的字符与所键入的字符相同,说明二者之间的通信正常。通信双方约定:波特率为2400 b/s;信息格式为8个数据位,1个停止位,无奇偶校验位。,1.单片机通信软件 MCS-51通过中断方式接收PC机发送的数据,并回送。单片机

48、串行口工作在方式1,晶振为6 MHz,波特率2400 b/s,定时器1按方式2工作,经计算,定时器预置值为0F3H,SMOD=1。参考程序如下:ORG 0000H LJMP CSH;转初始化程序 ORG 0023H LJMP INTS;转串行口中断程序 ORG 0050H,CSH:MOV TMOD,#20H;设置定时器1为方式2 MOV TL1,#0F3H;设置预置值 MOV TH1,#0F3H SETB TR1;启动定时器1 MOV SCON#50H;串行口初始化 MOV PCON#80H SETB EA;允许串行口中断 SETB ES LJMP MAIN;转主程序(主程序略),INTS:C

49、LR EA;关中断 CLR RI;清串行口中断标志 PUSH DPL;保护现场 PUSH DPH PUSH A MOV A,SBUF;接收PC机发送的数据 MOV SBUF,A;将数据回送给PC机,WAIT:JNB TI,WAIT;等待发送 CLR TI POP A;发送完,恢复现场 POP DPH POP DPL SETB EA;开中断 RETI;返回,2.PC机通信软件 PC机方面的通信程序可以用汇编语言编写,也可以用其它高级语言,例如VC、VB来编写。这里只介绍用汇编语言编写的程序。参考程序如下:stack Segment para stack code Db 256 dup(0)Sta

50、ck ends Code Segment para public code,Start proc far Assume cs:code,ss:stack PUSHDS MOV AX,0 PUSHAX CLIINPUT:MOV AL,80H;置DLAB=1 MOV DX,3FBH;写入通信线控制寄存器 OUT DX,AL,MOV AL,30H;置产生2400 b/s波特率除数低位 MOV DX,3F8H OUT DX,AL;写入除数锁存器低位 MOV AL,00H;置产生2400 b/s波特率除数高位 MOV DX,3F9H OUT DX,AL;写入除数锁存器高位 MOV AL,03H;设置数据

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号