单片机串行通信技术_第1页
单片机串行通信技术_第2页
单片机串行通信技术_第3页
单片机串行通信技术_第4页
单片机串行通信技术_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

5.4单片机串行通信5.4.1串行通信的基础知识5.4.251系列单片机的串行接口5.4.3串行口工作模式5.4.4串行口应用举例5.4.1串行通信的基础知识计算机与外部设备或计算机与计算机之间的信息交换称为通信。通信的基本方式:并行通信和串行通信。在现代测控系统中信息交换多采用串行通信方式。并行通信:通常是将数据字节的各位用多条数据线同时进行传送。优点是控制简单、传送速度快;缺点是数据有多少位,就需要多少根传输线,适合于近距离传输,长距离传送时成本高且接收方的各位同时接收存在困难。通信控制线并行通信串行通信:将数据字节分成一位一位的形式在一条传输线上逐个地传送。优点是只需一对传输线(如电话线),占用硬件资源少,从而降低了传输成本,特别适用于远距离通信,且可以利用电话网等现成的设备;缺点是传送速度较慢,数据的传送控制比并行通信复杂。一.串行通信的两种基本方式串行通信是CPU与外界交换信息的一种基本通信方式。串行通信基本方式:异步通信和同步通信。串行通信1、异步通信方式异步通信:以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间是异步的(字符之间不一定有“位间隔”的整数倍的关系),但同一字符内的各位是同步的(各位之间的距离均为“位间隔”的整数倍)。通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。数据在线路上的传送不连续,字符间隔不定,各个字符可以连续传送也可以间断传送(停止位后,线路上自动保持为1),完全取决于通信协议或约定。不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。异步通信用一帧表示一个字符,一个字符包括4个部分:起始位:1位(0有效)

数据位:5--8位(低位在先,高位在后)奇偶校验位:1位停止位:1位、1位半、2位(1有效)图6-1异步通信的字符格式在异步通信时,通信双方必须事先约定。(1)字符格式

双方要事先约定数据位的位数、奇偶校验形式及起始位和停止位的位数。例如:用ASCⅡ码通信,有效数据为7位,加一个奇偶校验位、一个起始位和一个停止位共10位。当然停止位也可以大于1位。(2)波特率(Baudrate)波特率就是传送速率,即每秒传送的二进制位数,单位为bit/s或波特。波特率与字符的传送速率之间的关系为:波特率=一个字符的二进制编码位数*字符数/秒.要求发送端与接收端的波特率必须一致。假设:数据传送率是120字符/s,每个字符格式包含十个代码位(一个起始位、一个终止位、8个数据位),波特率为:

10×120=1200bit/s=1200波特同步字符数据1数据2……数据N校验字符1校验字符2同步字符2、同步通信方式(一次传送一个数据块,接收双方采用同一时钟))异步通信由于要在每个数据前后附加起始位、停止位,每发送一个字符约有20%的附加数据,占用了传输时间,降低了传送效率。同步通信则去掉每个数据的起始位和停止位,把要发送的数据按顺序连接成一个数据块,在数据块的开头附加1~2个同步字符,在数据块的末尾加差错校验字符。在数据块内部,数据与数据之间没有间隙;数据块块之间有间隔,发送同步字符填充。要求:发送和接收双方要保持完全的同步,所以,要求发送和接收设备必须使用同一时钟。解决办法:1)对于近距离通信:采用在传输线中增加一根时钟信号线来解决。2)对于远距离通信:通过解调器从数据流中提取同步信号,用锁相技术实现收、发频率完全相同的时钟信号。如上所述,异步通信技术较为简单,应用范围广;同步通信传输速率高,适用于高速率、大容量的数据通信,但硬件复杂。ABAB····AB二、串行通信的数据传送方式串行通信中,数据在两个端点之间进行传送,按照数据的流动方向:1、单工方式:单工是指数据传输仅能沿一个方向,不能实现反向传输。数据传送是单向的,一端为发送另一端为接收,只需一条数据线。2、半双工方式:半双工是指数据传输可以沿两个方向,但需要分时进行。数据传送是双向的,A→B,B→A,同一时间只能做一个方向传送,只需一条数据线。3、全双工方式:全双工是指数据可以同时进行双向传输。数据传送是双向的,A、B两端可同时发送,又可同时接收,需两根数据线。单工通信半双工通信全双工通信

