单片机UART串行接口课件_第1页
单片机UART串行接口课件_第2页
单片机UART串行接口课件_第3页
单片机UART串行接口课件_第4页
单片机UART串行接口课件_第5页
已阅读5页,还剩179页未读 继续免费阅读

下载本文档

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

文档简介

第七章UART串行接口

串行通信是CPU与外界交换信息的一种基本通信方式。为了实现串行通信,绝大多数单片机都配置了UART串行接口。1第七章UART串行接口串行通信是CPU与外界交7.1串行通信概述

计算机与外界的信息交换称为通信。基本的通信方式有两种。并行通信(parallelcommunication):所传送数据的各位同时发送或接收。串行通信(serialcommunication):所传送数据的各位按顺序一位一位地发送或接收。27.1串行通信概述计算机与外界的信息交换称为通信在并行通信中,一个并行数据占多少位二进制数,就要多少根传输线,这种方式的特点是通信速度快,但传输线多,价格较贵,适合近距离传输。

串行通信仅需1~2根传输线,故在长距离传输数据时比较经济,但由于它每次只能传送1位,所以传送速度较慢。3在并行通信中,一个并行数据占多少位二进制数,就要多图7.1基本通信方式图示4图7.1基本通信方式图示47.1.1同步通信和异步通信方式串行通信分同步和异步两种方式。57.1.1同步通信和异步通信方式串行通信分同步和异步两种1.异步通信ASYNC

