资源描述
什么是单片机,单片机应用系统,单片机应用系统由硬件和软件组成,注:本课程重点:1、掌握单片机应用系统硬件原理的分析方法2、掌握软件设计与调试的基本技能,标准型单片机的组成,第4章UART串行接口,教学目的:了解80C51系列单片机UART串行接口的结构、原理及应用;能够采用查询方式进行串行通信。教学重点:1.UART串行接口的工作原理;2.UART串行接口的4种工作方式的编程、应用。教学难点:1.多机通信方式2.波特率值的设置,UART,UART(UniversalAsynchronousReceiver/Transmitter)通用异步收发器UART是用于控制计算机与串行设备的芯片,用于异步通信。是双向通信,可以实现全双工传输和接收。,41串行通信概述,并行通信与串行通信并行通信:所传送数据的各位同时发送或接收。串行通信:所传送数据的各位按顺序一位一位地发送或接收。,4.1.1同步通信和异步通信方式,1.异步通信ASYNC数据或字符是以固定的帧格式一帧(Frame)一帧地传送,从起始位、数据位到停止位就构成完整的一帧,不同的系统定义有不同的帧格式。,异步传送方式,异步通信的帧格式,发送器是通过发送起始位来开始传送一个字符的。,起始位之后就传送数据位,低位在前(左),高位在后(右)。由于字符编码的不同,可以是58位。,通过对数据奇偶性的检查,可用来判别字符传送的正确性,共有三种:奇校验、偶校验、无校验。用户可根据需要选择(在有些格式中,这位可省略。),停止位在最后,用来表示一个字符传送的结束。可以是1位、1.5位、2位,不同的计算机规定有所不同。,异步通信是按字符传输的。传送时数据的低位在前,高位在后。这种传送方式利用每一帧的起、止信号来建立发送与接收之间的同步。其特点为:每一帧内部各位均采用固定的时间间隔,而帧与帧之间的时间间隔是随机的。两相邻字符帧之间有若干空闲位或无空闲位。接收机完全靠每一帧的起始位与停止位来识别字符正在进行传送还是已经结束传送。,2.同步通信SYNC用一同步字符来指示通信的开始(常约定12个),以实现发送端和接收端的同步。,同步传送方式,同步特点:因为同步通信数据块传送时去掉了字符开始和结束的标志,所以其速度高于异步传送,但这种方式对硬件结构要求较高。,数据或字符开始处是用一同步字符来指示(一般约定为12个字符),以实现发送端和接收端同步,一旦检测到约定同步字符,就连续按顺序接收数据。,采用两个同步字符,称双同步方式。采用一个同步字符,称单同步方式。同步字符可以由用户来约定,也可以采用ASCII码中规定的SYN代码,即16H。同步通信时,先发送同步字符,接收方检测到同步字符后,即准备接收数据,按约定的长度拼成一个个数据字节,直到整个数据接收完毕,经校验无传送错误则结束一帧信息的传送。,串行同步通信进行数据传送时,发送和接收双方要保持完全的同步,因此要求接收和发送设备必须使用同一时钟。在近距离通信时可以采用在传输线中增加一根时钟信号来解决;远距离通信时,可以采用锁相环技术,使接收方得到和发送方时钟频率完全相同的时钟信号。同步传送的优点是可以实现高速度、大容量的数据传送远;其缺点是要求发送时钟和接收时钟保持严格同步,同时硬件复杂。,3)波特率,波特率是指数据传送的速率,表示每秒传送代码的位数。在串行通信中,发送设备和接收设备之间除了采用相同的字符帧格式(异步通信)或相同的同步字符(同步通信)来协调同步工作外,两者之间发送数据的速度和接收数据的速度也必须相同,这样才能保证被传送数据的成功传送。波特率是串行通信的重要指标,对数据的成功传送至关重要。,例:数据传送的速率为120字符/s,每个字符由一个起始位、8个数据位和1个停止位组成,则波特率位多少?每位数据传送的时间为多少?,串行通信的方式单工:只允许单方向传送,只需一条数据线。半双工:接收和发送分时双向进行,只需一条数据线。全双工:甲、乙两机之间数据的发送和接收可以同时进行,通信必须使用二根数据线。图4-2通信方式示意图,图4.3单工方式,图4.4半双工方式,图4.5全双工方式,通信协议,计算机之间进行数据传输时的一些约定,包括通信方式、帧格式、波特率、命令码的约定等。,80C51单片机常与其它51单片机或PC机进行串行通信。80C51单片机串行接口的信号电平为TTL类型,抗干扰能力差,传输距离短。为了提高串行通信的可靠性,延长通信距离,工程设计人员一般采用标准串行接口,如RS-232C、RS-422A和RS-485等。这三种接口最初都是由美国电子工业协会(EIA)制订并发布的。,5.3串行通信的常用标准接口,5.3.1RS-232C接口,RS-232C(又称EIARS-232-C)是一种异步串行通信总标准,是目前PC机与通信工业中应用最广泛的一种串行接口。图4-7是利用RS-232C通过电话网实现远程通信的示意图。,图4-7RS-232C通过电话网实现远程通信的示意图,1接口信号,RS-232C是EIA在1969年推出的。全名是“数据终端设备DTE(如计算机和各种终端机)和数据通讯设备DCE(如调制解调器MODEM)之间串行二进制数据交换接口技术标准”。它适合于数据传输速率在020000bps范围内的通信。,图4-8RS-232C串口结构,目前较为常用的RS-232C有9针串口(DB9)和25针串口(DB25),结构分别如图4-8所示。在保证通信准确性的前提下,如果通信距离较近(小于12米),可以用电缆线直接连接,图4-9是这种连接方式的示意图;若距离较远,需附加调制解调器(MODEM),见图4-7。,图4-9近程通信示意图,实际上DB25中有许多引脚很少使用,在计算机与终端通讯中一般只使用3-9条引线。最常用的9条引线的信号内容见表4-2所示。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。传输线采用屏蔽双绞线。如图4-10所示。,图4-10RS-232C串口结构,表5-2DB9和DB25的常用信号脚说明,2.逻辑电平,RS-232C是早期为促进公用电话网络进行数据通信而制定的标准。它采用负逻辑,即-3V-15V规定为“1”;+3V+15V规定为“0”;-3V+3V为过渡区,不做定义。,3电平转换芯片与接口电路,RS232C信号的电平和单片机串口信号的电平不一致,必须进行二者之间的电平转换。常用芯片有MC1488(TTL转换成RS232C信号)、MC1489(RS232C信号转换成TTL)等。另一种常用的集成电平转换芯片MAX232可以实现RS232CTTL电平的双向转换,它只使用单一的5V电源供电,配接4个1F电解电容即可完成RS232电平与TTL电平之间的转换。其原理图如图4-11所示。转换完毕的串口信号TXD、RXD直接和80C51的串行口连接。,图5-11电平匹配原理图,注:1.为提高电路抗干扰能力,C1C4要用钽电容1.0F/16V,且尽量靠近MAX232;2.MAX232对噪声很敏感,在VCC与GND之间加C5=0.1F,起去耦作用,1性能特点RS-485以良好的抗噪声干扰性,长距离传输特性和多站能力等优点成为首选的串行接口。表现为:接口信号电平比RS-232C低(1.5V6V),不易损坏接口电路芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。RS-485传输数据的速度较快,最高速率达到10Mbps。采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性能好。最大传输距离标准值为4000英尺,折合1219米,实际上可达3000米。RS-485接口允许在总线上同时连接32个发送器和32个接收器,即具有多站能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。因RS-485接口组成的半双工网络一般只需二根连线,所以RS-485接口均采用屏蔽双绞线传输。RS-485接口连接器采用DB9的9芯插头座。与智能终端RS-485接口采用DB9(孔);与键盘连接的键盘接口RS-485采用DB9(针)。,5.3.2RS-485接口,2、与其它标准接口的对照,表4-3列出了RS-485与其它标准接口的对照表,4280C51串行口简介,4.2.1串行口结构与工作原理80C51的串行口是一个可编程的全双工串行通信接口,通过软件编程它可以做通用异步接收和发送器UART(UniversalAsynchronousReceiverTransmitter),也可做同步移位寄存器用。其帧格式可设置8位、10位或11位,并能设置不同的波特率。,图43串行口结构框图,波特率发生器,串行口组成:两个数据缓冲寄存器SBUF、一个输入移位寄存器、波特率发生器以及串行控制寄存器SCON等组成。串行口的接收发送操作:首先对串行口初始化。发送时CPU写SBUF,一方面修改发送寄存器,同时启动数据串行发送到TXD端,发送完毕后置标志位TI;接受时置允许接收位才开始接受操作,接受完毕置位RI,这时CPU可以读SBUF,即读接收到的数据。,发送操作:数据写入发送缓冲寄存器SBUF(99H),串行口即把8位数据以fosc12波特率从RXD端送出(低位在前),TXD端送出同步移位脉冲,发送完后置中断标志TI=1。MOVTMOD,#00HMOVSBUF,#dataJNBTI,$CLRTIRET,接收操作:REN是串行口接收器允许接收控制位。当RI=0,软件置REN为1时,即开始从RXD端以fosc12波特率输入数据(低位在前),TXD端送出同步移位脉冲,当接收到8位数据时,置中断标志RI=1。,RECV:MOVTMOD,#00HCLRRISETBRENJNBRI,$MOVA,SBUFCLRRIRET,4.2.2串行口寄存器,1.串行口的接收发送缓冲区SBUF:是两个独立的物理空间,只能字节寻址。2.串行口控制寄存器SCON:串行口工作方式的设置和数据传输的控制,可位寻址。,SM0、SM1:串行方式选择位,SM2:在方式2和方式3中主要用于多机通信控制。,REN:允许串行接收位。由软件置位或清除。REN1时,允许接收;REN0时,禁止接收。TB8:发送数据的第9位。在方式2或方式3中,根据需要由软件置位或复位。在多机通信中可作为区别地址帧或数据帧的标识位,一般约定地址帧时TB8为1,数据帧时TB8为0。双机通信时它可作奇偶校验位。RB8:接收数据的第9位。在方式2或方式3中,双机通信是奇偶位,多机通信是地址数据标识位。TI:发送中断标志位。发送完一帧数据后由硬件置位,必须由软件来清除。RI:接收中断标志位。接受完一帧数据后由硬件置位,必须由软件来清除。,3.电源控制寄存器PCONPCON的最高位SMOD是串行口波特率倍增位。当SMOD1时,波特率加倍,复位时,SMOD0。直接地址为87H,不可位寻址。,图43串行口结构框图,4.2.380C51的帧格式,80C51串行口通过编程可设置4种工作方式,三种帧格式。方式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低位。方式1以10位为一帧传输,设有一个起始位“0”,8个数据位和一个停止位“1”。方式2和3以11位为一帧传输,设有1个起始位“0”,8个数据位,1个可编程位(第九数据位)D8和1个停止位“1”。,某异步通信接口按方式3传送,已知其每分钟传送3600个字符,计算其传送波特率,424波特率的设置,1方式0和方式2的波特率在方式0时,每个机器周期发送或接收一位数据,因此波特率固定为时钟频率的112。方式2的波特率,2.方式1和方式3的波特率,方式l和方式3的波特率由定时器T1的溢出率与SMOD值决定方式1和方式3的波特率T1溢出率,定时器T1作波特率发生器使用时,通常是选用自动重装载方式,即方式2。在方式2中,TL1作计数用,而自动重装载的值放在TH1内,设计数初值为X,那么每过256-X个机器周期,定时器1就会产生一次溢出。为了避免因溢出而产生不必要的中断,此时应禁止T1中断。,波特率为溢出周期之倒数,所以,(2),(1),溢出周期为:,例:8051单片机时钟振荡频率为11.0592MHZ,选用定时器T1(工作在方式2)作波特率发生器,波特率为4800bps,求定时器T1的初值X。解设波特率控制位SMOD=0,则:X=256(11.0592106(0+1)/(3844800)=250=FAH所以,(TH1)=(TL1)=FAH系统晶振频率选用11.0592MHZ,是为了使初值为整数,从而产生精确的波特率。,已知8051单片机的振荡频率为9MHz,以T1作为波特率发生器,T1工作在方式2,(PCON)=00H,要求波特率为1200b/s,试计算T1的溢出率和TH1、TL1的初始值,如果串行口工作在方式1,问一分钟最大能发送多少个字符?,(PCON)=00HSMOD=0波特率=2SMOD溢出率/32=溢出率/32=1200溢出率=32波特率=321200=38400又溢出周期T=(12/fosc)*(28-X)溢出率=fOSC/12(256-TC)TH1=TL1=TC=256-fOSC/(12溢出率)=256-9106/(1238400)=236=0ECH即TH1、TL1的初始值为0ECH串行口工作在方式1,每个字符发送10个二进制位一分钟发送的字符数=120060/10=7200个,43串行通信工作方式,4.3.1方式0用作同步移位寄存器,以8位数据为一帧,发送/接收低位在先,数据由RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.l)端送出,波特率固定为fosc12。这种方式常用于扩展IO口。,3.方式2和方式311位异步通信接口。发送或接收一帧信息包括l位起始位“0”、8位数据位、1位可编程位TB8/RB8和1位停止位“1”。方式2波特率与SMOD有关,方式3波特率取决于T1溢出率。发送操作:发送前,先根据通信协议由软件设置TB8(如作奇偶校验位或地址数据标识位),然后执行任何一条以SBUF作为目的寄存器的写指令即启动发送器,同时TB8自动装到发送移位寄存器的第9位位置上,从TXD端输出一帧数据,发送完毕,TI标志=1。,接收操作:先置位REN为1,使串行口处于允许接收状态,同时还要将RI清0。在满足这个条件的前提下,再根据SM2的状态和所接收到的RB8的状态决定是否会使RI置1,并申请中断,接收数据。当SM20时,不管RB8为0还是为1,RI都置1,此串行口将接收发来的信息。,4.1.1.5应用指导1串行通信中的常用波特率,5.4串行口应用与训练,80C51的四种工作方式中,方式0和方式2的波特率固定,见表和方式0、方式2的特点。方式1和方式3的波特率可变,其具体数值由定时器T1的溢出率和SMOD位共同决定,公式见表。定时器T1作波特率发生器时,为了防止溢出中断,应保持T1为中断禁止状态。表5-4列出了T1的常用波特率。,表5-4T1的常用波特率,2利用串行口扩展I/O口,80C51单片机串行口方式0为同步移位寄存器方式,可进行8位并行I/O口的扩展。当串行口别无它用时,可通过使用串行输入并行输出移位寄存器(如74LS164)扩展并行输出口;或使用并行输入串行输出移位寄存器(如74LS165)扩展并行输入口。这种方法不占用片外RAM地址,而且还能简化单片机系统的硬件结构。但缺点是操作速度较慢,且扩展芯片越多,速度越慢。图4-12是利用一片74LS165扩展8位并行输入口的实用电路。当移位/置入端S/由“1”变为“0”时,并行输入端的数据被置入寄存器。当S/1,且时钟禁止端(15脚)接地时,在时钟脉冲的作用下,数据由QA向QH方向(即D7D0)移动。,图5-12利用一片74LS165扩展8位并行输入口电路,图中RXD(P3.0)作为80C51的串行输入端与74LS165的串行输出端相连,TXD(P3.1)为移位脉冲输出端,与74LS165芯片的移位脉冲输入端连接,用一根I/O口线P1.0与74LS165芯片的S/相连来控制移位与置位过程。注:图中74LS165的SIN引脚为串行输入端,用于两片74LS165的串行扩展连接。,3串行通信编程基础,(1)串行口初始化编程串行口初始化应该包括对SCON、PCON和T1的初始化。对T1的初始化又包含TMOD寄存器初始化(将T1设置为波特率发生器)、根据波特率求时间常数并对TH1和TL1赋值、启动T1等过程,串口初始化格式如下,其中加括号的指令可根据情况选择使用:SIO:MOVSCON,#控制状态字;写方式字且TI=RI=0(MOVPCON,#80H);波特率加倍(MOVTMOD,#20H);T1作波特率发生器(MOVTH1,#X);选定波特率(MOVTH1,#X)(SETBTR1);启动T1(SETBEA);开串行口中断(SETBES),(2)发送程序,发送程序可以采用中断和查询两种方式设计。查询方式:TRAM:MOVA,R0;取数据MOVSBUF,A;发送一个字符WAIT:JBCTI,NEXT;等待发送结束SJMPWAITNEXT:INCR0;准备下一次发送SJMPTRAM,中断方式:ORG0023H;串行口中断入口AJMPSINTMAIN:;初始化编程TRAM:MOVA,R0;取数据MOVSBUF,A;发送第一个字符SJMP$;其它工作SINT:CLRTI;中断服务程序INCR0MOVA,R0;取数据MOVSBUF,A;发送下一个字符RETI,(3)接收程序与发送相类似,接收也可以采用中断和查询两种方式设计。当REN=1、RI=0时80C51处于等待接收状态;一旦检测到RI=1,80C51开始从SBUF读取数据。查询方式:WAIT:JBCRI,NEXT;查询等待SJMPWAITNEXT:MOVA,SBUF;读取接收数据MOVR0,A;保存数据INCR0;准备下一次接收SJMPWAIT,5.4.2基本训练,1初始化训练要求:某80C51单片机通信系统,晶振频率为12MHz,要求串行口发送8位数据,波特率1200bmp,请编写它的初始化程序。思路与计算:要选择串行口和定时器T1的工作方式,计算时间常数并赋值给TH1、TL1。我们可以利用表5-1中求波特率的公式:,初始化程序:MOVSCON,#40H;串口工作于方式1MOVPCON,#80H;SMOD=1MOVTMOD,#20H;T1作定时器,工作于方式2MOVTH1,#0CCH;装入时间常数初值MOVTL1,#0CCH;自动重装时间常数CLRET1;禁止T1中断SETBTR1;启动T1波特率发生器总结:用上述公式计算出的波特率不为整数,近似取整后,波特率也就不能精确地等于1200bps。但在异步传送中,每接收一个字符实际上都要整步一次,因此这点微小误差并不影响收发。,要求:利用80C51的串行口实现一个数据块的发送。设发送数据区首地址为58H,数据块长度(字节数)为10,串行口工作于方式1,波特率1200bps,晶振频率为11.0592MHz。思路:串行口工作于方式1时,波特率要编程设定。通常使T1工作在方式2,当波特率取1200bps时,可以查表或计算时间常数初值,得0E8H(SMOD=0时)。发送子程序TRAM清单:TRAM:MOVTMOD,#20H;T1工作在方式2MOVTH1,#0E8H;装入时间常数初值MOVTL1,#0E8H;自动重装时间常数,2串行传送训练,CLRET1;禁止T1中断SETBTR1;启动T1波特率发生器MOVSCON,#40H;串口工作于方式1MOVPCON,#00H;SMOD=0,该指令可不写MOVR1,#58H;数据发送区首址送R1MOVR5,#10;发送长度送R5LOOP:MOVA,R1;发送一帧数据MOVSBUF,AWAIT:JBCTI,NEXT;发送等待,发完一帧转去NEXTSJMPWAITNEXT:INCR1;准备取下一数据DJNZR5,LOOP;数据块发完?未发完转LOOPRET;发完,结束发送等待时为什么不用“JBTI,NEXT”指令,而用“JBCTI,NEXT”指令?,4.4.3课题与实训10串行输出控制彩灯,一实训目的1熟悉74LS164的使用,掌握串行口的基本应用方法。2学习串行口的扩展技术,掌握串行口相关寄存器的设定方法。3掌握串行口扩展显示器的电路设计原理和编程方法二课题要求利用一片AT89C51芯片,使之工作于方式0。在其串口扩展一片74LS164控制8个LED,要求使用建表方式,控制LED闪烁,其闪烁规律为:8个LED作左移2次,闪2次;右移2次,闪2次。闪烁间隔0.2秒。,三背景知识174LS164是串行输入并行输出移位寄存器,接在80C51的串行口,可以实现对8位并行数据的控制。280C51与74LS164连接时,RXD(P3.0)作为串行输出与74LS164的数据输入端(1、2)相连,TXD(P3.1)作为移位脉冲输出与74LS164的时钟脉冲输入端(8)相连,74LS164的CLR端(9)通过电阻、电容接在电源和地上。,四硬件电路,图4-13串行输出控制彩灯硬件电路,ORG0000HAJMPMAINORG0100HMAIN:MOVSCON,#00H;串口工作于方式0START:MOVDPTR,#TABLE;指向TABLE表LOOP:CLRA;清除AMOVCA,A+DPTR;从TABLE表取数据CJNEA,#05H,NEXT;取到结束码05H?没有跳到NEXTAJMPSTART;结束,重新开始NEXT:CPLA;取到数据反相MOVSBUF,A;向串口发送LOOP1:JBCTI,LOOP2;发送结束?是,跳到LOOP2AJMPLOOP1;没结束,再检测LOOP2:ACALLDELAY;延时0.2秒INCDPTR;指向下一地址AJMPLOOP,五软件设计(参考程序如下:),DELAY:MOVR7,#4;延时0.2SD1:MOVR6,#20D2:MOVR5,#123NOPDJNZR5,$DJNZR6,D2DJNZR7,D1RETTABLE:DB01H,02H,04H,08HDB10H,20H,40H,80HDB01H,02H,04H,08HDB10H,20H,40H,80HDB00H,0FFH,00H,0FFHDB80H,40H,20H,10HDB08H,04H,02H,01HDB80H,40H,20H,10HDB08H,04H,02H,01HDB00H,0FFH,00H,0FFHDB05HEND,六总结与思考174LS164无输出控制端,故串行输入过程中,输出端会不断地变化。所以一般应在74LS164和输出装置之间加接输出控制门,以保证串行输入结束后再输出数据。2如果不用建表方式,如何实现?,4.5.1单片机与显示器的串行通信,例:某车间拟设置一块生产进度显示板,显示当天已完成的产品数量(不超过256),所需的产量数据,要从主单片机传送到显示板,请帮助设计相应的传送程序。分析与设计该任务中,每当生产线上完成一台合格产品时,通过自动计数装置向主单片机外部中断输入端送出一个低电平“0”,作为请求中断信号;主单片机响应中断后,在中断服务程序中,将产量值(存放在50H中)加1,并通过串口将其送给显示板。显示版接收主单片机送来的显示数据。显示板的CPU平时运行显示程序,显示当前的产量(产量数据存放在数据存储区50H单元中)。只有当显示板的串口接收到主单片机发来的显示数据时,才会因串口中断,转去执行中断服务程序,以便将新接收到的产量数据存放到50H单元中,再返回到主程序执行显示程序。,5.5单片机串行口应用举例,1主单片机主程序发送端的主程序要完成外部中断和串行口的初始化工作,然后等待外部中断。ORG0000HAJMPMAINORG0013HAJMPSUBG;中断入口ORG0100HMAIN:MOV50H,#00H;当天产量从0开始MOVSP,#60HSETBIT1;采用边沿触发方式MOVSCON,#40H;串口工作于方式1,禁止接收MOVPCON,#00H;波特率不加倍MOVTMOD,#20H;T1工作于方式2,软件设计,MOVTH1,#0E8H;波特率为1200bpsMOVTL1,#0E8HSETBEX1;开中断SETBEA;开中断SETBTR1;打开波特率发生器AJMP$;等待中断中断服务子程序当外部中断申请中断时,表示生产线上已完成一台成品,因此中断服务程序的任务就是将产量单元50H加1,并将加1后的数值从串口输出。程序如下:ORG0200HSUBG:PUSHACCINC50HMOVA,50HMOVSBUF,A,WAIT:JBCTI,NEXTSJMPWAITNEXT:POPACCRETI2显示板的CPU主程序主程序的初始化部分与发送端基本相同,只是要将SCON的禁止接收改成允许接收。并且要一边执行显示程序,一边等待中断。显示程序从略,可参看第6章。ORG0000HAJMPMAINORG0023HAJMPSUBG;串口中断入口ORG0100HMAIN:MOV50H,#00H;当天产量从0开始MOVSP,#60H,MOVSCON,#50H;串口工作于方式1,允许接收MOVPCON,#00H;波特率不加倍MOVTMOD,#20H;T1工作于方式2MOVTH1,#0E8H;波特率为1200bpsMOVTL1,#0E8HSETBES;开串口中断SETBEA;开中断SETBTR1;打开波特率发生器WAIT:ACALLDISPLAY;转显示子程序AJMPWAIT;等待中断,中断服务子程序当接收端的串口收到单片机发来的数据时,串口申请中断。在中断服务程序中,要保护现场,将新接收到的产量数据存放到50H单元中,再返回主程序。ORG0200HSUBG:PUSHACCCLRRIMOVA,SBUFMOV50H,ANEXT:POPACCRETI,一实训目的1学习双机通信的常识。2掌握双机通信程序状态字的设置方法。3学习双机通信程序的编制方法。二课题要求利用2片AT89C51芯片,一片用作发送器,记作89C51-T,用来读入P1口指拨开关的状态;另一片用作接收器,记作89C51-R,用来接收89C51-T发送过来的指拨开关的状态,并将其在89C51-R输出的8个LED上显示出来。三背景知识1双机通信如果两个80C51单片机相距很近,将它们的串行口直接相连,即可实现双机通信。采用图5-14所示的两个80C51串行口直接相连的方法,通信距离只限于1.5m以内。如果要增加通信距离,可以在两个单片机之间采用标准异步串行接口连接,如使用RS-232C、RS-422A及RS-485等串行接口总线。,4.5.2课题与实训11双机通信,2通信协议在双机通信或多机通信时,通常要规定通信协议。所谓通信协议是指通信双方的一种约定。它对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程。本实训所用的两片AT89C51芯片,一个只作输入,另一个只作输出,形式非常简单,不用规定通信协议。,图5-14双机通信简图,四硬件电路,图5-15双机通信硬件电路,参考程序如下:AT89C51-T的发送程序ORG0000HAJMPMAINORG0100HMAIN:MOVSP,#50H;设定堆栈区MOVSCON,#40H;串行口工作在方式1,禁止接收MOVTMOD,#20H;定时器1工作在方式2MOVTL1,#0E8H;波特率为1200MOVTH1,#0E8H;SETBTR1;启动定时器1MOV30H,#0FFH;设定指拨开关初值MOVP1,#0FFH;P1口设为输入状态READ:MOVA,P1;读入指拨开关值CJNEA,30H,KEY;输入值改变则跳至KEYAJMPREAD;否则继续读指拨开关值,五软件设计,KEY:MOV30H,A;存指拨开关新值MOVSBUF,A;送串行口发送WAIT:JBCTI,READ;查看是否送完AJMPWAITENDAT89C51-R的接收程序ORG0000HAJMPMAINORG0100HMAIN:MOVSP,#50H;设定堆栈区MOVSCON,#50H;串行口工作在方式1,允许接收MOVTMOD,#20H;定时器1工作在方式2MOVTL1,#0E8H;波特率为1200MOVTH1,#0E8HSETBTR1;启动定时器1READ:JBCRI,UART;是否接收到数据,收到则跳到UARTAJMPREAD,UART:MOVA,SBUF;收到的数据送AMOVP1,A;发送至P1口AJMPREADEND六总结与提高在编写串行口应用程序时应注意这样几个问题:必须对串行口进行初始化。具体包括SCON、PCON和波特率的设定。在接收和发送一个字节完毕后必须用软件清除中断标志。本实训采用软件查询方式编程,请尝试用中断方式实现该功能。,串行口的方式2和方式3具有多机通信功能,能实现一台主单片机和若干从单片机构成的多机分布控制系统,其连接方式如图5-16所示。,图5-16多机通信示意图,5.5.3多机通信,多机通信时,充分利用单片机SCON中的多机通信控制SM2位。当从机SM2=1时,从机只接收主机发来的地址帧(特点是第9位为1),对数据帧不予理睬;当从机SM2=0时,从机可以接收主机发来所有信息。过程如下:置所有从机的SM2=1,都处于只接收地址的状态。主机发送一帧地址(前8位是地址值,第9位为1,表示该帧信息是地址)。所有从机接到地址帧后,转去执行中断,目的是将接收到的地址与自身地址相比较,二者相同,则SM2=0,否则,SM2=1。由于被呼叫从机已令SM2=0,所以它可以接收主机接下来传送的所有数据,实现与主机的通信。被呼叫从机通信完成后,置SM2=1,恢复多机通信的原始状态。,本章小结80C51单片机有一个全双工的串行口,它既可用于网络通信,也能实现串行异步通信,还可作为同步移位寄存器使用,应用非常灵活。80C51单片机的串行接口能完成以下基本任务:(1)实现数据格式化:在异步通信方式下,对来自CPU的普通并行数据,接口自动生成起止的帧数据格式。(2)进行串并转换:这是串行接口电路的重要任务。它能把计算机处理的并行数据与串行口所需的串行数据进行转换。,(3)控制数据传输速率:串行通信接口电路具有对数据传输速率波特率进行选择和控制的能力。串行口有四种工作方式:方式0、方式1、方式2、方式3,其中方式0常用于接口扩展,波特率固定;方式1常用于一般数据传送,波特率可调;方式2和方式3常用于双机或多机通信,方式2的波特率固定(SMOD确定后);方式3的波特率可调。80C51单片机作串行通信时,为提高通信质量,常采用标准串行接口RS-232C、RS-422A或RS-485等。其中RS-232C应用广泛,但传输距离短,只有几十米;而RS-485抗干扰能力强,接线简单,传输距离能达到1200米。在工业控制系统中,采用单片机与PC机组合的形式构成的分布式控制系统是今后多点现场工控系统的一个重要的发展方向。,1什么是串行通信和并行通信?各有何特点?2按照信息传送方向来分,串行通信有哪几种工作制式?80C51单片机采用哪种工作制式?3什么是同步通信和异步通信?4什么叫波特率?在80C51单片机中有几种产生波特率的方法?串行通信对波特率有什么基本的要求?580C51单片机的UART中有哪些方式采用异步数据传输?哪些方式采用同步数据传输?680C51单片机串行口有几种工作方式?由什么寄存器决定?7串行缓冲寄存器SBUF有什么作用?简述串行口接收和发送数据的过程。8串行通信时为什么一般采用标准接口?你知道的标准接口有哪些?,思考题与习题,9RS-232C和RS-485的信号逻辑电平各是什么?在与80C51单片机通信时,中间是否都要加装逻辑电平转换芯片?10某80C51单片机控制系统,主振频率为12MHz,要求串行口发送数据为8位,波特率为1200bps,请编写它的初始化程序。11串行口控制寄存器SCON中TB8、RB8起什么作用?在什么方式下使用?12请编程将内RAM40H单元中的数据从串行口移位输出至串入并出芯片74LS164,输出完成后置位P1.0。13利用80C51的串行口UART实现一个数据块的接收。设接收数据缓冲区的首地址为40H,接收数据长度为10H,串行口工作于方式2(设SMOD=1)。,14设以串行方式1进行数据传送,fosc=6MHz,波特率为2400bps(设SMOD=1)。发送的8个数据依次存在外RAM首址4000H单元中,先发送数据长度,后发送8个数据,请编写发送子程序。15在5.4.2节的串行传送训练中如果增加奇偶校验功能,软件该如何设计?(提示:因发送的是8位数据字节,故奇偶校验位需另外安排,不能采用方式1工作状态,可以采用UART的方式3:把TB8嵌入发送程序中作奇偶校验位。波特率设置和发送缓冲区不变。),
展开阅读全文