三、串并转换和串行接口通常CPU内部并行地输入、输出数据,因此串行数据通信要解决的两个问题:数据传送、数据转换。(1)串并转换实现:由串并接口电路+适当的软件配合串行接口芯片:异步接收/发送器——UART;同步接收/发送器——USART(2)UART组成:接收器,发送器,控制器主要功能:①串行→并行(接收器完成)并行→串行(发送器完成)②完成格式信息的插入,滤除及错误校验(控制器完成)

(格式信息指异步通信中的起始位、奇偶位、停止位。)5.4.2MCS-51系列单片机的串行接口对于单片机来说,除了4个8位的并行I/O口外,为了进行串行通信,同样也需要有相应的串行接口电路。只不过这个接口电路不是单独的芯片,而是集成在单片机芯片的内部,成为单片机芯片的一个组成部分。MCS-51系列单片机有一个全双工的串行口,4种工作方式,以供不同场合使用,波特率可由软件设置,由片内定时/计数器产生,工作时可使用查询或是中断方式,十分灵活,既可用于网络通信,也可以实现串行异步通信,还可以作为同步移位寄存器使用。MCS-51系列单片机串行通信的基本工作:发送数据时,将CPU发送来的数据转换成一定格式的串行数据,由引脚TXD上按规定的波特率逐位输出;接收数据时,监视引脚RXD,一旦出现起始位0,就将外围设备送来的一定格式的串行数据转换成并行数据,等待CPU读入。二、MCS-51系列单片机串行口的结构1、组成:发送数据缓冲器:只能写入,不能读出接收数据缓冲器:只能读出,不能写入发送控制器接收控制器输出控制门输入移位寄存器发送缓冲器和接收缓冲器用同一符号SBUF,地址99H,用指令判断选哪个。

MOVSBUF,A

---将数据写入发送缓冲器

MOVA,SBUF

---从接收缓冲器读取数据两个专用寄存器:SCON:存放串行口的控制和状态信息

PCON:改变串行通信波特率51单片机串行口是可编程接口,对它初始化只用两个控制字分别写入这两个寄存器即可。发送SBUF(99H)发送控制器接收控制器输入移位寄存器串行控制寄存器(98H)门定时器T1≥1接收SBUF(99H)串行口中断888TXD(P3.1)RXD(P3.0)TIRI内部总线图5-25串行口结构框图SM0SM1工作模式功能说明波特率00模式0同步移位寄存器方式(用于I/O口扩展)fosc/12

01模式110位异步接收发送可变(由定时器控制)

10模式211位异步接收发送

