1、本章学习目标本章学习目标:了解并行通信与串行通信的含义了解并行通信与串行通信的含义理解波特率的概念,学会波特率的计算方法理解波特率的概念,学会波特率的计算方法能按要求正确设置特殊功能寄存器能按要求正确设置特殊功能寄存器SCON和和PCON的的SMOD位位能区分串行口的能区分串行口的4种工作方式,种工作方式,熟悉方式熟悉方式1、方式、方式2、方、方式式3 程序的编制方法程序的编制方法知道知道RS-232C、RS-422A和和RS485 基本性能基本性能理解双机通信和多机通信的基本过程理解双机通信和多机通信的基本过程能读懂教材中的控制实例,学会编写同等难度的控制程能读懂教材中的控制实例,学会编写同
2、等难度的控制程序序5.1串行通信的基础知识 在实际应用中,在实际应用中,80C51单片机经常要与外设进行信息交换;单片机经常要与外设进行信息交换;单片机与单片机之间或单片机与计算机之间往往也要交换信息,单片机与单片机之间或单片机与计算机之间往往也要交换信息,这些信息交换都可以称为这些信息交换都可以称为通信通信。传送数据传送数据1101 0010B时并行通信和串行通信的示意图。时并行通信和串行通信的示意图。5.1.1串行通信的制式串行通信的制式按照信息传送的方向,串行通信可分为按照信息传送的方向,串行通信可分为3种制式。种制式。1单工制式单工制式2半双工制式半双工制式3全双工制式全双工制式 5.
3、1.2串行通信的方式串行通信的方式串行通信有两种基本的通信方式:串行通信有两种基本的通信方式:同步通信与异步通信。同步通信与异步通信。1.异步通信异步通信(Asynchronous Communication)在异步通信中,数据通常是以字符在异步通信中,数据通常是以字符(或字节或字节)为单位组成为单位组成字符帧传送的。字符帧由发送端逐帧发送,接收端逐帧接收。字符帧传送的。字符帧由发送端逐帧发送,接收端逐帧接收。发送端和接收端由各自的时钟来控制。这两个时钟源可以彼发送端和接收端由各自的时钟来控制。这两个时钟源可以彼此独立、互不同步。此独立、互不同步。在帧格式中,一个字符由在帧格式中,一个字符由4
4、个部分组成:起始位、二进个部分组成:起始位、二进制数据位、奇偶校验位和停止位。下图给出了典型的异步帧制数据位、奇偶校验位和停止位。下图给出了典型的异步帧格式。格式。5.1.2串行通信的方式串行通信的方式2同步通信(同步通信(Synchronous Communication)同步通信在发送一组数据时,只在开始用同步通信在发送一组数据时,只在开始用12个同步字符作为双方取得同步的号令,然后连续发个同步字符作为双方取得同步的号令,然后连续发送整组数据。不像异步通信那样将字符一个一个地送整组数据。不像异步通信那样将字符一个一个地分开来传送。格式下图所示。分开来传送。格式下图所示。5.1.3串行通信的
5、传输速率串行通信的传输速率 所谓传输速率就是指每秒传输多少位,所谓传输速率就是指每秒传输多少位,传输速率也称波特率(传输速率也称波特率(bps)。)。如果数据传送的速率是如果数据传送的速率是120帧帧/秒秒,每个,每个帧包含帧包含10位位,则波特率为,则波特率为 10120=1200 bps,于是每位传送的时间,于是每位传送的时间 T=1/1200=0.833ms 标准波特率系列为标准波特率系列为110、300、600、1200、1800、2400、4800、9600和和19200bps。5.1.4调制解调器(调制解调器(MODEM 又称猫又称猫)在进行远程异步串行数据通信时,二进在进行远程异
6、步串行数据通信时,二进制的数据位在传输时会出现畸变制的数据位在传输时会出现畸变,可以利用,可以利用调制解调器解决这个问题。调制解调器解决这个问题。利用调制解调器进行数据远距离串行通利用调制解调器进行数据远距离串行通信的过程如下图所示。信的过程如下图所示。5.2串行口的基本结构和工作方式串行口的基本结构和工作方式 5.2.1串行口的基本组成串行口的基本组成 全双工的串行通信口,可同时接收和发送。接收和发送缓冲器SBUF在物理上共用一个地址99H。发送缓冲器SBUF只能写入不能读出。接收缓冲器SBUF只能读出不能写入。5.2.2串行口的特殊功能控制寄存器串行口的特殊功能控制寄存器 与串行口有关的特
7、殊功能寄存器有与串行口有关的特殊功能寄存器有SBUFSBUF、SCONSCON、PCONPCON,与串行口中断有关的特殊功能寄存器有,与串行口中断有关的特殊功能寄存器有IEIE、IP.IP.1 1串行口发送串行口发送/接收缓冲器接收缓冲器SBUFSBUF(99H99H)2 2串行口控制寄存器串行口控制寄存器SCONSCON SCONSCON的各位的定义和功能如下:的各位的定义和功能如下:SM0、SM1:串行口工作方式选择位(内容见5.2.3节)。SM2:多机通信控制位。具体用法见5.3.3节。REN:串行接收允许位。由软件置1或清0。软件置1时,串行口允许接收,清0后禁止接收。TB8:在方式2
8、和方式3中是发送的第9位数据。RB8:在方式2和方式3中是接收的第9位数据。TI:发送中断标志位。发送结束时由硬件置位。该位必须用软该位必须用软件清零。件清零。RI:接收中断标志位。结束接收时由硬件置位。该位必须用软该位必须用软件清零件清零。3电源控制寄存器电源控制寄存器PCON 串行口借用了电源控制寄存器串行口借用了电源控制寄存器PCONPCON的最高位。的最高位。PCONPCON是是8 8位寄存器,字节地址为位寄存器,字节地址为87H87H,不可进行位寻址。它的,不可进行位寻址。它的低低4 4位全部用于位全部用于80C51/80C3180C51/80C31子系列单片机的电源控制。子系列单片
9、机的电源控制。只有最高位只有最高位SMODSMOD位用于串行口波特率系数的控制。当位用于串行口波特率系数的控制。当SMODSMODl l时,方式时,方式1 1、2 2、3 3的波特率加倍,否则不加倍。的波特率加倍,否则不加倍。PCONPCON的格式如下:的格式如下:5.2.3串行口的四种工作方式串行口的四种工作方式 80C5180C51单片机串行口有单片机串行口有4 4种工作方式,用特殊功能寄种工作方式,用特殊功能寄存器存器SCONSCON中的中的SM0SM0、SM1SM1两位进行设定,见表两位进行设定,见表5-15-1。(1)特点)特点 用于串行用于串行I/OI/O口扩展,有固定的波特率,为
10、口扩展,有固定的波特率,为fOSC/12/12。同步发送同步发送/接收功能,由接收功能,由TXD提供移位脉冲,提供移位脉冲,RXD用作数据输入用作数据输入/输出通道。输出通道。发送接收发送接收8 8位数据,低位在前,高位在后。位数据,低位在前,高位在后。(2)发送操作)发送操作 由指令由指令MOV SBUF,A 启动发送操作,发送时由启动发送操作,发送时由TXD输出移位输出移位脉冲,脉冲,RXD发送发送SBUF中的数据。发送完中的数据。发送完8位数据后,位数据后,TI自动置自动置1,请,请求中断。要继续发送时,求中断。要继续发送时,TI必须由指令清必须由指令清0(CLR TI)。)。(3)接收
11、操作)接收操作 在在RI=0的前提下,用指令置的前提下,用指令置REN=1,可以启动一帧数据的接收。,可以启动一帧数据的接收。同样由同样由TXD输出移位脉冲,由输出移位脉冲,由RXD接收串行数据。接收完一帧接收串行数据。接收完一帧RI自动自动置置1,请求中断。想继续接收时要用指令清除,请求中断。想继续接收时要用指令清除RI。1 1方式方式0 02 2方式方式1 1(1)特点)特点 8 8位异步串行通信位异步串行通信UART接口。接口。帧结构为帧结构为1010位,包括起始位位,包括起始位0 0,8 8位数据位,位数据位,1 1位停止位。位停止位。波特率由软件设置,由波特率由软件设置,由T1 的溢
12、出率决定。的溢出率决定。(2)发送操作)发送操作 由指令由指令MOV SBUF,A 启动启动A中的数据从中的数据从TXD端异步发送。发端异步发送。发送完一帧数据后,送完一帧数据后,TI自动置自动置1,请求中断。要继续发送时,请求中断。要继续发送时,TI必须由必须由指令清指令清0(CLR TI)。)。(3)接收操作)接收操作 在在RI=0的前提下,用指令置的前提下,用指令置REN=1,启动一帧数据的接收。串,启动一帧数据的接收。串行口采样行口采样RXD,当采样到,当采样到1至至0的跳变时,表明接到串行数据的起始位,的跳变时,表明接到串行数据的起始位,开始接收一帧数据,直到停止位到来时,把停止位送
13、到开始接收一帧数据,直到停止位到来时,把停止位送到RB8中,此时中,此时RI自动置自动置1,请求中断并通知,请求中断并通知CPU从从SBUF中取走已接收到的数据中取走已接收到的数据。想继续接收时要用指令清除想继续接收时要用指令清除RI。方式方式2 2和方式和方式3 3具有多机通信功能,两种方式具有多机通信功能,两种方式除了波特率设置不同外,其余功能完全相同。除了波特率设置不同外,其余功能完全相同。(1 1)特点)特点 8 8位异步串行通信位异步串行通信UARTUART接口。帧结构为接口。帧结构为1111位位,包括起始位,包括起始位0 0,8 8位数据位,位数据位,1 1位可编程位位可编程位TB
14、8/RB8TB8/RB8,1 1位停止位。位停止位。方式方式2 2的波特率固定,由的波特率固定,由PCONPCON中的中的SMODSMOD位选位选择,当择,当SMOD=0SMOD=0时,波特率为时,波特率为fOSC/64fOSC/64;当;当SMOD=1SMOD=1时,波特率为时,波特率为fOSC/32fOSC/32;SMODSMOD位状态用软件设置位状态用软件设置。见表。见表5-15-1。3 3方式方式2 2和方式和方式3 3(2 2)发送操作)发送操作 发送操作前,用指令定义发送操作前,用指令定义TB8TB8(如作为奇偶(如作为奇偶校验位或地址校验位或地址/数据标志位),由指令数据标志位)
15、,由指令MOV SBUFMOV SBUF,A A 将将A A中的数据送入中的数据送入SBUFSBUF后启动发送操作;在后启动发送操作;在发送操作中,已定义的发送操作中,已定义的TB8TB8位能自动加入待发送位能自动加入待发送的的8 8位数据之后构成第位数据之后构成第9 9位,这样组成的一帧完整位,这样组成的一帧完整数据自动从数据自动从TXDTXD端异步发送;发送完成后,端异步发送;发送完成后,TITI自自动置动置1 1,请求中断。要继续发送时,请求中断。要继续发送时,TITI必须由指必须由指令清令清0 0(CLR TICLR TI)。)。在多机通信的发送操作中,用在多机通信的发送操作中,用TB
16、8TB8作地址作地址/数数据标志位。据标志位。TB8=1TB8=1,地址帧;,地址帧;TB8=0TB8=0,数据帧。,数据帧。3 3方式方式2 2和方式和方式3 3(3 3)接收操作)接收操作 在在RI=0RI=0的前提下,用指令置的前提下,用指令置REN=1REN=1,启动一帧数,启动一帧数据的接收,将接收数据的第据的接收,将接收数据的第9 9位送入位送入RB8RB8。该数据能否。该数据能否接收,要由接收,要由SM2SM2和和RB8RB8的状态决定:的状态决定:SM2=0SM2=0时,串行口不看时,串行口不看RB8RB8状态,无条件接收。状态,无条件接收。SM2=1SM2=1是多机通信方式,
17、接收到的是多机通信方式,接收到的RB8RB8是地址是地址/数据标数据标志位:志位:若若RB8=1RB8=1,接收的信息是地址,此时,接收的信息是地址,此时RIRI自动置自动置1 1,串行口接收发送来的数据。串行口接收发送来的数据。若若RB8=0RB8=0,接收的信息是数据。对于,接收的信息是数据。对于SM2=1SM2=1的从机的从机,RIRI不置不置1 1,此数据丢失;对于,此数据丢失;对于SM2=0SM2=0的从机,的从机,SBUFSBUF自自动接收发来的数据。动接收发来的数据。3 3方式方式2 2和方式和方式3 3 80C51 80C51单片机常与其它单片机常与其它5151单片机或单片机或
18、PCPC机进行串行机进行串行通信。通信。80C5180C51单片机串行接口的信号电平为单片机串行接口的信号电平为TTLTTL类型,抗类型,抗干扰能力差,传输距离短。为了提高串行通信的可靠干扰能力差,传输距离短。为了提高串行通信的可靠性,延长通信距离,工程设计人员一般采用标准串行性,延长通信距离,工程设计人员一般采用标准串行接口,如接口,如RS-232CRS-232C、RS-422ARS-422A和和RS-485RS-485等。这三种接口等。这三种接口最初都是由美国电子工业协会(最初都是由美国电子工业协会(EIAEIA)制订并发布的。)制订并发布的。5.35.3串行通信的常用标准接口串行通信的常
19、用标准接口 5.3.1 RS-232C 5.3.1 RS-232C接口接口 RS-232C(又称(又称 EIA RS-232-C)是目前)是目前PC机与通信工机与通信工业中应用最广泛的一种串行接口。图业中应用最广泛的一种串行接口。图5-7是利用是利用RS-232C通过通过电话网实现远程通信的示意图。电话网实现远程通信的示意图。图图5-7 RS-232C通过电话网实现远程通信的示意图通过电话网实现远程通信的示意图1 1接口信号接口信号 RS-232C是是EIA在在1969年推出的。全名是年推出的。全名是“数据终端设备数据终端设备DTE(如计算机和各种终端机)和数据通讯设备(如计算机和各种终端机)
20、和数据通讯设备DCE(如调(如调制解调器制解调器MODEM)之间串行二进制数据交换接口技术标准)之间串行二进制数据交换接口技术标准”。它适合于数据传输速率在它适合于数据传输速率在020 000bps范围内的通信。范围内的通信。图图5-8 RS-232C串口结构串口结构 目前较为常用的目前较为常用的RS-232C有有9针串口(针串口(DB9)和)和25针串针串口(口(DB25),结构分别如图),结构分别如图5-8所示。在保证通信准确性所示。在保证通信准确性的前提下,如果通信距离较近的前提下,如果通信距离较近(小于小于12米米),可以用电缆线,可以用电缆线直接连接,图直接连接,图5-9是这种连接方
21、式的示意图;若距离较远,是这种连接方式的示意图;若距离较远,需附加调制解调器(需附加调制解调器(MODEM),见图),见图5-7。图图5-9 近程通信示意图近程通信示意图 实际上实际上DB25中有许多引脚很少使用,在计算机与终端通中有许多引脚很少使用,在计算机与终端通讯中一般只使用讯中一般只使用3-9条引线。最常用的条引线。最常用的9条引线的信号内容见条引线的信号内容见表表5-2所示。所示。最为简单且常用的是三线制接法,即地、接收数最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。据和发送数据三脚相连。传输线采用屏蔽双绞线。如图传输线采用屏蔽双绞线。如图5-10 所示。所示。图图
22、5-10 RS-232C串口结构串口结构表表5-2 DB95-2 DB9和和DB25DB25的常用信号脚说明的常用信号脚说明 2.2.逻辑电平逻辑电平 RS-232C是早期为促进公用电话网络进行数据是早期为促进公用电话网络进行数据通信而制定的标准。它采用负逻辑,即通信而制定的标准。它采用负逻辑,即-3V-15V规定为规定为“1”;+3V+15V规定为规定为“0”;-3V+3V为过渡区,不做定义。为过渡区,不做定义。3 3电平转换芯片与接口电路电平转换芯片与接口电路 RS232C信号的电平和单片机串口信号的电平不一致,信号的电平和单片机串口信号的电平不一致,必须进行二者之间的电平转换。常用芯片有
23、必须进行二者之间的电平转换。常用芯片有MC1488(TTL转换成转换成RS232C信号)、信号)、MC1489(RS232C信号转换成信号转换成TTL)等。另一种常用的集成电平转换芯片)等。另一种常用的集成电平转换芯片MAX232可以实可以实现现RS232CTTL电平的双向转换,它只使用单一的电平的双向转换,它只使用单一的5V电源供电,配接电源供电,配接4个个1F电解电容即可完成电解电容即可完成RS232电平与电平与TTL电平之间的转换。其原理图如图电平之间的转换。其原理图如图5-11所示。转换完毕的所示。转换完毕的串口信号串口信号TXD、RXD直接和直接和80C51的串行口连接。的串行口连接
24、。图图5-11 5-11 电平匹配原理图电平匹配原理图注:注:1.为提高电路抗干扰能力,为提高电路抗干扰能力,C1C4要用钽电容要用钽电容1.0F/16V,且尽,且尽 量靠量靠近近MAX232;2.MAX232对噪声很敏感,在对噪声很敏感,在VCC与与GND之间加之间加C5=0.1F,起去耦作,起去耦作用用 1 1性能特点性能特点 RS-485RS-485以良好的抗噪声干扰性,长距离传输特性和多站能力等优点成为以良好的抗噪声干扰性,长距离传输特性和多站能力等优点成为首选的串行接口。表现为:首选的串行接口。表现为:接口信号电平比接口信号电平比RS-232CRS-232C低(低(1.5V1.5V6
25、V6V),不易损坏接口电路芯片),不易损坏接口电路芯片,且该电平与,且该电平与TTLTTL电平兼容,可方便与电平兼容,可方便与TTL TTL 电路连接。电路连接。RS-485 RS-485传输数据的速度较快,最高速率达到传输数据的速度较快,最高速率达到10Mbps 10Mbps。采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性能好。干扰性能好。最大传输距离标准值为最大传输距离标准值为40004000英尺,折合英尺,折合12191219米,实际上可达米,实际上可达 30003000米。米。RS-485 RS-485
26、接口允许在总线上同时连接接口允许在总线上同时连接3232个发送器和个发送器和3232个接收器,即具有多个接收器,即具有多站能力,这样用户可以利用单一的站能力,这样用户可以利用单一的RS-485RS-485接口方便地建立起设备网络。接口方便地建立起设备网络。因因RS-485RS-485接口组成的半双工网络一般只需二根连线,所以接口组成的半双工网络一般只需二根连线,所以RS-485RS-485接口均接口均采用屏蔽双绞线传输。采用屏蔽双绞线传输。RS-485RS-485接口连接器采用接口连接器采用DB9DB9的的9 9芯插头座。与智能终端芯插头座。与智能终端RS-485RS-485接口采用接口采用D
27、B9DB9(孔);与键盘连接的键盘接口(孔);与键盘连接的键盘接口RS-485RS-485采用采用DB9DB9(针)。(针)。5.3.2 RS-4855.3.2 RS-485接口接口2 2、与其它标准接口的对照、与其它标准接口的对照表表5-3 列出了列出了RS-485与其它标准接口的对照表与其它标准接口的对照表接口标准RS-232CRS-422ARS-485功能双向,全双工双向,全双工双向,半双工工作方式单端差分差分逻辑“0”电平3V15V2V6V1.5V6V逻辑“1”电平-3V-15V-2V-6V-1.5V-6V节点数1收、1发1发10收1发32收最大传输距离15米1219米1219米最大传
28、输速率20Kb/S10Mb/s10Mb/s驱动器加载输出电压5V15V2V1.5V接收器输入电阻()3K7K4K(最小)12K抗干扰能力弱强强 5.4.15.4.1应用指导应用指导1 1串行通信中的常用波特率串行通信中的常用波特率5.45.4串行口应用与训练串行口应用与训练 80C51的四种工作方式中,方式的四种工作方式中,方式0和方式和方式2的波特率的波特率固定,见表固定,见表5-1和方式和方式0、方式、方式2的特点。方式的特点。方式1和方式和方式3的波特率可变,其具体数值由定时器的波特率可变,其具体数值由定时器T1的溢出率和的溢出率和SMOD位共同决定,公式见表位共同决定,公式见表5-1。
29、定时器定时器T1作波特率发生器时,为了防止溢出中断,作波特率发生器时,为了防止溢出中断,应保持应保持T1为中断禁止状态。表为中断禁止状态。表5-4列出了列出了T1的常用波特的常用波特率。率。表表5-4 T15-4 T1的常用波特率的常用波特率 2 2利用串行口扩展利用串行口扩展I/OI/O口口 80C51单片机串行口方式单片机串行口方式0为同步移位寄存器方式,可进行为同步移位寄存器方式,可进行8位位并行并行I/O口的扩展。当串行口别无它用时,可通过使用串行输入并口的扩展。当串行口别无它用时,可通过使用串行输入并行输出移位寄存器(如行输出移位寄存器(如74LS164)扩展并行输出口;或使用并行输
30、)扩展并行输出口;或使用并行输入串行输出移位寄存器(如入串行输出移位寄存器(如74LS165)扩展并行输入口。这种方法)扩展并行输入口。这种方法不占用片外不占用片外RAM地址,而且还能简化单片机系统的硬件结构。但地址,而且还能简化单片机系统的硬件结构。但缺点是操作速度较慢,且扩展芯片越多,速度越慢。缺点是操作速度较慢,且扩展芯片越多,速度越慢。图图5-12是利用一片是利用一片74LS165扩展扩展8位并行输入口的实用电路。位并行输入口的实用电路。当移位当移位/置入端置入端S/由由“1”变为变为“0”时,并行输入端的数据被置入寄时,并行输入端的数据被置入寄存器。当存器。当S/1,且时钟禁止端(,
31、且时钟禁止端(15脚)接地时,在时钟脉冲的作脚)接地时,在时钟脉冲的作用下,数据由用下,数据由QA向向QH方向(即方向(即D7D0)移动。)移动。图图5-12 5-12 利用一片利用一片74LS16574LS165扩展扩展8 8位并行输入口电路位并行输入口电路 图中图中RXD(P3.0)作为)作为80C51的串行输入端与的串行输入端与74LS165的串行输出的串行输出端相连,端相连,TXD(P3.1)为移位脉冲输出端,与)为移位脉冲输出端,与74LS165芯片的移位脉冲芯片的移位脉冲输入端连接,用一根输入端连接,用一根I/O口线口线P1.0与与74LS165芯片的芯片的S/相连来控制移位与相连
32、来控制移位与置位过程。置位过程。注:图中注:图中74LS16574LS165的的SINSIN引脚为串行输入端,用于两片引脚为串行输入端,用于两片74LS16574LS165的串行扩展的串行扩展连接。连接。3 3串行通信编程基础串行通信编程基础 (1)串行口初始化编程)串行口初始化编程 串行口初始化应该包括对串行口初始化应该包括对SCON、PCON和和T1的初始化。对的初始化。对T1的初始化又的初始化又包含包含TMOD寄存器初始化(将寄存器初始化(将T1设置为波特率发生器)、根据波特率求时间常设置为波特率发生器)、根据波特率求时间常数并对数并对TH1和和TL1赋值、启动赋值、启动T1等过程,串口
33、初始化格式如下,其中加括号的等过程,串口初始化格式如下,其中加括号的指令可根据情况选择使用:指令可根据情况选择使用:SIO:MOV SCON,#控制状态字控制状态字;写方式字且;写方式字且TI=RI=0 (MOV PCON,#80H);波特率加倍;波特率加倍 (MOV TMOD,#20H);T1作波特率发生器作波特率发生器 (MOV TH1,#X);选定波特率;选定波特率 (MOV TH1,#X)(SETB TR1);启动;启动T1 (SETB EA);开串行口中断;开串行口中断 (SETB ES)(2 2)发送程序)发送程序 发送程序可以采用中断和查询两种方式设计。发送程序可以采用中断和查询
34、两种方式设计。查询方式:查询方式:TRAM:MOV A,R0 ;取数据;取数据 MOVSBUF,A ;发送一个字符;发送一个字符WAIT:JBCTI,NEXT ;等待发送结束;等待发送结束 SJMPWAITNEXT:INCR0 ;准备下一次发送;准备下一次发送 SJMPTRAM 中断方式:中断方式:ORG 0023H ;串行口中断入口;串行口中断入口 AJMP SINT MAIN:;初始化编程;初始化编程 TRAM:MOV A,R0 ;取数据;取数据MOV SBUF,A ;发送第一个字符;发送第一个字符 SJMP$;其它工作;其它工作 SINT:CLR TI ;中断服务程序;中断服务程序INC
35、 R0MOV A,R0 ;取数据;取数据MOV SBUF,A ;发送下一个字符;发送下一个字符RETI (3)接收程序)接收程序 与发送相类似,接收也可以采用中断和查询两种方式设计。与发送相类似,接收也可以采用中断和查询两种方式设计。当当REN=1、RI=0时时80C51处于等待接收状态;一旦检测到处于等待接收状态;一旦检测到RI=1,80C51开始从开始从SBUF读取数据。读取数据。查询方式:查询方式:WAIT:JBCRI,NEXT;查询等待;查询等待 SJMPWAIT NEXT:MOVA,SBUF ;读取接收数据;读取接收数据MOVR0,A ;保存数据;保存数据INC R0 ;准备下一次接
36、收;准备下一次接收SJMPWAIT5.4.2 5.4.2 基本训练基本训练 1初始化训练初始化训练 要求:某要求:某80C51单片机通信系统,晶振频率为单片机通信系统,晶振频率为12MHz,要求串行口发送,要求串行口发送8位位数据,波特率数据,波特率1200bmp,请编写它的初始化程序。,请编写它的初始化程序。思路与计算:要选择串行口和定时器思路与计算:要选择串行口和定时器T1的工作方式,计算时间常数并赋值给的工作方式,计算时间常数并赋值给TH1、TL1。我们可以利用表。我们可以利用表5-1中求波特率的公式:中求波特率的公式:初始化程序:初始化程序:MOV SCON,#40H ;串口工作于方式
37、;串口工作于方式1 MOV PCON,#80H ;SMOD=1 MOV TMOD,#20H ;T1 作定时器,工作于方式作定时器,工作于方式2 MOV TH1,#0CCH ;装入时间常数初值;装入时间常数初值 MOV TL1,#0CCH ;自动重装时间常数;自动重装时间常数 CLR ET1 ;禁止;禁止T1中断中断 SETB TR1 ;启动;启动T1波特率发生器波特率发生器 总结:用上述公式计算出的波特率不为整数,近似取整后,波特率也就不总结:用上述公式计算出的波特率不为整数,近似取整后,波特率也就不能精确地等于能精确地等于1200bps。但在异步传送中,每接收一个字符实际上都要整步一。但在异
38、步传送中,每接收一个字符实际上都要整步一次,因此这点微小误差并不影响收发。次,因此这点微小误差并不影响收发。要求:要求:利用利用80C51的串行口实现一个数据块的发送。设发送数据区的串行口实现一个数据块的发送。设发送数据区首地址为首地址为58H,数据块长度(字节数)为,数据块长度(字节数)为10,串行口工作于方式,串行口工作于方式1,波特率波特率1200bps,晶振频率为,晶振频率为11.0592MHz。思路:思路:串行口工作于方式串行口工作于方式1时,波特率要编程设定。通常使时,波特率要编程设定。通常使T1工作工作在方式在方式2,当波特率取,当波特率取1200bps时,可以查表或计算时间常数
39、初值,时,可以查表或计算时间常数初值,得得0E8H(SMOD=0时)。时)。发送子程序发送子程序TRAM清单:清单:TRAM:MOV TMOD,#20H ;T1工作在方式工作在方式2 MOV TH1,#0E8H;装入时间常数初值;装入时间常数初值 MOV TL1,#0E8H ;自动重装时间常数;自动重装时间常数2 2串行传送训练串行传送训练 CLR ET1 ;禁止;禁止T1中断中断 SETB TR1 ;启动;启动T1波特率发生器波特率发生器 MOV SCON,#40H ;串口工作于方式;串口工作于方式1 MOV PCON,#00H ;SMOD=0,该指令可不写,该指令可不写 MOV R1,#5
40、8H ;数据发送区首址送;数据发送区首址送R1 MOV R5,#10 ;发送长度送;发送长度送R5LOOP:MOV A,R1 ;发送一帧数据;发送一帧数据 MOV SBUF,A WAIT:JBC TI,NEXT ;发送等待,发完一帧转去;发送等待,发完一帧转去NEXT SJMP WAIT NEXT:INC R1 ;准备取下一数据;准备取下一数据 DJNZ R5,LOOP ;数据块发完?未发完转;数据块发完?未发完转LOOP RET ;发完,结束;发完,结束 发送等待时为什么不用发送等待时为什么不用“JB TI,NEXT”指令,而用指令,而用“JBC TI,NEXT”指令?指令?5.4.3 5.
41、4.3 课题与实训课题与实训10 10 串行输出控制彩灯串行输出控制彩灯一实训目的一实训目的1熟悉熟悉74LS164的使用,掌握串行口的基本应用方法。的使用,掌握串行口的基本应用方法。2学习串行口的扩展技术,掌握串行口相关寄存器的设定方法。学习串行口的扩展技术,掌握串行口相关寄存器的设定方法。3掌握串行口扩展显示器的电路设计原理和编程方法掌握串行口扩展显示器的电路设计原理和编程方法二课题要求二课题要求 利用一片利用一片AT89C51芯片,使之工作于方式芯片,使之工作于方式0。在其串口扩展。在其串口扩展一片一片74LS164控制控制8个个LED,要求使用建表方式,控制,要求使用建表方式,控制LE
42、D闪烁,闪烁,其闪烁规律为:其闪烁规律为:8个个LED作左移作左移2次,闪次,闪2次;右移次;右移2次,闪次,闪2次。次。闪烁间隔闪烁间隔0.2秒。秒。三背景知识三背景知识174LS164是串行输入并行输出移位寄存器,接在是串行输入并行输出移位寄存器,接在80C51的串行口,的串行口,可以实现对可以实现对8位并行数据的控制。位并行数据的控制。280C51与与74LS164连接时,连接时,RXD(P3.0)作为串行输出与)作为串行输出与74LS164的数据输入端(的数据输入端(1、2)相连,)相连,TXD(P3.1)作为移位脉冲)作为移位脉冲输出与输出与74LS164的时钟脉冲输入端(的时钟脉冲
43、输入端(8)相连,)相连,74LS164的的CLR端端(9)通过电阻、电容接在电源和地上。)通过电阻、电容接在电源和地上。四硬件电路四硬件电路 图图5-13 串行输出控制彩灯硬件电路串行输出控制彩灯硬件电路 ORG 0000H AJMP MAIN ORG 0100H MAIN:MOV SCON,#00H;串口工作于方式;串口工作于方式0START:MOV DPTR,#TABLE;指向;指向TABLE表表LOOP:CLR A;清除;清除A MOVC A,A+DPTR;从;从TABLE表取数据表取数据 CJNE A,#05H,NEXT;取到结束码;取到结束码05H?没有跳到?没有跳到NEXT AJ
44、MP START;结束,重新开始;结束,重新开始NEXT:CPL A;取到数据反相;取到数据反相 MOV SBUF,A;向串口发送;向串口发送LOOP1:JBC TI,LOOP2;发送结束?是,跳到;发送结束?是,跳到LOOP2 AJMP LOOP1;没结束,再检测;没结束,再检测LOOP2:ACALL DELAY;延时;延时0.2秒秒 INC DPTR;指向下一地址;指向下一地址 AJMP LOOP五软件设计五软件设计(参考程序如下:参考程序如下:)DELAY:MOV R7,#4 ;延时0.2SD1:MOV R6,#20 D2:MOV R5,#123 NOP DJNZ R5,$DJNZ R6
45、,D2 DJNZ R7,D1 RETTABLE:DB 01H,02H,04H,08H DB 10H,20H,40H,80H DB 01H,02H,04H,08H DB 10H,20H,40H,80H DB 00H,0FFH,00H,0FFH DB 80H,40H,20H,10H DB 08H,04H,02H,01H DB 80H,40H,20H,10H DB 08H,04H,02H,01H DB 00H,0FFH,00H,0FFH DB 05H END六总结与思考六总结与思考174LS164无输出控无输出控制端,故串行输入过程制端,故串行输入过程中,输出端会不断地变中,输出端会不断地变化。所以
46、一般应在化。所以一般应在74LS164和输出装置之和输出装置之间加接输出控制门,以间加接输出控制门,以保证串行输入结束后再保证串行输入结束后再输出数据。输出数据。2如果不用建表方式,如果不用建表方式,如何实现?如何实现?5.5.1 5.5.1 单片机与显示器的串行通信单片机与显示器的串行通信 例:某车间拟设置一块生产进度显示板,显示当天已完成的产品数量例:某车间拟设置一块生产进度显示板,显示当天已完成的产品数量(不超过(不超过256),所需的产量数据,要从主单片机传送到显示板,请帮助设),所需的产量数据,要从主单片机传送到显示板,请帮助设计相应的传送程序。计相应的传送程序。分析与设计分析与设计
47、 该任务中,每当生产线上完成一台合格产品时,通过自动计数装置向主该任务中,每当生产线上完成一台合格产品时,通过自动计数装置向主单片机外部中断输入端送出一个低电平单片机外部中断输入端送出一个低电平“0”,作为请求中断信号;主单片,作为请求中断信号;主单片机响应中断后,在中断服务程序中,将产量值(存放在机响应中断后,在中断服务程序中,将产量值(存放在50H中)加中)加1,并通,并通过串口将其送给显示板。过串口将其送给显示板。显示版接收主单片机送来的显示数据。显示板的显示版接收主单片机送来的显示数据。显示板的CPU平时运行显示程序,平时运行显示程序,显示当前的产量显示当前的产量(产量数据存放在数据存
48、储区产量数据存放在数据存储区50H单元中单元中)。只有当显示板的。只有当显示板的串口接收到主单片机发来的显示数据时,才会因串口中断,转去执行中断串口接收到主单片机发来的显示数据时,才会因串口中断,转去执行中断服务程序,以便将新接收到的产量数据存放到服务程序,以便将新接收到的产量数据存放到50H单元中,再返回到主程序单元中,再返回到主程序执行显示程序。执行显示程序。5.5 单片机串行口应用举例1主单片机主单片机主程序主程序发送端的主程序要完成外部中断和串行口的初始化工作,然后等待外部中断。发送端的主程序要完成外部中断和串行口的初始化工作,然后等待外部中断。ORG 0000H AJMP MAIN
49、ORG 0013H AJMP SUBG ;中断入口;中断入口 ORG 0100H MAIN:MOV 50H,#00H ;当天产量从;当天产量从0开始开始 MOV SP,#60H SETB IT1;采用边沿触发方式;采用边沿触发方式 MOV SCON,#40H;串口工作于方式;串口工作于方式1,禁止接收,禁止接收 MOV PCON,#00H;波特率不加倍;波特率不加倍 MOV TMOD,#20H;T1工作于方式工作于方式2 软件设计软件设计 MOV TH1,#0E8H;波特率为;波特率为1200bps MOV TL1,#0E8H SETB EX1;开中断;开中断 SETB EA;开中断;开中断
50、SETB TR1;打开波特率发生器;打开波特率发生器 AJMP$;等待中断;等待中断中断服务子程序中断服务子程序 当外部中断申请中断时,表示生产线上已完成一台成品,因此中断服当外部中断申请中断时,表示生产线上已完成一台成品,因此中断服务程序的任务就是将产量单元务程序的任务就是将产量单元50H加加1,并将加,并将加1后的数值从串口输出。程序后的数值从串口输出。程序如下:如下:ORG 0200HSUBG:PUSH ACC INC 50H MOV A,50H MOV SBUF,AWAIT:JBC TI,NEXT SJMP WAITNEXT:POP ACC RETI2显示板的显示板的CPU主程序主程序