版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章单片机串行接口及通信56本章小结习题7上一页返回7.1串行通信基础串行通信是指数据的各位分时传送,只需要一对数据线。串行通信是现代通信中的一种主要技术。串行通信可大大节省传输线路,而且能进行远距离的数据传输。7.1.1并行通信和串行通信计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。1.并行通信单位信息(通常指一个字节)的各位数据同时传送的通信方法称为并行通信。AT89C51单片机的并行通信依靠并行I/O接口实现,如图7-1所示。CPU在执行如"MOVPL,#DATA”的指令时,将8位数据写入P1口,并经P1口的8个引脚将8位数据并行输出到外部设备。下一页返回7.1串行通信基础同样,CPU也可以执行如“MOVA,P1”的指令,将外部设备送到P1口引脚上的8位数据并行地读入累加器A。并行通信的最大优点是信息传输速度快,缺点是单位信息有多少位就需要多少根传送信号线,因此,并行通信在短距离通信时有明显的优势,适用于近距离的通信,对长距离通信来说,由于需要传送信号线太多,采用并行通信就不经济了。2.串行通信单位信息的各位数据被分时一位一位依次顺序传送的通信方式称为串行通信,如图7-2所示。串行通信可通过串行接口来实现。串行通信的突出优点是:仅需要一对传输线传输信息,对远距离通信来说,就大大降低了线路成本。其缺点是传送速度比并行传输慢,假设并行传送N位数据所需要时间为T,则串行传送的时间至少需要NxT,实际上总是大于NxT。上一页下一页返回7.1串行通信基础通信技术中,输出又称为发送(TRANSmITT1NGE,输入又称为接收(RECEIvING)。串行通信速度慢,但传输线少,适应长距离通信。7.1.2串行数据通信基本原理串行通信有两种基本通信方式,即异步通信和同步通信。1.异步通信异步通信中,传送的数据可以是一个字符代码或一个字节数据。数据以帧的形式一帧一帧传送,图7-3
(A)帧结构中,一帧数据由4个部分组成:起始位、数据位、奇偶校验位和停止位。异步通信起始位用“0”表示数据传送的开始,然后从数据低位到高位逐位传送数据,接下来是奇偶校验位(亦可以省略不用),最后为停止位,用“1”表示一帧数据结束,见图7-3(A)。上一页下一页返回7.1串行通信基础起始位信号只占用一位,用来通知接收设备一个待接收的数据开始到达,线路上在不传送数据时,应保持为“1"。接收端不断检测线路的状态,若在连续收到“1”以后,又收到一个“0",就知道发来一个新数据,开始接收。字符的起始位还可被用作同步接收端的时钟。以保证以后的接收能正确进行。起始位后面是数据位,它可以是5位、6位、7位或8位,一般情况下是8位(D0~D7)。奇偶校验位(D8)只占用一位,如图7-3(B),在数据传送中也可以规定不用奇偶校验位,这一位可以省去。或者把它用作地址/数据帧标志,来确定这一帧中的数据所代表信息的性质,如规定D8为“1”表示该帧信息传送的是地址,D8="0”表示传送的是数据。上一页下一页返回7.1串行通信基础停止位用来表示一个传送字符的结束,它一定是高电平,停止位可以是1位、1.5位或2位,接收端接收到停止位后,就知道这一字符已传送完毕。同时,也为接收下一字符作准备,只要再次接收到“0”,就是新的数据的起始位。若停止位后不是紧接着接收下一个字符,则使线路电平保持高电平,两帧信息之间可以无间隔,也可以有间隔,且间隔时间可以任意改变,间隔用空闲位“1”来填充。例如,ASCII编码,字符数据为7位,传送时,加一个奇偶校验位、一个起始位、一个停止位,则一帧共十位。2.同步通信在同步通信中,每一数据块发送开始时,先发送一个或两个同步字符,使发送与接收取得同步,然后再顺序发送数据。上一页下一页返回7.1串行通信基础数据块的各个字符间取消起始位和停止位,所以通信速度得以提高,如图7-4所示。同步通信时,如果发送的数据块之间有间隔时间,则发送同步字符填充。同步字符可以由用户约定,也可以用ASC且码中规定的SYNC同步代码,即16H。同步字符的插入可以是单同步字符方式或双同步字符方式,见图7-4。在同步传送时,要求用时钟来实现发送端与接收端之间的同步。为了保证接收正确无误,发送方除了传送数据外,还要同时传送时钟信号。同步传送可以提高传输速率,但硬件要求比较高。89C51串行I/O接口的基本工作过程是按异步通信方式进行的:发送时,将CPU送来的并行数据转换成一定帧格式的串行数据。上一页下一页返回7.1串行通信基础从引脚TXD上按规定的波特率逐位输出;接收时,要监视引脚RXD,一旦出现起始位“0”,就将外设送来的一定格式的串行数据接收并转换成并行数据,等待CPU读入。3.波特率在串行通信中,对数据传送速率有一定要求。在一帧信息中,每一位的传送时间(位宽)是固定的,用位传送时间TEL表示。TEL的倒数称为波特率(BAUDRATE,波特率表示每秒传送的位数,单位为B/S(记作波特)。例如,电传打字机的传送速率每秒钟10个字符,若每个字符的一帧为11位,则传送波特率为:11位XI0字符/S=110位/S而位传送时间TD=9.1mS上一页下一页返回7.1串行通信基础异步通信的传送速率一般在50~9600B/S之间,常用于计算机到终端和打印机之间的通信、直通电报、无线通信的数据发送等。4.通信方向根据信息的传送方向,串行通信通常有三种:单工、半双工和全双工。如果用一对传输线只允许单方向传送数据,这种传送方式称为单工(SImPLEx)传送方式,如图7-5
(A)所示。如果用一对传输线允许向两个方向中的任一方向传送数据,但两个方向上的数据传送不能同时进行,这种传送方式称为半双工传送方式,如图7-5(B)所示。如果用两对传输线连接在发送器和接收器上,每对传输线只负担一个方向的数据传送,发送和接收能同时进行,这种传送方式称为全双工传送方式,如图7-5(C)所示,它要求两端的通信设备都具有完整和独立的发送和接收能力。上一页下一页返回7.1串行通信基础AT89C51单片机内部有一个全双工串行通信装置,有两根串行通信传输引脚RXD(串行接收引脚)和TXD(串行发送引脚)。但CPU不可能同时执行“接收”和“发送”两种指令,因此“全双工”是对串行接口而言的。5.串一并转换两个通信设备在串行线路上成功地实现通信,必须解决两个问题,一是串一并转换,即如何把要发送的并行数据串行化,把接收的串行数据并行化;二是设备同步,即同步发送设备和接收设备的工作节拍,以确保发送器发送的信息在接收端能被正确读出。串行通信是将单片机内部的并行数据转换成串行数据将其通过一根通信线传送,将接收的串行数据再转换成并行数据送到计算机中。上一页下一页返回7.1串行通信基础串行数据发送之前,单片机内部的并行数据已被送入移位寄存器,再一位一位移出。将并行数据转换成串行数据方式,如图7-6所示。在接收数据时,来自通信线路的串行数据被一位一位送入移位寄存器,满8位后,再并行送到计算机内部,如图7-7所示。上一页返回7.289C51串行接口89C51串行接口是一个全双工串行通信接口,即能同时进行串行发送和接收数据,它可以作为通用异步接收和发送器(UART用,也可以作为同步移位寄存器用。其传送数据帧格式可以有8位、10位或11位,并能设置传送波特率,给使用带来了很大灵活性。使用串行接口可以实现89C51单片机之间的双机通信和89C51单片机与系统机之间的多机通信。7.2.1串行口的结构1.89C51串行口的结构89C51单片机的串行口电路结构示意图如图7-8所示。89C51通过引脚RXD(P3.0串行数据接收端)和引脚‘PXD(P3.1,串行数据发送端)与外界进行通信,单片机内部的全双工串行接口部分。下一页返回7.289C51串行接口包含有串行发送器和接收器,有两个物理上独立的缓冲器,即发送缓冲器和接收缓冲器。发送缓冲器CPU只能写入发送的数据,但不能读出;接收缓冲器CPU只能读出接收的数据,但不能写入。因此,可同时收、发数据,实现全双工传送。串行发送与接收的速率与移位时钟同步,89C51用定时器T1作为串行通信的波特率发生器,T1溢出率经2分频或不分频后又经16分频作为串行发送或接收的移位脉冲。移位脉冲的速率即为波特率。从图7-8中可以看出接收是双缓冲结构,在前一个字节被接收缓冲器SBUF读出之前,第二个字节即开始接收到串行输入移位寄存器,但是,在两个字节接收完毕而CPU未读取前一个字节时,会丢失前一个字节。上一页下一页返回7.289C51串行接口串行口发送和接收缓冲器的名称都是特殊功能寄存器SBUF(一个是接收SBUF,一个是发送SBUF),它们共用一个地址(99H),SBUF是不可位寻址的。欲向外发送一个数据,只要执行一条向99H单元传送数据的指令(如MOVSBUF,A)即可。若要接收一个外部传来的数据,只要执行一条读99H单元的传送指令(MOVA,SBUF)即可。数据接收时,在满足串行口接收中断标志位R1(SCON.0)=0的条件下,置允许接收位REN(SCON.4)=1,就可以接收一帧数据进入移位寄存器,并装入接收缓冲寄存器SBUF中,当接收缓冲器SBUF接收到一个完整的数据时,硬件自动置SCON寄存器中的R1位为“1",表示一帧数据各位接收完毕,接收缓冲寄存器SBUF已稳定,申请串行中断,CPU可以将数据取走。上一页下一页返回7.289C51串行接口数据发送过程如下:当发送SBUF寄存器中的数据串行发送完毕,硬件自动置SCON寄存器中的T1为“1",表示数据发送完毕,申请串行中断,此时发送缓冲寄存器已空,可以接收下一个要发送的数据,指示CPU向发送缓冲寄存器SBUF写入下一个发送数据。对于发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误,不需要双缓冲结构。2.串行口控制寄存器SCON89C51串行口是可编程接口,对它初始化编程只涉及两个特殊功能寄存器,即串行口控制寄存器SOON(98H)和电源控制寄存器PCON(87H)。SCON(98H)包含中行口工作方式选择位、接收和发送控制位以及串行口状态标志位,其格式如图7-9所示。SMO,SM1:串行口工作方式选择位,其定义如表7-1所示。上一页下一页返回7.289C51串行接口SM2:允许方式2和方式3的多机通信控制位。在方式2和方式3处于接收时,如果SM2置为1,则接收到的第9位数据(RB8)为0时,不激活R1(即R1不置1)。在方式1处于接收时,如果SM2置为1,则接收到有效的停止位时,才会激活R1(即R1置1)。在方式0时,SM2应置为0REN:允许串行接收位。由软件置1以允许接收;由软件置0以禁止接收。TB8:是在方式2和方式3中发送的第9位数据。根据发送数据的需要由软件置位或复位。可作为奇偶校验位,也可在多机通信中作为区别地址帧或数据帧的标志位。在方式0、方式1中该位末用。RB8:是在方式2和方式3中,存放接收到的第9位数据。可作为约定的奇偶校验位,或是约定的地址/数据的标志位。在方式1中,若SM2=0,RB8中存放的是己接收到的停止位。方式0不使用RB8。上一页下一页返回7.289C51串行接口T1:发送中断标志。在方式0中,串行发送第8位结束时,由硬件置位T1;在其他3种方式中,串行发送停止位开始时,由硬件置位T1。T1=1,表示一帧数据发送完毕。可由软件查询T1的状态,T1为“1”时向CPU申请中断,CPU响应中断,T1标志需由软件清0,再发送下一帧数据。R1:接收中断标志位。在方式0中,串行接收到第8位数据时,由硬件置位R1;在其他3种方式中,如果SM2控制位允许,则串行接收到停止位时硬件置位R1。R1=1,表示一帧信息接收结束。可由软件查询R1的状态,R1为“1”时向CPU申请中断,CPU响应中断,R1必须由软件清0,准备接收下一帧信息。发送中断和接收中断是同一中断向量的中断程序,所以在全双工通信时,必须由软件查询是发送中断T1=1,还是接收中断R1=1。上一页下一页返回7.289C51串行接口3.特殊功能寄存器PCONPC0N中的最高位PCON.7是串行特波率系数位,其格式如图7-10所示。SMOD:波特率倍增位。当SMOD=1时,使串行波特率加倍。PCON是为了在CHMOS型的89C51单片机上实现电源控制而附加的。在HMOS的单片机中除PCON.7为SMOD位外,其余的均无意义。7.2.2串行口的工作方式89C51串行口可设置4种工作方式,串行数据传输有8位、10位或11位帧结构格式。1.工作方式0方式0以8位数据为一帧,不设起始位、停止位和奇偶校验位,先发送或接收低位,波特率是固定的。其帧结构如图7-11所示。上一页下一页返回7.289C51串行接口串行接口工作方式0为同步移位寄存器输入/输出方式。常用于串行口外接移位寄存器以扩展并行I/0口,也可以外接串行同步输入/输出设备。串行数据由RXD(P3.0引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚送出。串行口以方式。发送时,数据由RXD端串行输出,TXD端输出同步脉冲信号,当一个数据写入串行口发送缓冲器SBUF后,就启动串行口发送器,串行口即把8位数据以FOSC/12的波持率从RXD端串行输出(低位在前),发送完毕置中断标志T1为“1",此时,可外接串入并出的移位寄存器74LS164(或CD4049)作为扩展并行输出口,如图7-11所示。为数据输入端,TXD为同步脉冲信号输出端。接收器以FOSC/12的波特率采样RXD端的输入数据(低位在前)。上一页下一页返回7.289C51串行接口当接收器收到8位数据时,置中断标志R1为“1"。方式。输入时,可外接并入串出的移位寄存器74LS165(或CD4014),如图7-12所示。在方式中,SOON的TB8和RB8这两位未用。每当发送完或接收完8位数据,由硬件使发送中断T1或接收中断R1标志置位,CPU响应T1或R1中断请求时,不会清除T1或R1标志,必须由用户通过软件清0。方式0的主要用途是外接移位寄存器以扩展并行I/O口。2.工作方式1方式1为8位数据异步通信接口。TXD与RXD分别用于发送与接收数据,此方式的波特率可调,传送一帧信息为10位。包括1位起始位(0),8位数据位(先低位,后高位)和1位停止位(1),其格式如下:方式1发送数据时,数据从TXD端输出。上一页下一页返回7.289C51串行接口只要执行把8位数据写入发送缓冲器SBUF命令、便启动串行口发送器发送。启动发送后串行口能自动地在数据的前后分别插入一位起始值(0)和一位停止位(1),以构成一帧信息,然后在单片机内部发送移位脉冲的作用下,依次由TXD端上发出。在8位数据发出之后,也就是在停止位输出时,使T1置“1”,用以通知CPU可以发送下一个数据。当一帧信息发完之后,自动保持TXD端的信号为“1”。方式1发送数据时,单片机内部移位时钟是由T1送来的溢出信号经过16或32分频(取决于SMOD位)而得到的。因此,方式1的波特率是可变的。以方式1接收时,数据从RXD端输入。在REN置“1",允许接收器接收的前提下,在没有信号到来时,RXD端状态为“1",当检测到有由“1”到“0”的变化时,就确认是一帧信息的起始位(0),便开始接收这一帧数据。上一页下一页返回7.289C51串行接口在接收移位脉冲的控制下,把收到的数据一位一位地移入接收移位寄存器中,直到9位数据全部接收齐(包括1位停止位)。在接收操作时,接收移位脉冲的频率和发送波特率相同,也是由定时器1的溢出信号经16或32分频(由SMOD位决定)而得到的。接收器以16倍波特率的速率采样RXD串行输入端的电平。当检测到有由“1”到“0”的变化时,启动接收器,它先复位内部的16分频计数器,以便实现时间同步。计数器的16种状态把一位数据的时间分成16份,在每位时间的第7,8和9个计数状态,位检测器采样RXD的值,对这3次采样的结果采用三中取二的原则来决定检测的值,以排除干扰。由于采样总是在接收位的中间,这样既可以避开信号位两端的边沿失真,也可以防止由于波特率不完全一致而带来的接收错误。上一页下一页返回7.289C51串行接口接收完一帧数据后,必须同时满足R1=0并且SM2=0(或接收到的停止位为1)两个条件,这次接收才真正有效。并将接收移位寄存器中的8位数据装入接收缓冲器SBUF,收到的停止位装入SCON中的RB8,并使接收中断R1置“1”。若不满足这两个条件(R1=0;SM2-0或收到的停止位为1),接收到的信息将丢失。接收器接着开始搜索下一条信息起始位。其理由是:当R1=0,即表示上一帧接收完成时,R1=1发出的中断请求已被响应,SBUF中的数据已被取走,由软件使当前R1=0,表示接收SBUF已空。否则,表示上次接收的数据还未取走。SM2=0(或收到停止位为1),表示数据接收已经完成,否则,表示数据还未传送完。值得注意的是,在整个接收过程中,保证REN=1是一个先决条件,只有当REN=1时,才能对RXD进行检测。上一页下一页返回7.289C51串行接口3.工作方式2和方式3方式2和方式3被定义为9位异步通信接口。传送一条信息为11位,包括1位起始位(0),8位数据位(先低位,后高位),1位附加可编程控制的第9位,1位停止位(1),其格式如下:方式2和方式3的收发操作是完全一样的,只是波特率不同。方式2的波特率有两种:FOSC/64和FOSC/32(取决于SMOD的值)。而方式3的波特率是把定时器T1产生的溢出信号经过16或32分频(取决于SMOD的值)而取得的,即是可变的。方式2或方式3发送时,数据由TXD端输出,发送一条信息为11位,附加的第9位数据D8是SCON中的TB8(可作为奇偶校验位或地址/数据标志位,发送前根据通信协议由软件设置)。上一页下一页返回7.289C51串行接口CPU执行一条数据写入发送缓冲器SBUF的指令,就启动发送器发送,发送完一条信息,置中断标志T1为1,发送过程和方式1相同。方式2或方式3接收时,数据从RXD端输入。接收过程与方式1也基本相似。不同之处是方式2或方式3存在着真正的第9位(附加位D8)数据,需要接收9位有效数据。而方式1只是把停止位当做第9位数据来处理。方式2或方式3在SCONN中的REN=1,允许接收时,接收器开始以16倍波特率的速率采样RXD电平。当检测到RXD端有1到0变化时,启动接收器接收,把接收到的9位数据逐位移入移位寄存器(9位)中,接收完一帧信息后,在R1=0并且SM2=0(或接收到的第9位数据D8为1),前8位数据装入SBUF中,附加的第9位数据装入SCON中的RB8,置中断标志R1为1。如果不满足这两个条件,将丢弃接收到的信息,并不置位R1。上一页下一页返回7.289C51串行接口上述两个条件的第一个条件:R1=0,提供“接收缓冲器SBUF空”的信息,即用户已经把SBUF中的数据(上次接收的)取走,故可再次写入。第二个条件:SM2=0或收到的第9位数据为1,则提供了某种机会来校验串行口的接收。若第9位是奇偶校验位,则可令SM2=0,以保证可靠的接收。若第9位数据参与对接收的控制,则可令SM2=1,然后依据所置的第9位数据来决定接收是否有效。7.2.3串行口的波特率串行口定义为方式0收发时,其波特率为振荡频率FOSC的1/12。定义为方式2时,波特率为:2SM“D/64xFOSC。方式1和方式1的波特率与定时器T1的溢出率有关,即为:2S'''0"/32xT1溢出率。上一页下一页返回7.289C51串行接口用定时器T1作为波特率发生器时,通常选用定时器工作方式2(8位自动重装定时初值)。但要禁止T1中断(ET1=0,以免T1溢出时产生不必要的中断。先设TH1和TL1的初值为X,那么每过28-X个机器周期,T1就会产生一次溢出。溢出周期为:12/FOSC(28-X)。TL的溢出率为溢出周期之倒数。所以,波特率=2SMOD/32xFOSC/12x[1/(28-X)]。从而得出定时器T1工作在定时器方式2时的初值:X=28-2SMOD/384xFOSC/波特率。如果串行通信选用很低的波特率,可使定时器T1置定时器方式。(13位定时方式)或定时器方式1(16位定时方式)。在这种情况下,T1溢出时需由中断服务程序来重装初值,那么应该允许T1中断(ET1=1)。上一页下一页返回7.289C51串行接口但中断响应和中断处理的时间对波特率精度会带来一些误差。常用的波特率如表7-2所示。需要注意的是,为了使定时器T1的初值为整数,只有靠调整单片机的时钟频率FOSC来实现所要求的标准波特率。上一页返回7.3串行接口的应用举例89C51的串行口方式0通常工作在移位寄存器方式,方式1、方式2、方式3主要用于异步通信接口。下面将介绍这些方式的应用举例。7.3.1串行口在方式0下的应用串行口方式N数据传送可以采用中断方式,也可采用查询方式,但无论哪种方式都要借助于T1或R1标志。当串行口发送时,在中断方式下,靠T1置位后引起中断申请,在中断服务程序中发送下一组数据;在查询方式下,通过查询T1的值,只要T1为。就继续查询直到T1为1后结束查询,进入下一个字符的发送。当串行口接收时,由R1引起中断或对R1查询来决定何时接收下一个字符。无论是接收数据还是发送数据,是采用中断方式还是查询方式。下一页返回7.3串行接口的应用举例在串行通信开始时,都要先对SCON寄存器初始化,进行工作方式设置。在方式0中,SCON初始化设置为00H。
【例7-1】利用串行口方式0外接并行输入一串行输出的移位寄存器CD4014(或165,166),来扩展8位输入口,如图7-13所示。输入为8位开关量,编制一程序把8位开关量读入累加器A中。设串行口方式0接收串行口控制字SCON应为LOH。SCON.7和SCON.6:SMO=0,SM1=0,工作于方式O。SCON.5:SM2=0,方式0时取O。SCON.4;REN=1,允许接收,1有效。SCON.3和SCON.2:TB8、RB8,与方式0无关,可为任意,这里取0。SCON.1:T1,与接收无关,取0。上一页下一页返回7.3串行接口的应用举例SCON.O;R1=0,接收中断标志,先清0。程序如下:START:SETBP1.0;P/S=1,并行置入数据。
CLRP1.0;P/S=0,开始串行移位。
MOVSCON,#10H;串行口方式0,启动接收。WAIT:JNBR1,WAIT;查询R1。
CLRR1;8位数输入完,清R1。
MOVA,SBUF;取数据存入A中。
RET;子程序返回。
【例7-2】利用串行口方式0外接串入一并出的移位寄存器CD4049(或164)来扩展8位并行口。上一页下一页返回7.3串行接口的应用举例8位并行口的每位接LED显示器接口电路,如图7-14所示。显示器为7段共阳极LED数码显示器,6位显示器从左到右移次为LEDO-LEDS。每个移位寄存器CD4049的输出端Q9~Q7分别连接到对应位的LED显示器的对应端:A~G段和“.”段。每片CD4049的前级最后数据输出位QO与后级数据串行输入端A,B(1、2脚)相连。要显示各种字符,首先要建立一个可显示字符的字形码表SE(}PT,其次要在RAM中安排6个单元作为显示缓冲器区DISMO一DISMS,缓冲区中各单元分别与数码显示器LED0一LED5对应。需要显示某种数字或字符时,把要显示的数按显示位置的要求送入显示缓冲区各对应单元中。通过调用显示子程序,把显示缓冲区中的数转换成相应的显示字形码,然后送显示器。上一页下一页返回7.3串行接口的应用举例显示程序如下:DISP:
MOV
SCON,#00H
;置串行口为方式0。MOVR1,#06H;共显示6位字符。MOVR0,#DISM5;DISMN为显示缓冲区。MOVDPTR,#SEGPT;指向字形表首。LOOP:MOVA,@R0;取出要显示的数。MOVCA,@A+DPTR;查表得字形码。MOVSBUF,A;字形送串行口。WAIT:JNBT1,WAIT;等待发送完一帧。CLRT1;输出完,清除中断标。DECR0;准备取下一个数。上一页下一页返回7.3串行接口的应用举例DJNER1,LOOP;6位数未完,则继续。RET;返回。SEGPT:DB0C0H;0字形码。DB0F9H;1字形码。DB0A4H;2字形码。DB0B0H;3字形码。DB99H;4字形码。DB92H;5字形码。DB82H;6字形码。DB0F8H;7字形码。DB80H;8字形码。上一页下一页返回7.3串行接口的应用举例DB90H;9字形码DB88H;A字形码。DB83H;B字形码。DB0C6H;C字形码。DB0A1H;D字形码。DB86H;E字形码。DB8EH;F字形码。DB0BFH;一字形码。DB0CH;P字形码。DB0FFH;熄灭码。DISM0:DATA30H;内部RAM30H~35H单元为显示缓冲区。上一页下一页返回7.3串行接口的应用举例DISM1:DATA31HDISM2:DATA32HDISM3:DATA33HDISM4:DATA34HDISM5:DATA35HEND这种显示方式属于静态显示,显示程序不必扫描显示器。实验证明,静态显示方式显示显示亮度高。7.3.2串行口在其他方式下的应用1.串行方式1的应用上一页下一页返回7.3串行接口的应用举例【例7-3】串行口双工方式发送、接收ASCⅡ字符,最高位作为奇偶校验位,采用奇校验方式,设发送数据区的首地址为20H,接收区的首地址为40H,fOSC=16MHz,波特率为1200BS时,编写通信程序。解:7位ASCⅡ码加1位奇偶校验位共8位数据,采用串行口方式1。89C51单片机的奇偶标志位P是当累加器A中L的数目为奇数时,P=1,若直接把P的值放入ASCⅡ码的最高位,恰好成了偶校验,与要求不附,因此,要把P的值取反以后送入ASCⅡ码最高位,才是要求的奇校验。双工通信要求收、发能同时进行。数据传送用中断方式进行,响应中断后,通过检测是R1=1还是T1=1来决定CPU是进行发送操作规程还是接收操作,发送和接收都有通过调用子程序来完成。上一页下一页返回7.3串行接口的应用举例定时器初值为F3H。定时器T1采用定时工作方式2,避免计数器溢出后用软件重装定时器初值。程序清单:主程序:MOVTMOD,#20H;定时器T1设为定时方式2。MOVTLl,#OF3H;定时器初值。MOVTH1,#OF3HSETBTR1;启动定时器T1MOVSCON,#50H;将串行口设置为方式1,REN=1。MOVR0#20H;发送数据块首地址。MOVR1#40H;接收数据块首地址。上一页下一页返回7.3串行接口的应用举例ACALLSOUT;发送第一个字符。SETBES;开中断。SETBEALOOP:SJMPLOOP;等待中断。中断服务程序:ORG0023HAJMPSBR1;转串行口中断服务程序。
ORG0100HSBR1:JNBR1,SEND;T1=1,转发送中断。
ACALLSIN;R1=1,转接收中断。
SJMPNEXT上一页下一页返回7.3串行接口的应用举例SEND:ACALLSOUTNEXT:RET1;中断返回。发送子程序:SOUT:CLRT1;清中断标志。
MOVA@RO;传送发送数据。
MOVC,P;奇偶校验位处理。
CLRCMOVACC.7,CINCROMOVSBUF,A;发送数据。
RET上一页下一页返回7.3串行接口的应用举例接收子程序:SIN:CLRR1;清中断标志。
MOVA,SBUF;接收数据。
MOVC,P;奇偶校验位处理。
CPLCANTA,#7FH;屏蔽最高位。
MOV@R1,A;接收数据。
INCR1RET2.串行方式2、方式3的应用串行口方式2与方式3只是波特率设置不同,其他基本一样。上一页下一页返回7.3串行接口的应用举例都是接收/发送m位信息,开始为1位起始位(0)。中间是8位数据位,然后是1位程控位(由SCON的TB8决定),最后是1位停止位(1)。只比方式1多了一位程控位。【例7-4】用第9位TB8作为奇偶校验位,编制将片内RAM50H~5FH中的数据在串行口方式2的发送程序。解:在数据写入发送SBUF之前,先将数据的奇偶标志P写入TB8,串行口工作方式2时,传送数据每一帧的第9位数据便是奇偶校验位,可采用查询或中断两种方式之一传送数据。(1)采用查询方式传送程序ORG0000HAJMPMATN上一页下一页返回7.3串行接口的应用举例ORG0100HMATN:MOVSCON,#80H;设串行口工作方式2。
MOVPCON,#R0H;取波特率为fosc/32。
MOVR0,#50H;数据块首址送R0。
MOVR7,#10H;数据块长度送R7。LOOP:MOVA,@RO;取数据。
MOVC,PSW.0MOVTB8,C;奇偶标志位送TB8。
MOVSBUF,A;发送数据。WAIT:JBCT1,CONTAJMPWAIT上一页下一页返回7.3串行接口的应用举例CONT:INCR0DJNER7,LOOP;数据未发送完继续发送下一个数据。
SJMP$(2)采用中断方式传送程序主程序:ORG0000HAJMPMAINORG0023HAJMPSERVEORG0100HMAIN:MOVSCON,#80H上一页下一页返回7.3串行接口的应用举例MOVPCON,#80HMOVR0,#50HMOVR7,#0FHSETBESSETBEAMOVA,@ROMOVC,PSW.0MOVTB8,CMOVSBUF,ASJMP$中断服务程序:上一页下一页返回7.3串行接口的应用举例SERVE:CLRT1INCR0MOVA,@R0MOVC,PSW.0MOVTB8,CMOVSBUF,ADJNZR7,ENDTCLRESENDT:RET1【例7-5】编制一个接收程序,将接收的16B数据送入片内RAM的50~5FH单元中,设串行口工作于方式3,波特率为2400b/s。上一页下一页返回7.3串行接口的应用举例解:方式3为9位异步通信方式,波特率为定时器T1的溢出率,当晶振为11.059MHz波特率为2400b/s时,可取SMOD=0,T1的计数初值为F4H。MAIN:MOVTMOD,#20H;设T1工作于方式2MOVTH1,#0F4H;设计数初值。
MOVTL1,#0F4HSETSTR1MOVR0,#50H;数据块首地址送R0。
MOVR7,#10H;数据块长度送R7。
MOVSOON,#0D0H;串行口工作于方式3可接收。
MOVPCON,#00H;设SMOD=0。WAIT:JBCR1,PR1上一页下一页返回7.3串行接口的应用举例SJMPWAITPR1:MOVA,SBUF;读入数据。
JNBP,PNPJNBRB8,PERSJMPRlGHTPNP:JBRB8,PERR1GHT:MOV@R0,AINCR0DJNZR7,WAITCLRPSW.5PER:SETBPSW.5;置出错标志。
RET上一页返回7.4单片机的多机通信举例7.4.1双机通信【例7-6】串行通信的波特率约定为1200b/s,双机通信连接如图7-15示。用定时器T1工作方式2作为波特率发生器,由表7-2可知,定时器T1的初装值为E8H、单片机晶振频率选为11.0592MHz时,波特率则为1200b/s。甲机发送:将外部RAM1000H~100FH单元中的数据块及数据块首、末地址通过串行口发送端TXD发送到乙机。乙机接收:接收来自串行输入端RXD的数据:第1,2字节为数据块首地址,第3,4字节为数据块末地址,第5字节开始为数据块。将接收到的数据块首、末地址及数据块依次存入外部RAM以2000H为起始地址的区域中。甲机发送的程序如下:下一页返回7.4单片机的多机通信举例TRANSFER:MOVTMOD,#20H;定时器T1方式2。
MOVTL1,#OEBH;装入初值。
MOVTH1,#OEBHSETBEA;CPU开放中断。
CLRET1;禁止T1中断。
CLRES;关闭串行口中断。
MOVPCON,#00H;波特率不增倍。
SETBTR1;启动T1。
MOVSCON,#40H;置串行口方式1。
MOVSBUF,#10H;发送数据块首地址。TWAIT1:JNBT1,TWAIT1上一页下一页返回7.4单片机的多机通信举例CLRT1MOVSBUF,#00HTWAIT2:JNBT1,TWAIT2CLRT1MOVSBUF,#10H;发送末地址高字节。TWAIT3:JNBT1,TWAIT3CLRT1MOVSBUF,#10HMOVDPTR,#1000HSETBESMOVSBUF#0FH上一页下一页返回7.4单片机的多机通信举例TWAIT4:SJMPTWAIT4;等待中断。中断服务程序:ORG0023HT1NT:MOVXA,@DPTR;从数据块中取数。
MOVSBUF,A;送SBUF中。
CLRT;清除串行口中断标志。
DJNZR1,TNEXT;数据块未完,则继续。
CLREA;数据结束,关中断。
CLRTR1;关定时器。
RET1TNEXT:INCDPTR;指向下一个数据单元。上一页下一页返回7.4单片机的多机通信举例RET1为了保证最后一个数据能可靠的发送出去,可以在程序的后面增加延时。乙机接收程序如下:RECEIVE:MOVTMOD,#20H;接收方的波特率要和发送方相同。
MOVTL1,#OE8HMOVTH1,#OE8HSETBEA;CPU开放中断。
CLRET1;禁止T1中断。MOVPCON,#00HSETBTR1;开启定时器T1。
MOVR1,#14H;共接收20个字节数据。上一页下一页返回7.4单片机的多机通信举例MOVDPTR,#2000H;数据存放区首地址。MOVSCON,#50H;串行口方式1,允许接收。SETBES;串行口中断允许。RWAIT:SJMPRWAIT;等待中断。中断服务程序:ORG0023HR1NT:MOVA,SBUF;接收数据。
CLRR1;清除接收中断标志。
MOVX@DPTR,A;存放数据。
DJNZR1,RNEXT;未完,则继续。
CLRES;接收数据已完成,关中断。上一页下一页返回7.4单片机的多机通信举例CLRTR1;关闭定时器。
RET1RNEXT:INCDPTR;指向下一个单元。
RET1在进行上述双机通信时,要先运行乙机中的接收程序,再运行甲机中的发送程序。7.4.2主从式多机通信如前所述,串行口控制寄存器SOON中的SM2为多机通信控制位。当串行口以方式2(或方式3)接收数据时,若SM2=1,则仅当接收器接收到的第9位数据为1时,本帧数据才装入接收缓冲器SBUF,且置R1为1,向CPU发出中断请求信号。上一页下一页返回7.4单片机的多机通信举例若第9位数据为0,则不产生中断请求信号,数据将丢失。而SM2=0时,则接收到一个数据字节后,不管第9位的值是0还是1,都产生中断标志R1,接收数据装入SBUF中。应用这个特性,便可实现多个89C51单片机之间的串行通信,如图7-16所示。图7-16为89C51多机通信系统的连接示意图。系统中只有一个主机,有多个从机。主机发送的信息可传到各个从机或指定的从机。而各个从机发送的信息只能被主机接收。在多机通信时,主机发送的信息有两类,即地址和数据。地址是需要和主机通信的从机地址。例如将图7-16中3个从机的地址分别定义为OOH,O1H,02H。主机和从机串行口工作在方式2(或方式3),即9位异步通信方式。上一页下一页返回7.4单片机的多机通信举例主机发送的地址信息特征是串行数据的第9位为1,发送的数据信息的特征是串行数据的第9位为0。对于从机就要利用SM2位的功能来确认主机是否在呼叫自己。从机处于接收时,置SM2=1,然后依据接收到的串行强成的第9位的值来决定是否接收主机信号。多机通信实现过程如下:1.准备阶段首先定义从机地址:从机由系统初始化程序(或相关处理程序)将串行口编程为方式。或方式3接收(9位异步通讯方式);置SM2=1,REN=1,允许串行口中断。2.通信阶段(1)主机首先将要通信的从机地址发出,发地址时第9位为1,所有从机都接收。上一页下一页返回7.4单片机的多机通信举例(2)从机串行口接收到9位信息为1时,则置位中断标志R1,各从机CPU分别响应中断。(3)各从机执行中断服务程序,以判断主机送来的地址是否与本机地址相符。若是本机地址,则SM2清0,准备和主机通信;若地址不一致,则保持SM2=1。(4)主机发送数据(第9位为0)。(5)从机接收到第9位为0的信息(表示数据),只有SM2=0的从机(通信从机)激活中断标志R1=1,转入中断程序,表示接收主机的数据或命令,实现主机与从机的信息传送。而其他从机因SM2=1,第9位为0,不激活R1中断标志,所有接收的信息自动丢失不作处理,从而实现主机和从机的一对一通信。上一页下一页返回7.4单片机的多机通信举例7.4.3单片机与PC机之间的通信利用IBM-PC系列微机的RS232C异步通信接口与89C51单片机的串行口进行串行通信,由于RS232C的逻辑电平(逻辑值0,电平幅值为+3~+15V;逻辑值1,电平幅值为-3V~15V)与89C51串行口的TTL电平完全不同,所以需要进行电平转换。有许多实现电平转换的方法,例如,用MC1488芯片将TTL电平转接为RS232C电平,用MC1489芯片将RS232C电平转接为TTL电平,但是使用1488,1489电平转换电路需要士12V电源。下面以89C51单片机向PC机串行发送一字符串,PC机以中断方式串行接收,并将接收到的字符串显示在屏幕上,然后给89C51回答一个字节为例,介绍89C51与PC机之间实现串行通信的编程方法。上一页下一页返回7.4单片机的多机通信举例89C51串行发送程序:TRANS:MOVSCON,#50H;串行口工作在方式1,允许接收。
MOVTMOD,#20H;T1工作在方式2,作为串行口波特率发生器。
MOVTL1_#OF4H;波特率为2400,时钟频率为
11.0592MHz。
MOVTH1,#0F4HSETBTR1;启动T1。
MOVDPTR,#STR1NGSEND1:CLRAMOVCA,@A+DPTR上一页下一页返回7.4单片机的多机通信举例JZREAD;字符串发送完,转等待PC机发送。MOVSBUF,ASEND2:JBCT1,SEND3;判断发送中断标志。
SJMPSEND2SEND3:INCDPTR;修改指针。
SJMPSEND1READ:SETBREN;允许接收。READ1:JBCR1,READ2SJMPREAD1READ2:MOVA,SBUF;读出数据。
MOV20H,A;保存数据。上一页下一页返回7.4单片机的多机通信举例RET;返回。STR1NG:DB‘MCS51’DB00HENDPC机串行口通信程序:;(1)允许COM1接收中断,中断服务程序驻留内存。;(2)将串行接收到的字符显示在屏幕左上角的小窗口中;(3)待接收完后给单片机串行发送回答字符。CODESEGMENTPARAPUBLIC’CODE’ORG100HASSUMECS;CODE,DS;CODE,ES;CODE,SS;CODE上一页下一页返回7.4单片机的多机通信举例INIT1PROCNEAR;初始化程序开始。
CLI;关中断。
MOVAX,00A3H;UART通信协议。波特率:2400b/s。
;停止位:1位,数据位:8位。MOVDX,00HINT14HMOVDX,03FBH;线路控制寄存器LCR地址。
INAL,DXANDAL,7FH;D7(DLAB)=0。
OUTDX,ALMOVDX,03F9H;中断数据就绪中断。上一页下一页返回7.4单片机的多机通信举例MOVDX,03FCH;调制解调器控制寄存器MCR地址。MOVAL,OB;允许串行口中断。OUTDX,ALMOVDX,OFFSETRS232;指向RS232中断过程。MOVAX,250CH;接管OC类型号(串行口)中断向量。INT21HUNAL,21H;允许8259的IRQ4中断。ANDAL,0EFHOUT21H,ALSEI;开中断。MOVDX,()PRG_LEN+15)/16)+10H;申请驻留空间。上一页下一页返回7.4单片机的多机通信举例MOVAX,3100HINT21HINIT1ENDPRS232PROCFAR;中断服务程序。
ST1;开中断。
PUSHAXPUSHBXPUSHCXPUSHDXPUSHSIPUSHDI上一页下一页返回7.4单片机的多机通信举例PUSHBPPUSHDS;DS指向代码段。PUSHCSMOVCX,0005H;接收字节数。MOVSI,OFFSETBUFFAGATN1:MOVDX,0MOVAH,02HTNT14HTESTAH,12H;有无接收错?JNZFAIL;转出错处理。WHITE:MOV[SI],AL;正确,写入缓冲区。上一页下一页返回7.4单片机的多机通信举例INCSILOOPAGAIN1JMPNEST1FAIL:MOVAL,’*’;出错,记‘*’。
MOV[SI],ALNFXT1:MOVAH,0FH;读当前显示状态,获取页号BHINT10HMOVAH,03H;读当前光标位置。
JNT10HPUSHBXPUSHDX上一页下一页返回7.4单片机的多机通信举例MOVCX,0MOVDX,020AHMOVAX,0600HMOVBH,OBCHINTl0H;开窗口。MOVAAH,0FH;读当前显示状态。INT10H;开窗口。MOV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030智慧校园系统行业市场现状调研投资评估规划分析研究报告
- 2025-2030智慧校园安全管理系统设计与功能完善评价记
- 2026贵州安顺三〇三医院招聘9人备考题库含答案详解(考试直接用)
- 2025-2030智慧旅游平台开发规划及地方特色文化建设市场调研简报
- 2025-2030智慧敬老院建设项目市场供需分析投资评估规划研究报告
- 2025-2030智慧工地施工管理平台优化方案及建筑行业数字化转型分析学习
- 2025-2030智慧工厂改造技术集成市场需求产业链协同发展方案
- 2026中国社会科学调查中心招聘1名劳动合同制工作人员备考题库及答案详解(历年真题)
- 2025-2030智慧安防行业市场前景分析及投资评估
- 2025-2030智慧城市规划行业市场竞争力研究及发展前景与投资策略研究报告
- 2023既有建筑地下空间加固技术规程
- 社会工作综合能力(初级)课件
- 种类繁多的植物(课件)五年级下册科学冀人版
- 输变电工程技术标书【实用文档】doc
- 恋爱合同协议书可
- 人教版七年级下册数学平行线证明题专题训练(含答案)
- 第四章非晶态结构课件
- 公司环保考核细则
- 导管手术室(DSA)医院感染管理SOP
- 风生水起博主的投资周记
- 爱莲说-王崧舟
评论
0/150
提交评论