fosc/32或fosc/6411模式311位异步接收发送可变(由定时器控制)SM0SM1SM2RENTB8RB8TIRID7D5D6D4D3D2D1D0二、MCS-51单片机串行口的控制1.串行口控制寄存器SCON串行口的工作模式的选择、接收/发送控制及串行口的状态信息由它控制和指示字节地址98H,可位寻址,位地址为98H~9FH。SM0、SM1:工作模式选择位。可选择4种工作模式。表5.10串行口的工作模式SM2:多机通信控制位(主要用于模式2和模式3)在模式2和模式3:SM2=1,在主-从式多机通信中,SM2用于控制从机的接收。设SM2=1:从机(接收机)只接收地址帧;(利用收到的RB8来控制是否激活RI)若接收到的第9位数据(RB8)为0时(数据帧),不激活接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;只有当第9位数据(RB8)为1时(地址帧),才将接收到的前8位数据送入SBUF中,并激活RI,以产生中断申请。设SM2=0:从机(接收机)可接收所有信息;不论收到的RB8是0还是1,均可以使收到的数据进入SBUF,并激活RI。(即此时RB8不具有控制RI激活的功能)在模式1:若SM2=1,则只有接收到有效停止位时,RI才置1。在模式0:SM2必须是0。REN:允许接收控制位(串行接收的开关)REN=1时,允许接收数据;REN=0时,则禁止接收;该位由软件置1或清0。TB8:发送数据第9位。该位根据发送数据的需要由软件置位或复位。在模式2和模式3中:TB8是要发送数据的第9位。在多机通信时:作为发送地址帧或数据帧的标志位。一般约定:发送地址帧时,设置TB8=1;发送数据帧时,设置TB8=0。在单机通信时:它也可作奇偶校验位。在模式0或模式1中:该位未用。RB8:接收数据第9位。在模式2和模式3中:RB8是接收数据的第9位。在多机通信时:也可以是约定的地址/数据标志位,可根据RB8被置位的情况对接收数据进行某种判断,若RB8=1,说明收到的数据为地址帧;RB8=0,收到的数据为数据帧。在单机通信时:它可以是约定的奇偶校验位。在模式1时:若SM2=0(即不是多机通信情况),则RB8是已接收到的停止位。在模式0中:该位未用。TI:发送中断标志。在一帧数据发送结束时由硬件置位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。TI=1表示“发送缓冲器已空”,通知CPU可以发送下一帧数据。TI位可作为查询;也可作为中断申请标志位。TI不会自动复位,必须在中断服务程序中,由软件清0。RI:接收中断标志。在接收到一帧有效数据后由硬件置位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。RI=1表示一帧数据接收完毕,并已装入接收缓冲器中,即表示“接收缓冲器已满”,通知CPU可取走该数据。该位可作为查询,也可作为中断申请标志位。同样RI不会自动复位,必须在中断服务程序中,由软件清0。SMOD———GF1GF0PDIDLD7D5D6D4D3D2D1D02.电源控制寄存器PCON字节地址为87H,不可位寻址。低4位:CHMOS器件的掉电方式控制位。SMOD:波特率倍增位,在模式1、2、3中:SMOD=1,波特率提高1倍;SMOD=0,波特率不增倍;复位时,PCON=00H。三、波特率设计串行口有4种工作模式,通信时收发双方对传输的数据速率有一定约定,由于输入的移位时钟的来源不同,各种方式的波特率计算公式也不相同,对应着3种波特率。1.模式0的波特率波特率固定:每个机器周期产生一个移位时钟,可发送或接收一位数据,且不受SMOD位的影响。即:模式0的波特率=fosc/12(fosc是振荡器频率)2.模式2的波特率由系统的振荡频率fosc和SMOD共同确定,即:模式2的波特率=2SMOD·fosc/643.模式1和模式3的波特率模式1和模式3的移位时钟由定时器T1的溢出率决定,故波特率由T1的溢出率与SMOD值共同决定,即:模式1和模式3的波特率=2SMOD·T1的溢出率/32SMOD+112foscfosc(SMOD+1)384·波特率T1做波特率发生器使用:T1作为波特率发生器时,最典型的用法是使T1工作在模式2(初值自动加载)、定时方式,若计数初值为X,则每经过”256-X”个机器周期,定时器T1就会产生一次溢出;溢出周期为:(256-X)溢出率为溢出周期的倒数,所以波特率=此时,定时器T1工作在模式2时的初值应为:X=(256-)2SMOD32fosc12(256-X)2SMOD在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。例已知51系列单片机系统晶振频率为11.0592MHz,选用定时器T1工作模式2做波特率发生器,波特率为2400波特,求初值X。解:设波特率选择位SMOD=0,则有:X=256-11.0592*106(0+1)/(320*2400)=244=F4H所以,(TH1)=(TL1)=F4H。系统晶振频率选为11.0592MHz是为了使初值为整数,从而产生精确的波特率。5.4.3串行口工作模式一、模式0模式0时,串行口为同步移位寄存器输入输出方式,外接移位寄存器用于扩展I/O口。当串行口别无他用时,可用串行口模式0扩展并行的I/O口。模式0以8位为一帧数据,没有起始位和停止位,发送和接收均为8位数据,低位在前、高位在后。8位串行数据的输入或输出都是通过RXD(P3.0)端,而TXD(P3.1)端用于送出同步移位脉冲,作为外接器件的同步移位信号。输出时将发送数据缓冲器的内容串行地移到外部的移位寄存器,输入时将外部移位寄存器内容移入内部的输入移位寄存器,然后写到内部的接收数据缓冲器。波特率固定为fosc/12。模式0中,SCON寄存器中的SM2、RB8、TB8不起作用,可设为0。发送工作过程:模式0的发送是在TI=0的情况下,由一条写发送缓冲器的指令开始。MOVSBUF,ACPU执行完该指令,串行口即将8位数据从RXD端送出(低位在前),同时,在TXD端发出同步移位脉冲。8位数据发送完毕后,由硬件置位TI=1。可通过查询TI位来确定是否发送完一组数据,TI=1表示发送缓冲器已空;TI=1也可作为中断请求信号,申请串行口发送中断。当要发送下一组数据时,需用软件使TI清0,然后才可发送下一组数据。接收工作过程:模式0的接收是在RI=0和REN=1的条件下,启动串行口接收。接收数据由RXD端输入(低位在前),TXD端仍发出同步移位脉冲。接收到8位数据以后,由硬件使RI=1。可通过查询RI位来确定是否接收到一组数据,RI=1表示接收数据已装入接收缓冲器,可以由CPU用指令读取;RI=1也可作为中断请求信号,申请串行口接收中断。当CPU读取数据后,需用软件清RI,以准备接收下一组数据。扩展并行输出口在模式0时外接一个串入/并出的移位寄存器,就可以扩展一个8位并行输出口。所用的移位寄存器应该带有输出允许控制端,这样可以避免在数据串行输入时,并行输出端出现不稳定的输出。采用串入/并出移位寄存器CD4094(也可用74LS164)(1)先对SCON寄存器初始化,进行工作模式设置模式0的设置:只把00H送入SCON即可。(2)数据输出:中断方式:TI=1,产生中断申请,可采用中断后才发下一组数据。查询方式:TI=0,继续查询;TI=1,结束查询,发下一组数据。8051P1.0TXDRXDCD4094DATACLKSTB并行输出STB:输出允许控制端STB=1,打开输出控制门,输出例5.6用8751串行口外接CD4094扩展8位并行输出口,8位输出端的各位都接一个发光二极管。要求编程实现:发光二极管从左到右以一定延迟轮流点亮,并不断循环。假设发光二极管为共阴极,则电路连接如图5-26所示。89C51解:数据的串行发送采用查询方式,显示的延迟由延时程序DELAY实现。编程如下:ORG0200HBFS0:MOVSCON,#00H;串行口模式0的初始化CLRES;禁止串行中断MOVA,#80H;拟先点亮最左边一位LOOP:CLRP1.0;关闭并行输出MOVSBUF,A;数据送SBUF,启动串行输出JNBTI,$;查询TI=0,未发送完等待SETBP1.0;TI=1,发送完启动并行输出ACALLDELAY;调延时程序CLRTI;软件清TIRRA;右移一位,准备显示下一位SJMPLOOP;转移,继续发送RET扩展并行输入口:在模式0时,外接一个并入/串出的移位寄存器,就可以扩展一个8位并行输入口。如图外接一个并入/串出的移位寄存器CD4014(也可用74LS165)数据输入:中断方式:RI=1,产生中断申请,可采用中断后才读取数据。查询方式:RI=0,继续查询;RI=1,结束查询,读取数据。8951P1.0TXDRXDCD4014Q8CLK并行输入P/SP/S:预置/移位控制端P/S=1:8位数据并行置入移位寄存器P/S=0:8位数据串行移位输出例用89C51串行口外接CD4014扩展8位并行输入口,输入数据由8个开关提供,另有一个开关S提供联络信号,电路连接如图6-7所示。当S=0时,要求输入数据,并连续输入8组数据,读入的数据转存到内部RAM40H开始的单元中。试编程实现。解:用串行口模式0接收数据,初始化时应使REN为1,采用查询方式输入数据。89C51