在异步通信中数据或字符是逐帧(frame)传送的。帧定义为一个字符的完整的通信格式,通常也称为帧格式。最常见的帧格式一般是先用一个起始位“0”表示字符的开始;然后是5~8位数据,规定低位在前,高位在后;其后是奇偶校验位;最后是停止位,用以表示字符的结束,停止位可以是1位、1.5位、2位,不同的计算机规定有所不同。从起始位开始到停止位结束就构成完整的1帧。61.异步通信ASYNC 在异步通信中数据或字符是逐帧(fra起始位——通信线上没有数据传送时,为高电平(逻辑1);当要发送数据时,首先发1个低电平信号(逻辑0),此信号称为“起始位”,表示开始传输1帧数据。数据位——起始位之后的位即数据位。数据位可以是5、6、7或8位(不同计算机的规定不同),上图的数据位为8位。一般从最低位开始传送,最高位在最后。7起始位——通信线上没有数据传送时,为高电平(逻辑1);当要发奇偶校验位——数据位之后的位为奇偶校验位(有的方式具有)。此位可用于判别字符传送的正确性,其有3种可能的选择,即奇、偶、无校验,用户可根据需要选择(在有的格式中,该位可省略)。在80C51单片机中,此位还可以用来确定该帧字符信息的性质(地址或数据)。停止位——校验位后为停止位,用于表示1帧结束,用高电平(逻辑1)表示。停止位可以是1、1.5或2位,不同计算机的规定有所不同。8奇偶校验位——数据位之后的位为奇偶校验位(有的方式具有)。此异步通信的主要特点如下:进行串行通信的单片机的时钟相互独立;其时钟频率可以不相同;在通信时不要求有同步时钟信号。由于异步通信是逐帧进行传输的,各位之间的时间间隔应该相同,所以必须保证2个单片机之间有相同的传送波特率。如果传送波特率不同,则时间间隔不同;当误差超过5%时,就不能正常进行通信。由于信息传输可以是随时不间断地进行的,因而帧与帧之间的时间间隔可以是不固定的,间隙处为高电平。9异步通信的主要特点如下:9 由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通信方式简单。此外,它还能利用校验位检测错误,所以这种通信方式应用较广泛。在单片机中主要是采用异步通信方式。10 由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格2.同步通信SYNC在同步通信中,数据或字符开始处是用一同步字符来指示(一般约定为l~2个字符),以实现发送端和接收端同步,一旦检测到约定同步字符,下面就连续、顺序地发送和接收数据。112.同步通信SYNC在同步通信中,数据或字符开始处是用一同步由于同步通信数据块传送时去掉了每个数字都必须具有的字符开始和结束的标志,且它一次可以发送一个数据段(多个数据),因此,其速度高于异步通信;但这种方式要求接收和发送时钟严格保持同步,在通信时通常要求有同步时钟信号,对硬件结构要求较高。由于这种方式易于进行串行外围扩展,所以目前很多型号的单片机都增加了串行同步通信接口,如目前已得到广泛应用的I2C串行总线和SPI串行接口等。12由于同步通信数据块传送时去掉了每个数字都必须具有7.1.2串行通信的数据传送速率

传送速率是指数据传送的速度。用b/s或bps(比特/秒)表示,称为比特率。在二进制的情况下,比特率与波特率数值相等,因而在单片机的串行通信中,常称为波特率。假如数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为:10b×120/s=1200b/s=1200波特每一位的传送时间即为波特率的倒数:137.1.2串行通信的数据传送速率传送速率是指数据

异步通信的数据传送速率一般为50b/s~100kb/s,常用于计算机到CRT终端,以及双机或多机之间的通信等。14异步通信的数据传送速率一般为50b/s~100k7.1.3串行通信的方式 在串行通信中,数据是在两机之间传送的。按照数据传送方向,串行通信可分为单工(Simplex)制式、半双工(halfduplex)制式和全双工(fullduplex)制式。157.1.3串行通信的方式 在串行通信中,数据是在两机之间图7.2串行通信方式示意图(1)单工制式在单工制式下,数据在甲机和乙机之间只允许单方向传送。两机之间只需1条数据线。16图7.2串行通信方式示意图16(2)半双工制式

在半双工制式下,数据在甲机和乙机之间允许双方向传送,但它们之间只有一个通信回路,接收和发送不能同时进行,只能分时发送和接收(即甲机发送,乙机接收,或者乙机发送,甲机接收),因而两机之间只需1条数据线。17(2)半双工制式17(3)全双工制式在全双工制式下,甲、乙两机之间数据的发送和接收可以同时进行,称为“全双工传送”。全双工形式的串行通信必须使用2条数据线。不管哪种形式的串行通信,在两机之间均应有公共地线。18(3)全双工制式18*信号的调制与解调当异步通信的距离在15m之内时,计算机之间可以直接进行通信。而当传输距离较远时,通常是用电话线传送。由于电话线频带不够宽,再加上远距离传输时信号不可避免地衰减,因而使信号发生明显的畸变。在发送时要用调制器(modulator)把数字信号转换为模拟信号,并加以放大再传送,这个过程叫做调制。在接收时,再用解调器(demodulator)检测此模拟信号,并把它转换成数字信号再送入计算机接口,这个过程即解调。19*信号的调制与解调当异步通信的距离在15m之内时7.1.4通信协议通信协议是指在计算机之间进行数据传输时的一些约定,包括通信方式、波特率、命令码的约定等。为保证计算机之间能准确、可靠地通信,相互之间必须遵循统一的通信协议。在通信之前一定要先设置好通信协议。207.1.4通信协议通信协议是指在计算机之间进行数7.280C51串行口简介 80C51的串行口是一个可编程的全双工串行通信接口,通过软件编程它可以作通用异步接收和发送器UART(UniversalAsynchronousReceiver/Transmitter)用,也可作同步移位寄存器用。其帧格式可有8位、10位和11位,并能设置各种波特率,使用灵活方便。217.280C51串行口简介 80C51的串行口是一个可编7.2.1串行口结构与工作原理

80C51串行口主要由接收与发送缓冲寄存器SBUF、输入移位寄存器以及串行控制寄存器SCON等组成。波特率发生器可以利用定时器T1或T2控制发送和接收的速率。SCON用于存放串行口的控制和状态信息;发送数据缓冲寄存器SBUF用于存放准备发送出去的数据;接收数据缓冲寄存器SBUF用于接收由外部输入到输入移位寄存器中的数据。80C51串行口正是通过对上述专用寄存器的设置、检测与读取来管理串行通信的。227.2.1串行口结构与工作原理 80C51串行口主要由接图7.3串行口结构框图23图7.3串行口结构框图23 在进行串行通信时,外界数据通过引脚RXD(P3.0)输入。输入数据首先逐位进入输入移位寄存器,由串行数据转换为并行数据,然后再送入接收寄存器。在接收寄存器中采用了双缓冲结构,以避免在接收到第2帧数据前,CPU未及时响应接收寄存器前一帧的中断请求,没把前一帧数据读走,而造成2帧数据重叠的错误。在发送时,串行数据通过引脚TXD(P3.1)输出。由于CPU是主动的,因此不会产生写重叠问题,一般不需要双缓冲器结构。要发送的数据通过发送控制器控制逻辑门电路逐位输出。24 在进行串行通信时,外界数据通过引脚RXD(P3.0)输入。7.2.2串行口寄存器

与串行口工作有关的寄存器共有6个,分别是串行口控制寄存器SCON、接收与发送缓冲寄存器SBUF、电源控制寄存器PCON、中断允许控制寄存器IE、中断优先级寄存器IP。

257.2.2串行口寄存器与串行口工作有1.串行口控制寄存器SCON

串行口控制寄存器SCON用于串行通信的方式选择、接收和发送控制,并可反映串行口的工作状态。

261.串行口控制寄存器SCON串行口控制寄存器SCOSCON.7和SCON.6位SM0和SM1——串行方式选择位表7.1串行口工作方式选择27SCON.7和SCON.6位SM0和SM1——串行方SCON.5位SM2——多机通信控制位。在方式2和方式3中,SM2主要用于进行多机通信控制。当串行口以方式2或方式3接收时,如果SM2=1,允许多机通信,且接收到第9位RB8为0时,则RI不置1不接收主机发来的数据;如果SM2=1,且RB8为1,则RI置1,产生中断请求,将接收到的8位数据送入SBUF。当SM2=0时,不论RB8为0还是1,都将收到的8位数据送入SBUF,并产生中断。在方式1中,当处于接收状态时,若SM2=1,则只有接收到有效的停止位时,RI才置1。在方式0中,SM2应置0。28SCON.5位SM2——多机通信控制位。28SCON.4位REN——允许串行接收位。

REN=1时,允许接收;REN=O时,禁止接收。由软件置位或清除。29SCON.4位REN——允许串行接收位。29SCON.3位TB8——发送数据的第9位(D8)。在方式2或方式3中,根据需要由软件置位或复位。双机通信时,它可约定作奇偶校验位;在多机通信中,可作为区别地址帧或数据帧的标识位。一般由指令设定地址帧时,设TB8为1;而设定数据帧时,设TB8为0。方式0和方式1中没用该位。30SCON.3位TB8——发送数据的第9位(D8)。30SCON.2位RB8——接收数据的第9位(D8)。 在方式2或方式3中,RB8的状态与TB8相呼应,(如可以是约定的奇偶校验位,也可以是约定的地址/数据标识位)。例如,当SM2=1时,如果RB8为0,则说明收到的是数据帧。31SCON.2位RB8——接收数据的第9位(D8)。31SCON.1位TI——发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其他方式中,在发送停止位之初由硬件置位。TI=1时,可申请中断,也可供软件查询用。在任何方式中,都必须由软件来清除TI。SCON.0位RI——接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其他方式中,在接收停止位的中间,由硬件置位。RI=1时,可申请中断,也可供软件查询用。在任何方式中,都必须由软件清除RI。32SCON.1位TI——发送中断标志位。32

SCON的低2位与中断有关。SCON的地址为98H,可以位寻址。复位时,SCON的所有位均清0。33SCON的低2位与中断有关。332.数据缓冲寄存器SBUF

数据缓冲寄存器SBUF实际上是2个寄存器:发送数据缓冲寄存器和接收数据缓冲寄存器。接收与发送缓冲寄存器SBUF采用同一个地址代码99H,其寄存器名亦同样为SBUF。CPU通过不同的操作命令,区别这2个寄存器,所以不会因为地址代码相同而产生错误。当CPU发出写SBUF命令时,即向发送缓冲寄存器中装载新的信息,同时启动数据串行发送;当CPU发出读SBUF命令时,即读接收缓冲寄存器的内容。342.数据缓冲寄存器SBUF数据缓冲寄存器3.电源控制寄存器PCON

电源控制寄存器PCON主要用于电源控制,PCON的最高位SMOD是串行口的波特率倍增位:当SMOD为1时,波特率加倍;当SMOD为O时,波特率不变。353.电源控制寄存器PCON电源控制寄存器PC4.中断允许控制寄存器IE中断允许控制寄存器IE用于控制与管理单片机的中断系统。IE的ES位用于控制串行口的中断:当ES=O时,禁止串行口中断;当ES=1时,允许串行口中断。364.中断允许控制寄存器IE365.中断优先级寄存器IP中断优先级寄存器IP用于管理单片机中各中断源中断优先级。

IP的PS位用于设置串行口中断的优先级:当PS=0时,串行口中断为低优先级;当PS=1时,串行口中断为高优先级。375.中断优先级寄存器IP中断优先级寄存器IP用于管理7.2.380C51的帧格式 80C51串行口通过编程可设置四种工作方式及三种帧格式。387.2.380C51的帧格式 80C51串行口通过编方式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低位。方式1以10位为一帧传输,设有1个起始位“0”、8个数据位和1个停止位“1”。39方式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低

方式2和3以11位为一帧传输,设有1个起始位“0”、8个数据位、1个可编程位(第9数据位)D8和1个停止位“1”。可编程位D8由软件置“1”或清“0”,该位可作检验位,也可作它用。40 方式2和3以11位为一帧传输,设有1个起始位“0”、8个数7.2.4波特率的设置在串行通信前,首先要设置收/发双方对发送或接收的数据传送速率,即波特率。通过软件对80C51串行口编程可设定4种工作方式。这4种方式波特率的计算方法不同:方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1或T2(AT89S52)的溢出率控制。

417.2.4波特率的设置在串行通信前,首先要设置收1.方式0和方式2的波特率方式0中,每个机器周期发送或接收1位数据,且不受SMOD的影响。方式2的波特率取决于PCON中SMOD之值。当SMOD=0时,波特率为fosc的1/64;若SMOD=1,则波特率为fosc的1/32,即:421.方式0和方式2的波特率方式0中,每个机器周期发送或接2.方式1和方式3的波特率 80C51串行口方式1和方式3的波特率由定时器T1的溢出率与SMOD的值决定,即:T1溢出率取决于计数速率和定时器的预置值。计数速率与TMOD寄存器中C/T的状态有关。当C/T=0时,计数速率=fosc/12;当C/T=1时,计数速率取决于外部输入时钟频率。432.方式1和方式3的波特率 80C51串行口方式1和方式3的 当定时器T1作波特率发生器使用时,通常是选用自动重装载方式,即方式2。设计数初值为X,那么每过(256—X)个机器周期,定时器1就会产生一次溢出。为了避免因溢出而产生不必要的中断,此时应禁止T1中断。溢出周期为:溢出率为溢出周期之倒数,所以:则定时器T1方式2的初始值为:44 当定时器T1作波特率发生器使用时,通常是选用自动重装载方式表7.2定时器T1的常用波特率45表7.2定时器T1的常用波特率45【例1】已知80C51单片机时钟振荡频率为11.0592MHz选用定时器T1工作方式2作波特率发生器,波特率为2400波特,求时间常数。

解:设波特率控制位SMOD=0,定时器T1的时间常数为:

所以TH1=TL1=F4H。46【例1】已知80C51单片机时钟振荡频率为11.0592MH由于上述公式包含除法,所以当晶振频率与波特率不同时,计算值有时会有一定误差。例如,如果晶振频率为12MHz,波特率要求为2400,在SMOD=0时,TH1=F3H,波特率的实际计算值为2404,误差为0.11%。但如果2个单片机的波特率相同,例如均为2404,则不会影响通信;如果2个单片机的波特率误差超过2.5%,则可能会引起通信错误。47由于上述公式包含除法,所以当晶振频率与波特率不同时,计算值有AT89S52单片机的定时器T2也可作为波特率发生器。48AT89S52单片机的定时器T2也可作为波特率发生器。487.3串行通信工作方式 通过软件编程可使串行通信有4种工作方式。497.3串行通信工作方式 通过软件编程可使串行通信有4种工7.3.1方式0 在方式0下,串行口作同步移位寄存器用,以8位数据为1帧,先发送或接收最低位,每个机器周期发送或接收一位,故其波特率是固定的,为fosc/12。串行数据由RXD(P3.0)端输入或输出。同步移位脉冲由TXD(P3.1)端送出。这种方式常用于扩展I/O口。采用不同的指令实现输入或输出。507.3.1方式0 在方式0下,串行口作同步移位寄存器用,(1)发送 当执行“MOVSBUF,A”指令时,CPU将1字节的数据写入发送缓冲寄存器SBUF(99H),串行口即把8位数据以fosc/12的波特率从RXD端送出(低位在前)。发送完成后,置中断标志位TI为1。如要继续发送应将TI清0。51(1)发送51(2)接收 由于REN是串行口允许接收控制位,因此在准备接收时,首先要用软件置REN为1,使其允许接收;然后,执行“MOVA,SBUF”指令,CPU即开始从RXD端以fosc/12波特率输入数据(低位在前),当接收到8位数据时,置中断标志RI为1。读取数据后,一定要将RI清0。52(2)接收52 串行控制寄存器中,TB8和RB8位在方式0中未用。每当发送或接收完8位数据时,由硬件将发送中断TI或接收中断RI标志置位。不管是中断方式还是查询方式,都不会清除TI或RI标志,必须用软件清0。在方式0中,SM2位必须为0。53 串行控制寄存器中,TB8和RB8位在方式0中未用。每当发图7.3串行口结构框图54图7.3串行口结构框图547.3.2方式1 在方式1下,串行口为10位通用异步接口。发送或接收1帧数据,包括1位起始位“0”、8位数据位和1位停止位“1”,其传送波特率可调。 557.3.2方式1 在方式1下,串行口为10位通用异步接口(1)发送 当执行“MOVSBUF,A”指令时,CPU将1字节的数据写入发送缓冲寄存器SBUF(99H),就启动发送器发送,数据从引脚TXD(P3.1)端输出。当发送完1帧数据后,TI标志置1,在中断方式下将申请中断,通知CPU可以发送下一个数据。如要继续发送,必须将TI清0。56(1)发送56图7.3串行口结构框图57图7.3串行口结构框图57(2)接收 接收时,先使REN置1,使串行口处于允许接收状态,RI标志为0,串行口采样引脚RXD(P3.0)。当采样到1至0的跳变时,确认是起始位“0”,就开始接收1帧数据。当停止位到来时,RB8位置1,同时,中断标志位RI也置1,在中断方式下将申请中断,通知CPU从SBUF取走接收到的1个数据。 不管是中断方式,还是查询方式,都不会清除TI或RI标志,必须用软件清0。58(2)接收587.3.3方式2和方式3

方式2和方式3均为11位异步通信方式,只是波特率的设置方法不同,其余完全相同。这两种方式发送或接收1帧的信息包括1位起始位“0”、8位数据位、1位可编程位和1位停止位“1”。其信息传送波特率与SMOD有关。

597.3.3方式2和方式3 方式2和方式3均为11位异步通(1)发送 发送前,首先根据通信协议由软件设置TB8(如作奇偶校验位或地址/数据标识位),然后,将要发送的数据写入SBUF即可启动发送器。 发送过程是由执行任何一条以SBUF作为目的寄存器的指令而启动的(写SBUF指令),把8位数据装入SBUF,同时,串行口还自动把TB8装到发送移位寄存器的第9位数据位置上,并通知发送控制器要求进行一次发送,然后即从TXD(P3.1)端输出1帧数据。60(1)发送60图7.3串行口结构框图61图7.3串行口结构框图61(2)接收 在接收时,先置位REN为1,使串行口处于允许接收状态,同时还要将RI清0。在满足这个条件的前提下,再根据SM2的状态(因为SM2是方式2和方式3的多机通信控制位)和所接收到的RB8的状态,才能决定此串行口在信息到来后是否会使RI置1。如果RI置1,在中断方式下将申请中断,接收数据。 当SM2=0时,不管RB8为0还是为1,RI都置1,此串行口将接收发来的信息。 当SM2=1,且RB8为1时,表示在多机通信情况下,接收的信息为地址帧,此时RI置1。串行口将接收发来的地址。 当SM2=1,且RB8为0时,表示接收的信息为数据帧,但不是发给本从机的,此时RI不置1,因而SBUF中所接收的数据帧将丢失。62(2)接收62 在方式2和方式3下,同样不管是中断方式,还是查询方式,都不会清除TI或RI标志。在发送和接收之后,也都必须用软件清TI和RI位。63 在方式2和方式3下,同样不管是中断方式,还是查询方式,都7.3.4多机通信 80C51的方式2和方式3有一个专门的应用领域,即多机通信。这一功能使它可以方便地应用于集散式分布系统中。这种系统采用一台主机和多台从机。图7.4多机通信连接图647.3.4多机通信 80C51的方式2和方式3有一个专门多机通信的实现,主要靠主、从机之间正确地设置与判断多机通信控制位SM2和发送或接收的第9数据位(D8)。在编程前,首先要给各从机定义地址编号,如分别为00H、01H、02H……。当主机想发送一数据块给几个从机中的一个时,它首先送出一个地址字节,以辨认从机。地址字节和数据字节可用第9数据位(TB8)来区别,地址为1,数据为0。所以,在主机发送地址帧时,地址/数据标识位TB8应设置为“1”,以表示是地址帧。如:MOV SCON,#0D8H;设串行口为方式3,TB8置“1”,准备发地址65多机通信的实现,主要靠主、从机之间正确地设置与判断多此时,所有的从机初始化时均置SM2=1,使它们只处于接收地址帧的状态。如:MOV SCON,#0F0H;置串行口为方式3, SM2=1,允许接收 当从机接收到从主机发来的信息后,第9位RB8若为“1”,则置位中断标志RI,并在中断后判断主机送来的地址与本从机地址是否相符。若相符,则被寻址的从机就清除其SM2标志,即SM2=0,准备接收即将从主机送来的数据帧;未被选中的从机仍保持SM2=1。66此时,所有的从机初始化时均置SM2=1,使它们只处于 当主机发送数据帧时,应置TB8=0。此时,虽然各从机都能接收到,但由于TB8=0,所以只有SM2=0的那个被寻址的从机才能接收到数据,那些未被选中的从机将不理睬进入到串行口的数据字节,继续进行它们自己的工作,直到一个新的地址字节到来,这样就实现了主机控制的主从机之间的通信。

综上所述,通信只能在主从机之间进行,从机之间的通信只有经主机才能实现。67 当主机发送数据帧时,应置TB8=0。此时,虽然各从机都能接多机之间的通信过程可归纳如下:(1)主、从机均初始化为方式2或方式3,置SM2=1,允许中断。(2)主机置TB8=1,发送要寻址的从机地址。(3)所有从机均接收主机发送的地址,并进行地址比较。(4)被寻址的从机确认地址后,置本机SM2=0,向主机返回地址,供主机核对。(5)核对无误后,主机向被寻址的从机发送命令,通知从机接收或发送数据。(6)通信只能在主、从机之间进行,两个从机之间的通信需通过主机作中介。(7)本次通信结束后,主、从机重置SM2=1,主机可再对其他从机寻址。68多机之间的通信过程可归纳如下:68在实际应用中,因为单片机功能有限,因而在较大的测控系统中,常常把单片机应用系统作为前端机(下位机或从机)直接用于控制对象的数据采集与控制,而把PC机作为中央处理机(上位机或主机)用于数据处理和对下位机的监控管理。它们之间的信息交换主要是采用串行通信,此时单片机可直接利用其串行接口,而PC机可利用其配备的8250或8251、16450等可编程串行接口芯片。实现单片机与PC机串行通信的关键是在通信协议的约定上要一致,例如,应设定相同的波特率及帧格式等。在正式工作之前,双方应先互发联络信号,以确保通信收发数据的准确性。69在实际应用中,因为单片机功能有限,因而在较大的测控系7.4串行口应用举例 本节将介绍串行口在作I/O扩展及一般异步通信和多机通信中的应用原理及实例。707.4串行口应用举例 本节将介绍串行口在作I/O扩展及一7.4.1用串行口扩展I/O口串行口的方式0主要用于扩展并行I/O口。此处将给出实用线路和简单的控制指令。717.4.1用串行口扩展I/O口串行口的方式0主例7.1用并行输入8位移位寄存器74HC165扩展16位并行输入口。编程实现从16位扩展口读入20字节数据,并把它们转存到内部RAM的50H~63H中。

图7.5利用串行口扩展输入口72例7.1用并行输入8位移位寄存器74HC165扩展16位解:在此采用74HC165与单片机相连实现I/O口扩展,是利用80C51的3根口线扩展为16根输入口线的实用电路,其由2块74HC165串接而成。74HC165是并入串出移位寄存器(也可选用其他同样功能的CMOS器件)。图中,CK为时钟脉冲输入端,D0~D7为并行输入端,SIN、QH分别为数据的输入、输出端。前级的数据输出端QH与后级的信号输入端SIN相连。S/L=0时,允许并行置入数据;S/L=1时,允许串行移位。73解:在此采用74HC165与单片机相连实现I/O口扩展,是利 MOV R7,#20 ;设置读入字节数 MOV R0,#50H ;设片内RAM指针 SETB F0 ;设置读入字节奇偶数标志RCV0: CLR P1.0 ;允许并行置入数据 SETB P1.0 ;允许串行移位RCV1: MOV SCON,#10H ;设串行口方式0并启动接收 JNB RI,$ ;等待接收一帧数据 CLR RI ;清接收中断标志 MOV A,SBUF ;取缓冲器数据 MOV @R0,A INC R0 CPL F0 JB F0,RCV2 ;判是否接收完偶数帧,接收完则 DEC R7 重新并行置入 SJMP RCV1 ;否则再接收一帧RCV2: DJNZ R7,RCV0 ;判是否已读入预定的字节数 …… ;对读入数据进行处理74 MOV R7,#20 ;设置读入字节数74 程序中F0用来作读入字节数的奇偶性标志。由于每次由扩展口并行置入到移位寄存器的是2个字节数据,置入1次,串行口应接收2帧数据。故已接收的数据字节数为奇数时F0=0,不再并行置入数据就直接启动接收过程;否则F0=1,在启动接收过程前,应该先在外部移位寄存器中置入新的数据。75 程序中F0用来作读入字节数的奇偶性标志。由于每次由扩展口【例7.2】用2片8位串入并出移位寄存器74HC164作扩展输出口。编程使这16个发光二极管交替为间隔点亮状态,循环交替时间为2s。图7.6利用串行口扩展输出接口76【例7.2】用2片8位串入并出移位寄存器74HC164作 74HC164是串行输入、并行输出移位寄存器。Q0~Q7为并行输出端;A、B为串行输入端;CLR为清除端,零电平时,使74HC164输出清“0”;CK为时钟脉冲输入端,在CK脉冲的上升沿作用下实现移位。在CK=0,CLR=1时,74HC164保持原来数据状态。 由于74HC164无并行输出控制端,在串行输入过程中其输出端的状态会不断变化,故在某些使用场合,在74HC164与输出装置之间还应加上输出可控的缓冲级(如74HC244),以便在串行输入过程结束后再输出。图中的输出装置是16位发光二极管。由于74HC164在低电平输出时允许通过的电流可达8mA,故不需再加驱动电路。77 74HC164是串行输入、并行输出移位寄存器。Q0~Q7为ST: MOV SCON,#00H ;设串行口为方式0 MOV A,#55H ;二极管间隔点亮初值LP2: MOV R0,#2 ;输出口字节数 CLR P1.0 ;对74HC164清0 SETB P1.0 ;允许数据串行移位LP1: MOV SBUF,A ;启动串行口发送 JNB TI,$ ;等待1帧发送结束 CLR TI ;清串行口发送中断标志位 DJNZ R0,LP1 ;判断预定字节数发送完否 LCALL DEL2s ;调延时2s子程序(略)

CPL A ;交替点亮二极管 SJMP LP2 ;循环显示78ST: MOV SCON,#00H ;设串行口为方式078从理论上讲,74HC164或74HC165可以无限地串级上去,进一步扩展输入/输出并行口,但这种扩展方法,输入/输出的速度不高,移位时钟频率为fosc/12。若fosc=12MHz,则每移1位需1μs。79从理论上讲,74HC164或74HC165可以无7.4.2用串行口进行异步通信图7.7双机异步通信连接图

807.4.2用串行口进行异步通信图7.7双机异步通【例7.3】编程把甲机片内RAM的60H~7FH单元中的数据块从串行口输出。定义在工作方式3下发送,TB8用作奇偶校验位。采用定时器T1方式2作波特率发生器,波特率为4800,fosc=11.0592MHz,定时器初始预置值TH1=TL1=0FAH。 编程使乙机从甲机接收32个字节数据块,并存入片外1000H~101FH单元。接收过程中要求判奇偶校验标志RB8。若出错,则置F0标志为1,若正确则置F0标志为0,然后返回。81【例7.3】编程把甲机片内RAM的60H~7FH单元中的解:编写发送子程序如下: MOV TMOD,#20H ;设置定时器T1为方式2 MOV TL1,#0FAH ;设预置值 MOV TH1,#0FAH SETB TR1 ;启动定时器T1 MOV SCON,#0C0H ;设置串行口为方式3 MOV PCON,#00H ;SMOD=0 MOV R0,#60H ;设数据决指针 MOV R7,#20H ;设数据长度20HTRS: MOV A,@R0 ;取数据送至A MOV C,P MOV TB8,C ;奇偶位P送至TB8 MOV SBUF,A ;数据送至SBUF,启动发送WAIT: JNB TI,$ ;判1帧是否发送完 CLR TI INC R0 ;更新数据单元 DJNZ R7,TRS ;循环发送至结束 RET ;返回82解:编写发送子程序如下:82在进行双机通信时,两机应用相同的工作方式和波特率,因而接收子程序编程如下: MOV TMOD,#20H ;设置定时器T1为方式2 MOV TL1,#0FAH ;设预置值 MOV TH1,#0FAH SETB TR1 ;启动定时器T1 MOV SCON,#0C0H ;设置串行口为方式3 MOV PCON,#00H ;SMOD=0 MOV DPTR,#1000H ;设置数据块指针 MOV R7,#20H ;设数据块长度 SETB REN ;允许接收WAIT: JNB RI,$ ;判断1帧是否接收完 CLR RI MOV A,SBUF ;读入1帧数据 JNB PSW.0,PZ ;奇偶位P为0,则转 JNB RB8,ERR ;P=1,RB8=0,则出错 SJMP YES ;二者全为1,则正确83在进行双机通信时,两机应用相同的工作方式和波特率,因而接收子PZ: JB RB8,ERR ;二者全为0,则正确;P=0,RB8=1,则出错

YES: MOVX @DPTR,A ;正确,存放数据 INC DPTR ;修改地址指针 DJNZ R7,WAIT ;判断数据块接收完否 CLR PSW.5 ;接收正确,且接收完,清F0标志 RET ;返回ERR: SETB PSW.5 ;出错,则置F0标志为1 RET ;返回上例是在方式3下进行收发,用奇偶位进行校验。

84PZ: JB RB8,ERR ;二者全为0,则正确;P=0,8585在方式1下进行双机通信,用累加和进行校验的方法。【例7.4】设甲机发送乙机接收,波特率为2400波特,两机晶振均为6MHz。要求甲机将外部数据存储器4000H~40FFH单元的内容向乙机发送,在发送数据之前将数据块长度发送给乙机,发送完256B后,向乙机发送一个累加校验和。乙机接收甲机发送的数据,并写入以300H为首址的外部数据存储器中。首先接收数据长度,接着接收数据,当接收完256B后,接收校验码,进行累加和校验。数据传送结束时,向甲机发送一个状态字节,表示传送是正确或出错。86在方式1下进行双机通信,用累加和进行校验的方法。86解:因波特率已指定为2400波特,首先需要确定定时初值和SMOD的值。此时若取SMOD=0,则X=249.49≈249,误差较大;取SMOD=l,则X=242.98≈243=F3H,误差较小。发送程序作如下约定:定时器T1按方式2工作,计数初值为F3H,SMOD=1。串行口按方式1工作,允许接收。R6设为数据块长度寄存器,R5设为累加和寄存器。87解:因波特率已指定为2400波特,首先需要确定定时初值和SM1.甲机发送程序清单TRT: MOV TMOD,#20H ;设定时器T1工作在方式2 MOV TH1,#0F3H ;设定时器T1的初值 MOV TL1,#0F3H SETB TR1 ;启动定时器T1 MOV SCON,#50H ;串行口初始化为方式1,允许接收 MOV PCON,#80H ;SMOD=1RPT: MOV DPTR,#4000H MOV R6,#00H ;长度寄存器初始化,长度为256字节 MOV R5,#00H ;校验和寄存器初始化 MOV SBUF,R6 ;发送长度 JNB TI,$ ;等待发送 CLR TI881.甲机发送程序清单88L1: MOVX A,@DPTR ;读取数据 MOV SBUF,A ;发送数据 ADD A,R5 ;形成累加和送至R5 MOV R5,A INC DPTR ;修改地址指针 JNB TI,$ ;等待发送 CLR TI DJNZ R6,L1 ;判断是否发送完256个数据 MOV SBUF,R5 ;发校验码 MOV R5,#00H JNB TI,$ CLR TI JNB RI,$ ;等乙机回答 CLR RI MOV A,SBUF JZ L8 ;发送正确则返回 AJMP RPT ;发送有错则重发L8: RET89L1: MOVX A,@DPTR ;读取数据892.乙机接收程序清单接收程序的通信约定同发送程序。RSU:MOV TMOD,#20H ;T1初始化 MOV TH1,#0F3H MOV TL1,#0F3H SETB TR1 MOV SCON,#50H MOV PCON,#80HRPT:MOV DPTR,#300H JNB RI,$ CLR RI MOV A,SBUF ;接收发送长度 MOV R6,A MOV R5,#00H ;累加和寄存器清“0”902.乙机接收程序清单接收程序的通信约定同发送程序。90WTD: JNB RI,$ CLR RI MOV A,SBUF ;接收数据 MOVX @DPTR,A ;存储数据 INC DPTR ;修改地址指针 ADD A,R5 MOV R5,A DJNZ R6,WTD ;未接收完,继续 JNB RI,$ ;接收校验码 CLR RI MOV A,SBUF XRL A,R5 ;比较校验码 MOV R5,#00H JZ L6 ;正确则转至L691WTD: JNB RI,$91 MOV SBUF,#0FFH ;出错送0FFH JNB TI,$ CLR TI AJMP RPT ;重新接收L6: MOV SBUF,#00H ;正确回送00H JNB TI,$ ;发送完返回 CLR TI RET92 MOV SBUF,#0FFH ;出错送0FFH92第七章UART串行接口

串行通信是CPU与外界交换信息的一种基本通信方式。为了实现串行通信,绝大多数单片机都配置了UART串行接口。93第七章UART串行接口串行通信是CPU与外界交7.1串行通信概述

计算机与外界的信息交换称为通信。基本的通信方式有两种。并行通信(parallelcommunication):所传送数据的各位同时发送或接收。串行通信(serialcommunication):所传送数据的各位按顺序一位一位地发送或接收。947.1串行通信概述计算机与外界的信息交换称为通信在并行通信中,一个并行数据占多少位二进制数,就要多少根传输线,这种方式的特点是通信速度快,但传输线多,价格较贵,适合近距离传输。

串行通信仅需1~2根传输线,故在长距离传输数据时比较经济,但由于它每次只能传送1位,所以传送速度较慢。95在并行通信中,一个并行数据占多少位二进制数,就要多图7.1基本通信方式图示96图7.1基本通信方式图示47.1.1同步通信和异步通信方式串行通信分同步和异步两种方式。977.1.1同步通信和异步通信方式串行通信分同步和异步两种1.异步通信ASYNC

在异步通信中数据或字符是逐帧(frame)传送的。帧定义为一个字符的完整的通信格式,通常也称为帧格式。最常见的帧格式一般是先用一个起始位“0”表示字符的开始;然后是5~8位数据,规定低位在前,高位在后;其后是奇偶校验位;最后是停止位,用以表示字符的结束,停止位可以是1位、1.5位、2位,不同的计算机规定有所不同。从起始位开始到停止位结束就构成完整的1帧。981.异步通信ASYNC 在异步通信中数据或字符是逐帧(fra起始位——通信线上没有数据传送时,为高电平(逻辑1);当要发送数据时,首先发1个低电平信号(逻辑0),此信号称为“起始位”,表示开始传输1帧数据。数据位——起始位之后的位即数据位。数据位可以是5、6、7或8位(不同计算机的规定不同),上图的数据位为8位。一般从最低位开始传送,最高位在最后。99起始位——通信线上没有数据传送时,为高电平(逻辑1);当要发奇偶校验位——数据位之后的位为奇偶校验位(有的方式具有)。此位可用于判别字符传送的正确性,其有3种可能的选择,即奇、偶、无校验,用户可根据需要选择(在有的格式中,该位可省略)。在80C51单片机中,此位还可以用来确定该帧字符信息的性质(地址或数据)。停止位——校验位后为停止位,用于表示1帧结束,用高电平(逻辑1)表示。停止位可以是1、1.5或2位,不同计算机的规定有所不同。100奇偶校验位——数据位之后的位为奇偶校验位(有的方式具有)。此异步通信的主要特点如下:进行串行通信的单片机的时钟相互独立;其时钟频率可以不相同;在通信时不要求有同步时钟信号。由于异步通信是逐帧进行传输的,各位之间的时间间隔应该相同,所以必须保证2个单片机之间有相同的传送波特率。如果传送波特率不同,则时间间隔不同;当误差超过5%时,就不能正常进行通信。由于信息传输可以是随时不间断地进行的,因而帧与帧之间的时间间隔可以是不固定的,间隙处为高电平。101异步通信的主要特点如下:9 由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通信方式简单。此外,它还能利用校验位检测错误,所以这种通信方式应用较广泛。在单片机中主要是采用异步通信方式。102 由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格2.同步通信SYNC在同步通信中,数据或字符开始处是用一同步字符来指示(一般约定为l~2个字符),以实现发送端和接收端同步,一旦检测到约定同步字符,下面就连续、顺序地发送和接收数据。1032.同步通信SYNC在同步通信中,数据或字符开始处是用一同步由于同步通信数据块传送时去掉了每个数字都必须具有的字符开始和结束的标志,且它一次可以发送一个数据段(多个数据),因此,其速度高于异步通信;但这种方式要求接收和发送时钟严格保持同步,在通信时通常要求有同步时钟信号,对硬件结构要求较高。由于这种方式易于进行串行外围扩展,所以目前很多型号的单片机都增加了串行同步通信接口,如目前已得到广泛应用的I2C串行总线和SPI串行接口等。104由于同步通信数据块传送时去掉了每个数字都必须具有7.1.2串行通信的数据传送速率

传送速率是指数据传送的速度。用b/s或bps(比特/秒)表示,称为比特率。在二进制的情况下,比特率与波特率数值相等,因而在单片机的串行通信中,常称为波特率。假如数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为:10b×120/s=1200b/s=1200波特每一位的传送时间即为波特率的倒数:1057.1.2串行通信的数据传送速率传送速率是指数据

异步通信的数据传送速率一般为50b/s~100kb/s,常用于计算机到CRT终端,以及双机或多机之间的通信等。106异步通信的数据传送速率一般为50b/s~100k7.1.3串行通信的方式 在串行通信中,数据是在两机之间传送的。按照数据传送方向,串行通信可分为单工(Simplex)制式、半双工(halfduplex)制式和全双工(fullduplex)制式。1077.1.3串行通信的方式 在串行通信中,数据是在两机之间图7.2串行通信方式示意图(1)单工制式在单工制式下,数据在甲机和乙机之间只允许单方向传送。两机之间只需1条数据线。108图7.2串行通信方式示意图16(2)半双工制式

在半双工制式下,数据在甲机和乙机之间允许双方向传送,但它们之间只有一个通信回路,接收和发送不能同时进行,只能分时发送和接收(即甲机发送,乙机接收,或者乙机发送,甲机接收),因而两机之间只需1条数据线。109(2)半双工制式17(3)全双工制式在全双工制式下,甲、乙两机之间数据的发送和接收可以同时进行,称为“全双工传送”。全双工形式的串行通信必须使用2条数据线。不管哪种形式的串行通信,在两机之间均应有公共地线。110(3)全双工制式18*信号的调制与解调当异步通信的距离在15m之内时,计算机之间可以直接进行通信。而当传输距离较远时,通常是用电话线传送。由于电话线频带不够宽,再加上远距离传输时信号不可避免地衰减,因而使信号发生明显的畸变。在发送时要用调制器(modulator)把数字信号转换为模拟信号,并加以放大再传送,这个过程叫做调制。在接收时,再用解调器(demodulator)检测此模拟信号,并把它转换成数字信号再送入计算机接口,这个过程即解调。111*信号的调制与解调当异步通信的距离在15m之内时7.1.4通信协议通信协议是指在计算机之间进行数据传输时的一些约定,包括通信方式、波特率、命令码的约定等。为保证计算机之间能准确、可靠地通信,相互之间必须遵循统一的通信协议。在通信之前一定要先设置好通信协议。1127.1.4通信协议通信协议是指在计算机之间进行数7.280C51串行口简介 80C51的串行口是一个可编程的全双工串行通信接口,通过软件编程它可以作通用异步接收和发送器UART(UniversalAsynchronousReceiver/Transmitter)用,也可作同步移位寄存器用。其帧格式可有8位、10位和11位,并能设置各种波特率,使用灵活方便。1137.280C51串行口简介 80C51的串行口是一个可编7.2.1串行口结构与工作原理

80C51串行口主要由接收与发送缓冲寄存器SBUF、输入移位寄存器以及串行控制寄存器SCON等组成。波特率发生器可以利用定时器T1或T2控制发送和接收的速率。SCON用于存放串行口的控制和状态信息;发送数据缓冲寄存器SBUF用于存放准备发送出去的数据;接收数据缓冲寄存器SBUF用于接收由外部输入到输入移位寄存器中的数据。80C51串行口正是通过对上述专用寄存器的设置、检测与读取来管理串行通信的。1147.2.1串行口结构与工作原理 80C51串行口主要由接图7.3串行口结构框图115图7.3串行口结构框图23 在进行串行通信时,外界数据通过引脚RXD(P3.0)输入。输入数据首先逐位进入输入移位寄存器,由串行数据转换为并行数据,然后再送入接收寄存器。在接收寄存器中采用了双缓冲结构,以避免在接收到第2帧数据前,CPU未及时响应接收寄存器前一帧的中断请求,没把前一帧数据读走,而造成2帧数据重叠的错误。在发送时,串行数据通过引脚TXD(P3.1)输出。由于CPU是主动的,因此不会产生写重叠问题,一般不需要双缓冲器结构。要发送的数据通过发送控制器控制逻辑门电路逐位输出。116 在进行串行通信时,外界数据通过引脚RXD(P3.0)输入。7.2.2串行口寄存器

与串行口工作有关的寄存器共有6个,分别是串行口控制寄存器SCON、接收与发送缓冲寄存器SBUF、电源控制寄存器PCON、中断允许控制寄存器IE、中断优先级寄存器IP。

1177.2.2串行口寄存器与串行口工作有1.串行口控制寄存器SCON

串行口控制寄存器SCON用于串行通信的方式选择、接收和发送控制,并可反映串行口的工作状态。

1181.串行口控制寄存器SCON串行口控制寄存器SCOSCON.7和SCON.6位SM0和SM1——串行方式选择位表7.1串行口工作方式选择119SCON.7和SCON.6位SM0和SM1——串行方SCON.5位SM2——多机通信控制位。在方式2和方式3中,SM2主要用于进行多机通信控制。当串行口以方式2或方式3接收时,如果SM2=1,允许多机通信,且接收到第9位RB8为0时,则RI不置1不接收主机发来的数据;如果SM2=1,且RB8为1,则RI置1,产生中断请求,将接收到的8位数据送入SBUF。当SM2=0时,不论RB8为0还是1,都将收到的8位数据送入SBUF,并产生中断。在方式1中,当处于接收状态时,若SM2=1,则只有接收到有效的停止位时,RI才置1。在方式0中,SM2应置0。120SCON.5位SM2——多机通信控制位。28SCON.4位REN——允许串行接收位。

REN=1时,允许接收;REN=O时,禁止接收。由软件置位或清除。121SCON.4位REN——允许串行接收位。29SCON.3位TB8——发送数据的第9位(D8)。在方式2或方式3中,根据需要由软件置位或复位。双机通信时,它可约定作奇偶校验位;在多机通信中,可作为区别地址帧或数据帧的标识位。一般由指令设定地址帧时,设TB8为1;而设定数据帧时,设TB8为0。方式0和方式1中没用该位。122SCON.3位TB8——发送数据的第9位(D8)。30SCON.2位RB8——接收数据的第9位(D8)。 在方式2或方式3中,RB8的状态与TB8相呼应,(如可以是约定的奇偶校验位,也可以是约定的地址/数据标识位)。例如,当SM2=1时,如果RB8为0,则说明收到的是数据帧。123SCON.2位RB8——接收数据的第9位(D8)。31SCON.1位TI——发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其他方式中,在发送停止位之初由硬件置位。TI=1时,可申请中断,也可供软件查询用。在任何方式中,都必须由软件来清除TI。SCON.0位RI——接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其他方式中,在接收停止位的中间,由硬件置位。RI=1时,可申请中断,也可供软件查询用。在任何方式中,都必须由软件清除RI。124SCON.1位TI——发送中断标志位。32

SCON的低2位与中断有关。SCON的地址为98H,可以位寻址。复位时,SCON的所有位均清0。125SCON的低2位与中断有关。332.数据缓冲寄存器SBUF

数据缓冲寄存器SBUF实际上是2个寄存器:发送数据缓冲寄存器和接收数据缓冲寄存器。接收与发送缓冲寄存器SBUF采用同一个地址代码99H,其寄存器名亦同样为SBUF。CPU通过不同的操作命令,区别这2个寄存器,所以不会因为地址代码相同而产生错误。当CPU发出写SBUF命令时,即向发送缓冲寄存器中装载新的信息,同时启动数据串行发送;当CPU发出读SBUF命令时,即读接收缓冲寄存器的内容。1262.数据缓冲寄存器SBUF数据缓冲寄存器3.电源控制寄存器PCON

电源控制寄存器PCON主要用于电源控制,PCON的最高位SMOD是串行口的波特率倍增位:当SMOD为1时,波特率加倍;当SMOD为O时,波特率不变。1273.电源控制寄存器PCON电源控制寄存器PC4.中断允许控制寄存器IE中断允许控制寄存器IE用于控制与管理单片机的中断系统。IE的ES位用于控制串行口的中断:当ES=O时,禁止串行口中断;当ES=1时,允许串行口中断。1284.中断允许控制寄存器IE365.中断优先级寄存器IP中断优先级寄存器IP用于管理单片机中各中断源中断优先级。

IP的PS位用于设置串行口中断的优先级:当PS=0时,串行口中断为低优先级;当PS=1时,串行口中断为高优先级。1295.中断优先级寄存器IP中断优先级寄存器IP用于管理7.2.380C51的帧格式 80C51串行口通过编程可设置四种工作方式及三种帧格式。1307.2.380C51的帧格式 80C51串行口通过编方式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低位。方式1以10位为一帧传输,设有1个起始位“0”、8个数据位和1个停止位“1”。131方式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低

方式2和3以11位为一帧传输,设有1个起始位“0”、8个数据位、1个可编程位(第9数据位)D8和1个停止位“1”。可编程位D8由软件置“1”或清“0”,该位可作检验位,也可作它用。132 方式2和3以11位为一帧传输,设有1个起始位“0”、8个数7.2.4波特率的设置在串行通信前,首先要设置收/发双方对发送或接收的数据传送速率,即波特率。通过软件对80C51串行口编程可设定4种工作方式。这4种方式波特率的计算方法不同:方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1或T2(AT89S52)的溢出率控制。

1337.2.4波特率的设置在串行通信前,首先要设置收1.方式0和方式2的波特率方式0中,每个机器周期发送或接收1位数据,且不受SMOD的影响。方式2的波特率取决于PCON中SMOD之值。当SMOD=0时,波特率为fosc的1/64;若SMOD=1,则波特率为fosc的1/32,即:1341.方式0和方式2的波特率方式0中,每个机器周期发送或接2.方式1和方式3的波特率 80C51串行口方式1和方式3的波特率由定时器T1的溢出率与SMOD的值决定,即:T1溢出率取决于计数速率和定时器的预置值。计数速率与TMOD寄存器中C/T的状态有关。当C/T=0时,计数速率=fosc/12;当C/T=1时,计数速率取决于外部输入时钟频率。1352.方式1和方式3的波特率 80C51串行口方式1和方式3的 当定时器T1作波特率发生器使用时,通常是选用自动重装载方式,即方式2。设计数初值为X,那么每过(256—X)个机器周期,定时器1就会产生一次溢出。为了避免因溢出而产生不必要的中断,此时应禁止T1中断。溢出周期为:溢出率为溢出周期之倒数,所以:则定时器T1方式2的初始值为:136 当定时器T1作波特率发生器使用时,通常是选用自动重装载方式表7.2定时器T1的常用波特率137表7.2定时器T1的常用波特率45【例1】已知80C51单片机时钟振荡频率为11.0592MHz选用定时器T1工作方式2作波特率发生器,波特率为2400波特,求时间常数。

解:设波特率控制位SMOD=0,定时器T1的时间常数为:

所以TH1=TL1=F4H。138【例1】已知80C51单片机时钟振荡频率为11.0592MH由于上述公式包含除法,所以当晶振频率与波特率不同时,计算值有时会有一定误差。例如,如果晶振频率为12MHz,波特率要求为2400,在SMOD=0时,TH1=F3H,波特率的实际计算值为2404,误差为0.11%。但如果2个单片机的波特率相同,例如均为2404,则不会影响通信;如果2个单片机的波特率误差超过2.5%,则可能会引起通信错误。139由于上述公式包含除法,所以当晶振频率与波特率不同时,计算值有AT89S52单片机的定时器T2也可作为波特率发生器。140AT89S52单片机的定时器T2也可作为波特率发生器。487.3串行通信工作方式 通过软件编程可使串行通信有4种工作方式。1417.3串行通信工作方式 通过软件编程可使串行通信有4种工7.3.1方式0 在方式0下,串行口作同步移位寄存器用,以8位数据为1帧,先发送或接收最低位,每个机器周期发送或接收一位,故其波特率是固定的,为fosc/12。串行数据由RXD(P3.0)端输入或输出。同步移位脉冲由TXD(P3.1)端送出。这种方式常用于扩展I/O口。采用不同的指令实现输入或输出。1427.3.1方式0 在方式0下,串行口作同步移位寄存器用,(1)发送 当执行“MOVSBUF,A”指令时,CPU将1字节的数据写入发送缓冲寄存器SBUF(99H),串行口即把8位数据以fosc/12的波特率从RXD端送出(低位在前)。发送完成后,置中断标志位TI为1。如要继续发送应将TI清0。143(1)发送51(2)接收 由于REN是串行口允许接收控制位,因此在准备接收时,首先要用软件置REN为1,使其允许接收;然后,执行“MOVA,SBUF”指令,CPU即开始从RXD端以fosc/12波特率输入数据(低位在前),当接收到8位数据时,置中断标志RI为1。读取数据后,一定要将RI清0。144(2)接收52 串行控制寄存器中,TB8和RB8位在方式0中未用。每当发送或接收完8位数据时,由硬件将发送中断TI或接收中断RI标志置位。不管是中断方式还是查询方式,都不会清除TI或RI标志,必须用软件清0。在方式0中,SM2位必须为0。145 串行控制寄存器中,TB8和RB8位在方式0中未用。每当发图7.3串行口结构框图146图7.3串行口结构框图547.3.2方式1 在方式1下,串行口为10位通用异步接口。发送或接收1帧数据,包括1位起始位“0”、8位数据位和1位停止位“1”,其传送波特率可调。 1477.3.2方式1 在方式1下,串行口为10位通用异步接口(1)发送 当执行“MOVSBUF,A”指令时,CPU将1字节的数据写入发送缓冲寄存器SBUF(99H),就启动发送器发送,数据从引脚TXD(P3.1)端输出。当发送完1帧数据后,TI标志置1,在中断方式下将申请中断,通知CPU可以发送下一个数据。如要继续发送,必须将TI清0。148(1)发送56图7.3串行口结构框图149图7.3串行口结构框图57(2)接收 接收时,先使REN置1,使串行口处于允许接收状态,RI标志为0,串行口采样引脚RXD(P3.0)。当采样到1至0的跳变时,确认是起始位“0”,就开始接收1帧数据。当停止位到来时,RB8位置1,同时,中断标志位RI也置1,在中断方式下将申请中断,通知CPU从SBUF取走接收到的1个数据。 不管是中断方式,还是查询方式,都不会清除TI或RI标志,必须用软件清0。150(2)接收587.3.3方式2和方式3

方式2和方式3均为11位异步通信方式,只是波特率的设置方法不同,其余完全相同。这两种方式发送或接收1帧的信息包括1位起始位“0”、8位数据位、1位可编程位和1位停止位“1”。其信息传送波特率与SMOD有关。

1517.3.3方式2和方式3 方式2和方式3均为11位异步通(1)发送 发送前,首先根据通信协议由软件设置TB8(如作奇偶校验位或地址/数据标识位),然后,将要发送的数据写入SBUF即可启动发送器。 发送过程是由执行任何一条以SBUF作为目的寄存器的指令而启动的(写SBUF指令),把8位数据装入SBUF,同时,串行口还自动把TB8装到发送移位寄存器的第9位数据位置上,并通知发送控制器要求进行一次发送,然后即从TXD(P3.1)端输出1帧数据。152(1)发送60图7.3串行口结构框图153图7.3串行口结构框图61(2)接收 在接收时,先置位REN为1,使串行口处于允许接收状态,同时还要将RI清0。在满足这个条件的前提下,再根据SM2的状态(因为SM2是方式2和方式3的多机通信控制位)和所接收到的RB8的状态,才能决定此串行口在信息到来后是否会使RI置1。如果RI置1,在中断方式下将申请中断,接收数据。 当SM2=0时,不管RB8为0还是为1,RI都置1,此串行口将接收发来的信息。 当SM2=1,且RB8为1时,表示在多机通信情况下,接收的信息为地址帧,此时RI置1。串行口将接收发来的地址。 当SM2=1,且RB8为0时,表示接收的信息为数据帧,但不是发给本从机的,此时RI不置1,因而SBUF中所接收的数据帧将丢失。154(2)接收62 在方式2和方式3下,同样不管是中断方式,还是查询方式,都不会清除TI或RI标志。在发送和接收之后,也都必须用软件清TI和RI位。155 在方式2和方式3下,同样不管是中断方式,还是查询方式,都7.3.4多机通信 80C51的方式2和方式3有一个专门的应用领域,即多机通信。这一功能使它可以方便地应用于集散式分布系统中。这种系统采用一台主机和多台从机。图7.4多机通信连接图1567.3.4多机通信 80C51的方式2和方式3有一个专门多机通信的实现,主要靠主、从机之间正确地设置与判断多机通信控制位SM2和发送或接收的第9数据位(D8)。在编程前,首先要给各从机定义地址编号,如分别为00H、01H、02H……。当主机想发送一数据块给几个从机中的一个时,它首先送出一个地址字节,以辨认从机。地址字节和数据字节可用第9数据位(TB8)来区别,地址为1,数据为0。所以,在主机发送地址帧时,地址/数据标识位TB8应设置为“1”,以表示是地址帧。如:MOV SCON,#0D8H;设串行口为方式3,TB8置“1”,准备发地址157多机通信的实现,主要靠主、从机之间正确地设置与判断多此时,所有的从机初始化时均置SM2=1,使它们只处于接收地址帧的状态。如:MOV SCON,#0F0H;置串行口为方式3, SM2=1,允许接收 当从机接收到从主机发来的信息后,第9位RB8若为“1”,则置位中断标志RI,并在中断后判断主机送来的地址与本从机地址是否相符。若相符,则被寻址的从机就清除其SM2标志,即SM2=0,准备接收即将从主机送来的数据帧;未被选中的从机仍保持SM2=1。158此时,所有的从机初始化时均置SM2=1,使它们只处于 当主机发送数据帧时,应置TB8=0。此时,虽然各从机都能接收到,但由于TB8=0,所以只有SM2=0的那个被寻址的从机才能接收到数据,那些未

温馨提示

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

评论

0/150

提交评论