ORG0300HBJS0:JBP1.0,LP2;开关K未闭合,转返回MOVR6,#08H;K闭合,读入次数送R6MOVR1,#40H;存放数据的首地址送R1CLRES;禁止串行中断MOVSCON,#10H;设模式0,RI清0,启动接收LP:SETBP1.1;P/S=1,并行置入开关数据CLRP1.1;P/S=0,开始串行LP1:JNBRI,LP1;查询RI,RI=0,未接收完等待CLRRI;接收完,清RI,准备接收下一个MOVA,SBUF;读取数据送入累加器MOV@R1,A;送内部RAM区INCR1;修改地址,指向下一个单元DJNZR6,LP;计数器减1,不为0,转继续接收LP2:RET;接收完,子程序返回二、模式1模式1是10位数据的串行异步通信方式。TXD为数据发送端,RXD为数据接收端。波特率可变,由定时器T1的溢出率及SMOD位决定。一帧数据10位:1位起始位,8位数据位,1位停止位,其帧格式为:模式1的发送:在TI=0时,由MOVSBUF,A指令启动。启动发送后,串行口自动地插入一位起始位(逻辑0),接着是8位数据(低位在前),然后又插入一位停止位(逻辑1),在发送移位脉冲作用下,依次由TXD端发出。一帧信息发完之后,即插入停止位后,由硬件使TI置1,用以通知CPU可以发送下一帧数据,TXD端的信号自动维持为1。模式1的接收:在REN置1的条件下,串行口采样引脚RXD。在无信号时,RXD端的状态为1,当采样到1至0的跳变时,确认是起始位“0”,就开始接收一帧数据。在接收移位脉冲的控制下,把收到的数据一位一位地送入输入移位寄存器,直到9位数据全部收齐(包括一位停止位)模式1接收时,应先用软件清RI或SM2标志。三、模式2模式2是11位串行异步通信方式。TXD为数据发送端,RXD为数据接收端。一帧数据11位:1位起始位、8位数据位、1位可编程位、1位停止位,其帧格式为:模式2的波特率有两种:一种是fosc/32;另一种是fosc/64。模式2的发送:包括9位有效数据,在启动发送之前,应把要发送的第9位数值装入SCON寄存器中的TB8位。(是由用户根据通信协议用软件来设置)启动发送:设置好TB8的值以后,在TI=0的条件下,执行一条MOVSBUF,A

指令就可以。串行口能自动把TB8取出,并装入到第9位数据的位置,逐一发送出去。发送完毕,由硬件使TI置1。(这些过程与模式1基本相同)

模式2的发送:发送开始时,先把起始位0输出到TXD引脚,然后发送移位寄存器的输出位(D0)到TXD引脚。每一个移位脉冲都使输出移位寄存器的各位右移一位,并由TXD引脚输出。第一次移位时,停止位“1”移入输出移位寄存器的第9位上,以后每次移位,左边都移入0。当停止位移至输出位时,左边其余位全为0,检测电路检测到这一条件时,使控制电路进行最后一次移位,并置TI=1,向CPU请求中断。模式2的接收:模式2的接收与模式1不同之处是要接收9位有效数据。在模式1时是把停止位当作第9位数据来处理;在模式2(或模式3)中存在着真正的第9位数据。因此,模式2接收数据真正有效的条件为:(1)RI=0;(2)SM2=0或收到的第9位数据为1。第一个条件是提供“接收缓冲器已空”的信息,即CPU已把SBUF中上次收到的数据读走,允许再次写入。第二个条件则提供了根据SM2的状态和所接收到的第9位状态来决定接收数据是否有效。若第9位是一般的奇偶校验位(单机通信时),应令SM2=0,以保证可靠的接收;若第9位作地址/数据标志位(多机通信时),应令SM2=1,这样。当第9位为1时,表明接收的信息为地址帧,串行口将接收该地址信号。若上述两个条件成立,接收的前8位数据进入SBUF,以准备让CPU读取,接收的第9位数据进入RB8,同时置位RI。若以上条件不成立,则这次接收无效,放弃接收结果,即8位数据不装入SBUF,也不置位RI。

模式2的接收:接收时,数据从右边移入输入移位寄存器,在起始位0移到最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的第9位数据为1)时,接收到的数据装入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1,向CPU请求中断。如果条件不满足,则数据丢失,且不置位RI,继续搜索RXD引脚的负跳变。四、模式3模式3同样是11位串行异步通信方式。其一帧数据格式,接收、发送过程与模式2完全相同。与模式2不同的仅在于波特率,模式2的波特率只有固定的两种,而模式3的波特率由定时器T1的溢出率及SMOD决定,这一点与模式1相同。5.4.4串行口应用举例利用串行口控制寄存器SCON中的有关控制位,可以实现扩展I/O口、双机通信以及多机通信。一、用串行口扩展I/O口串行口的模式0不属于通信,主要用途可以和外接的移位寄存器结合来进行并行I/O口的扩展。当串行口别无它用时,则可利用串行口模式0来扩展并行I/O口。优点:这种方法不占用片外RAM地址,而且还能简化单片机系统的硬件结构。缺点:操作速度较慢。1.扩展并行输出口在模式0时外接一个串入/并出的移位寄存器,就可以扩展一个8位并行输出口。所用的移位寄存器应该带有输出允许控制端,这样可以避免在数据串行输入时,并行输出端出现不稳定的输出。STB:输出允许控制端STB=1,打开输出控制门,实现并行输出采用串入/并出移位寄存器CD4094(也可用74LS164)。用串行口扩展I/O口:(1)先对SCON寄存器初始化,进行工作模式设置模式0的设置:只把00H送入SCON即可。(2)数据输出:

中断方式:TI=1,产生中断申请,可采用中断后才发下一组数据。

查询方式:TI=0,继续查询;TI=1,结束查询,发下一组数据。例6-2用8951串行口外接CD4094扩展8位并行输出口,8位输出端的各位都接一个发光二极管。要求编程实现:发光二极管从左到右以一定延迟轮流点亮,并不断循环。假设发光二极管为共阴极,则电路连接如下所示。89C51解:数据的串行发送采用查询方式,显示的延迟由延时程序DELAY实现。编程如下:ORG0200HBFS0:MOVSCON,#00H;串行口模式0的初始化CLRES;禁止串行中断MOVA,#80H;拟先点亮最左边一位LOOP:CLRP1.0;关闭并行输出MOVSBUF,A;数据送SBUF,启动串行输出JNBTI,$;查询TI=0,未发送完等待SETBP1.0;TI=1,发送完启动并行输出ACALLDELAY;调延时程序CLRTI;软件清TIRRA;右移一位,准备显示下一位SJMPLOOP;转移,继续发送RET8051P1.0TXDRXDCD4014Q8CLK并行输入P/SP/S:预置/移位控制端P/S=1:8位数据并行置入移位寄存器P/S=0:8位数据串行移位输出2、扩展并行输入口模式0时,外接一个并入/串出的移位寄存器,就可以扩展一个8位并行输入口。如图外接一个并入/串出的移位寄存器CD4014(也可用74LS165)数据输入:

中断方式:RI=1,产生中断申请,可采用中断后才读取数据。

查询方式:RI=0,继续查询;RI=1,结束查询,读取数据。例6-3用8751串行口外接CD4014扩展8位并行输入口,输入数据由8个开关提供,另有一个开关S提供联络信号,电路连接如下所示。当S=0时,要求输入数据,并连续输入8组数据,读入的数据转存到内部RAM40H开始的单元中。试编程实现。解:用串行口模式0接收数据,初始化时应使REN为1,采用查询方式输入数据。ORG0300HBJS0:JBP1.0,LP2;开关K未闭合,转返回MOVR6,#08H;K闭合,读入次数送R6MOVR1,#40H;存放数据的首地址送R1CLRES;禁止串行中断MOVSCON,#10H;设模式0,RI清0,启动接收LP:SETBP1.1;P/S=1,并行置入开关数据CLRP1.1;P/S=0,开始串行LP1:JNBRI,LP1;查询RI,RI=0,未接收完等待CLRRI;接收完,清RI,准备接收下一个MOVA,SBUF;读取数据送入累加器MOV@R1,A;送内部RAM区INCR1;修改地址,指向下一个单元DJNZR6,LP;计数器减1,不为0,转继续接收LP2:RET;接收完,子程序返回二、单片机双机通信技术双机通信也称为点对点的异步通信。1.串行接口的硬件连接1)TTL电平信号直接传输通信双方传输距离近(小于5M),可将双方的串行口直接连接,采用单片机自身的TTL电平直接传输信息。2)RS-232C接口通信双方传输距离较近(小于15M),可采用RS-232C电平信号传输。RS-232C是EIA(美国电子工业协会)1969年修订RS-232C标准。RS-232C定义了数据终端设备(DTE)与数据通信设备(DCE)之间的物理接口标准。RS-232C电气特性:采用负逻辑逻辑“1”:-5~-15V逻辑“0”:+5~+15VTTL电平与单片机信号电平兼容:逻辑“1”:>+2.4V逻辑“0”:<0.4VTTL电平与RS-232C信号电平不匹配,需连接转换芯片,常用的转换芯片:MC1488:长线传输驱动器,完成TTL电平到RS-232C电平的转换;MC1499:长线传输接收器,完成RS-232C电平到TTL电平的转换;MAX232:完成发送转换和接收转换的双重功能。RS-232C电平与TTL电平转换驱动电路RS-232C电平与TTL电平转换驱动电路采用RS-232C接口存在的问题①传输距离短,传输速率低RS-232C总线标准受电容允许值的约束,使用时传输距离一般不要超过15米(线路条件好时也不超过几十米)。最高传送速率为20Kbps。②有电平偏移RS-232C总线标准要求收发双方共地。通信距离较大时,收发双方的地电位差别较大,在信号地上将有比较大的地电流并产生压降。③抗干扰能力差RS-232C在电平转换时采用单端输入输出,在传输过程中当干扰和噪声混在正常的信号中。为了提高信噪比,RS-232C总线标准不得不采用比较大的电压摆幅。3)RS-422A接口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。RS-485是一点对多点的通信接口,一般采用双绞线的结构。对于单片机可以通过芯片MAX485来完成TTL/RS-485的电平转换。4)RS-485接口串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:确定T1的工作方式(编程TMOD寄存器);计算T1的初值,装载TH1、TL1;启动T1(编程TCON中的TR1位);确定串行口控制(编程SCON寄存器);串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。2.双机通信软件设计为确保通信成功,通信双方必须在软件上有一系列的约定,通常称为软件协议。例1:规定双机通信的软件协议如下:(1)甲、乙双方均工作在模式3;(2)采用定时器T1工作在模式2做波特率发生器,波特率为2400波特,当系统晶振为6MHz时,计数初值为F3H,SMOD=1;(3)发送方是把片内RAM50H~5FH单元中的数据块从串行口输出。接收方则把接收的数据块存入片外RAM2000H~200FH单元中;(4)甲、乙双方使用偶校验,发送方通过对TB8置1或置0来保证发送偶数个1,接收方接收到有效数据(8位数据加RB8)后,要判断是否为偶数个1,若为偶数1,表明接收正确,置F0标志为0,否则,接收出错,置F0标志为1,然后返回;(5)甲、乙双方均可发送和接收,并且双方均采用查询方式接收和发送数据。奇/偶校验奇/偶校验是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。采用奇校验,在传送每一个字节的时候另外附加一位作为校验位,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则这个校验位就是“0”,在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果是奇数,表示传送正确,否则表示传送错误。

采用偶校验,当实际数据中“1”的个数为偶数的时候,这个校验位就是“0”,否则这个校验位就是“1”,这样就可以保证传送数据满足偶校验的要求。在接收方收到数据时,将按照偶校验的要求检测数据中“1”的个数,如果是偶数个“1”,表示传送正确,否则表示传送错误。

1)编写发送子程序首先应对串行口进行初始化编程:主要是设置定时器T1的工作模式、装载初值,以满足波特率的要求;确定串行口的工作模式及控制设置。Sout:MOVTMOD,#20H;设置定时器T1为模式2MOVTL1,#0F3H;送入波特率的初值MOVTH1,#0F3HSETBTR1;启动定时器T1MOVSCON,#0C0H;设串口模式3MOVPCON,#80H;设SMOD=1MOVR0,#50H;发送数据首地址送R0MOVR7,#10H;数据块长度送R7TRS:MOVA,@R0;取数据送AMOVC,P;奇偶标志P送CMOVTB8,C;根据P标志设置TB8(偶校验)MOVSUBF,A;数据送SBUF,启动发送WAIT:JBCTI,CONT;查TI=1,发送完则转,清TISJMPWAIT;TI=0未发送完,等待CONT:INCR0;修改数据地址DJNZR7,TRS;一组数据未发送完,继续RET;发送完,子程序返回2)编写接收子程序Sin:MOVTMOD,#20H;设置定时器T1为模式2MOVTL1,#0F3H;送入波特率的初值MOVTH1,#0F3HSETBTR1;启动定时器T1MOVSCON,#0D0H;设串口模式3,允许接收MOVPCON,#80H;设SMOD=1MOVDPTR,#2000H;送存放数据首地址MOVR7,#10H;数据块长度送R7

WAIT:JBCRI,READ;查RI=1一帧接收完,则转,同时清RISJMPWAIT;RI=0未接收完,等待READ:MOVA,SBUF;读入一帧数据JNBP,PZ;奇偶位P为0则转JNBRB8,ERR;P=1时,查RB8=0,则出错,转出错处理SJMPYES;P=1时,查RB8=1,则正确,转正确处理PZ:JBRB8,ERR;P=0,查RB8=1,则出错,转出错处理;YES:MOVX@DPTR,A;P=0,且RB8=0,则正确,存放数据INCDPTR;修改存放数据的地址DJNZR7,WAIT;一组数据未接收完,继续CLRPSW.5;接收完,置接收正确标志RET;子程序返回ERR:SETBPSW.5;置出错标志RET;子程序返回说明:上述程序是在模式3下进行收发,双方约定偶校验,若约定奇校验,发送和接收程序稍加修改即可。例2:在模式1下进行的双机通信,用累加校验和进行校验的编程方法,规定通信协议和握手信号如下:(1)甲、乙双方均采用串行口模式1;(2)采用定时器T1工作在模式2做波特率发生器,波特率为2400波特,当系统晶振为6MHz时,计数初值为F3H,SMOD=1;(3)发送方是把片内RAM50H~6FH单元中的数据块从串行口输出。接收方则把接收的数据块存入片外RAM2000H~201FH单元中;(4)甲、乙双方使用累加和进行校验。即发送方每发送一个数据求一次“累加和”,一组数据发完后,将所求的“累加和”作为“校验和”发送给接收方。接收方每接收到一个数据也求一次“累加和”,所有数据接收完,将所求的“累加和”与接收到的“校验和”相比较,如相等,说明正确;否则,说明出错。(5)甲机发送数据,乙机接收数据。甲机发送时,先发送一个呼叫信号“A1”,乙机收到后回答一个“B1”的应答信号,表示同意接收。甲机只有收到应答信号“B1”后才开始发送数据。乙机接收数据,若接收正确,向甲机回发“00H”,否则回发“0FFH”,请求重发。甲机收到“00H”的回答后结束发送。否则重新发送数据。甲机发送程序清单如下。ORG1000HA1S:MOVTMOD,#20H;设置定时器T1为模式2MOVTL1,#0F3H;送入波特率的初值MOVTH1,#0F3HSETBTR1;启动定时器T1MOVSCON,#50H;设串口模式1,允许接收MOVPCON,#80H;设SMOD=1AT1:MOVSBUF,#0A1H;发呼叫信号“A1”AS1:JBCTI,AR1;判是否发送完SJMPAS1;未完等待AR1:JBCRI,AR2;发送完,接收乙机回答SJMPAR1AR2:MOVA,SBUF;读取乙机回答信号到A中XRLA,#0B1H;检测回答信号是否为“B1”JNZAT1;不是,转继续呼叫AT2:MOVR0,#50H;是“B1”,数据首地址送R0MOVR7,#20H;数据块长度送R7MOVA,#00H;累加和单元清0AT3:MOVSBUF,@R0;发送一个数据ADDA,@R0;求累加和INCR0;地址指针加1AS2:JBCTI,AT4;判一帧是否发送完SJMPAS2;未完等待AT4:DJNZR7,AT3;数据块未发送完,转发送MOVSBUF,A;数据块发送完,发校验和AS3:JBCTI,AR3;判是否发送完SJMPAS3;未完等待AR3:JBCRI,AR4;发送完、接收乙机的回答SLMPAR3AR4:MOVA,SBUF;读取乙机回答信号到A中JNZAT2

温馨提示

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

评论

0/150

提交评论