您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第8章 AT89S51单片机的串行口
第8章AT89S51单片机的串行口12全双工异步串行口并行通信并行通信和串行通信串行通信数据的各位同时传送(接收)数据的逐位分时传送(接收)异步通信和同步通信异步通信(AsynchronousCommunication):同步通信(SynchronousCommunication):同步通信是指通信时要建立发送方时钟对接收方时钟的直接控制,使收发双方达到完全同步的一种通信方式。异步通信是指发送端和接收端使用各自的时钟来控制数据的发送和接收的一种通信方式。这两个时钟源彼此独立,无需严格同步。4串行通信的3种制式:单工(simplex)半双工(halfduplex)全双工(duplex)概述:可编程的全双工异步串行口管脚:TXD(P3.1)、RXD(P3.0)可同时发送、接收数据四种工作方式,帧格式有8位、10位、11位波特率(Baudrate)可设置波特率(比特率):每秒钟传送二进制数的位数,单位b/s。8.1串行口的结构6图8-1内部结构PCONSCON7SBUF_串行口数据缓冲器两个物理上独立的接收、发送缓冲器发送缓冲器只写不能读。接收缓冲器只读不能写。两个缓冲器共用一个字节地址(99H)。SCON__串行口控制寄存器(98H),可位寻址PCON__电源控制寄存器(87H),不可位寻址8.1.1串行口控制寄存器SCON接收中断标志发送中断标志发送中断标志接收的第9位数据发送的第9位数据允许串行接收位多机通信控制位允许串行接收位工作方式选择位9SM0SM1工作方式功能波特率0008位同步移位寄存器(扩展IO口)fosc/1201110位异步收发(8位数据)可变,由定时器1溢出率控制10211位异步收发(9位数据)fosc/64或fosc/3211311位异步收发(9位数据)可变,由定时器1溢出率控制表8-1串行口的工作方式8.1.2电源控制及波特率选择寄存器PCON10当SMOD=1时,要比SMOD=0时波特率加倍,所以也称SMOD位为波特率倍增位。例如,方式1的波特率计算公式:方式1波特率=定时器T1的溢出率SMOD2328.2串行口的4种工作方式8.2.1方式0同步移位寄存器输入/输出方式。该方式并不用于两个AT89S51单片机之间的异步串行通信,而是用于串行口外接移位寄存器,扩展并行I/O口。8位数据为一帧,无起始位和停止位,先发送或接收最低位。波特率为fosc/12。帧格式如图8-4。图8-4方式0的帧格式111.方式0输出(1)方式0输出的工作原理当执行一条将数据写入发送缓冲器SBUF指令时,产生一个正脉冲,串行口开始把SBUF中的8位数据以fosc/12的固定波特率从RXD引脚串行输出,低位在先,TXD引脚输出同步移位脉冲,发送完8位数据,中断标志位TI置“1”。发送时序如图8-5。12图7-5方式0发送时序13(2)方式0输出的应用典型应用是外扩串行输入/并行输出的同步移位寄存器74LS164,实现并行输出端口的扩展。图8-6为串行口工作在方式0,通过74LS164的输出来控制8个外接LED发光二极管亮灭的接口电路。当串行口被设置在方式0输出时,串行数据由RXD端(P3.0)送出,移位脉冲由TXD端(P3.1)送出。在移位脉冲的作用下,串行口发送缓冲器的数据逐位地从RXD端串行地移入74LS164中。1415图8-6串行口的方式0外接8个LED发光二极管的接口电路【例8-1】如图8-6所示,编写程序控制8个发光二极管轮流点亮。图中74LS164的CLK端为同步脉冲输入端,CLR为控制端,当CLR=0时,允许串行数据从A和B端输入但是8位并行输出端关闭;当CLR=1时,A和B输入端关闭,但是允许74LS164中的8位数据并行输出。当8位串行数据发送完毕后,引起中断,在中断服务程序中,单片机通过串行口输出下一个8位数据。采用中断方式的参考程序如下。16#includereg51.h#includestdio.hsbitP1_0=0x90;unsignedcharnSendByte;voiddelay(unsignedinti){intj;for(;i0;i--)for(j=0;j125;j++);}main(){SCON=0x00;/*设置串行口为方式0*/EA=1;/*全局中断允许*/ES=1;/*允许串行口中断*/nSendByte=1;SBUF=nSendByte;//启动串口发送P1_0=0;//允许串口向164串行发送数据while(1);}17voidSerial_Port()interrupt4using0{TI=0;P1_0=1;nSendByte=1;if(nSendByte==0)nSendByte=1;SBUF=nSendByte;delay(500);P1_0=0;}182.方式0输入(1)方式0输入工作原理方式0接收,REN为允许接收控制位,REN=0,禁止接收;REN=1,允许接收。当向SCON寄存器写入控制字(设置为方式0,并使REN位置“1”,同时RI=0)时,产生一个正脉冲,串行口开始接收数据。引脚RXD为数据输入端,TXD为移位脉冲信号输出端,接收器以fosc/12的固定波特率采样RXD引脚的数据信息,当接收完8位数据时,中断标志RI置“1”,表示一帧数据接收完毕,通知CPU读取该数据,并执行RI=0指令,准备接收下一帧数据,时序如图8-7。19图7-7方式0接收时序2021(2)方式0输入应用举例【例8-2】图8-8为串口外接一片8位并行输入、串行输出的同步移位寄存器74LS165,扩展一个8位并行输入口的电路,可将接在74LS165的8个开关的状态通过串口方式0读入到单片机内。74LS165的SH/LD端为控制端。若SH/LD=0,则74LS165可并行输入数据,且串行输出端关闭;SH/LD=1,则并行输入关断,可以串行输出。22图8-8外接并行输入串行输出的同步移位寄存器#includereg51.hsbitP1_1=0x91;voiddelay(unsignedinti){intj;for(;i0;i--)for(j=0;j125;j++);}voidmain(){SCON=0x10;/*串行口初始化为方式0*/while(1){P1_1=0;P1_1=1;while(RI==0);RI=0;P2=SBUF;/*读入SBUF中的数据*/delay(10);}}23参考程序如下:查询方式读入开关状态作业:中断方式读入开关状态8.2.2方式1方式1为双机串行通信方式,如图8-9所示。当SM0、SM1=01时,串行口设为方式1的双机串行通信。TXD脚和RXD脚分别用于发送和接收数据。图8-9方式1双机串行通信的连接电路24方式1一帧数据为10位,1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。帧格式如图8-10。图8-10方式1的帧格式方式1为波特率可变的8位异步通信接口。波特率由下式确定:方式1波特率=定时器T1的溢出率SMOD为PCON寄存器的最高位的值(0或1)。25SMOD2321.方式1发送方式1输出时,数据位由TXD端输出,当CPU执行一条数据写SBUF的指令,就启动发送。发送时序见图8-11。图8-11中TX时钟的频率就是发送的波特率。26内部发送控制信号图8-11方式1发送时序中断标志位TI置“1发送移位时钟信号空闲为12.方式1接收方式1接收时(REN=1),数据从RXD(P3.1)引脚输入。当检测到起始位的负跳变,则开始接收。接收时序见图8-12。27图8-12方式1接收时序接收移位时钟信号空闲为1D7接收数据有效(能装入SBUF且能被CPU读出的)的条件:(1)RI=0;SM2=0(方式1时,SM2设为0)。(2)RI=0;RB8=1(控制激活RI的功能),SM2=1(只有接收到有效的停止位,RI才被置“1”。若不满足任何一个条件,收的数据不能被CPU读,该帧数据将丢弃。288.2.3方式2方式2和方式3,9位异步通信接口。每帧数据为11位,1位起始位0,8位数据位(先低位),1位可程控为1或0的第9位数据和1位停止位。方式2、方式3帧格式如图8-13。图8-13方式2、方式3的帧格式方式2波特率=fosc29SMOD2641.方式2发送发送前,先根据协议由软件设置TB8(如奇偶校验位或多机通信的地址/数据标志位),然后将要发送的数据写入SBUF,即启动发送。TB8自动装入第9位数据位,逐一发送。发送完毕,使TI位置“1”。图8-14方式2和方式3发送时序302.方式2接收SM0、SM1=10,且REN=1时。数据由RXD端输入,当位检测逻辑采样到RXD的负跳变,判断起始位有效,便开始接收一帧信息。在接收完第9位数据后,需满足以下两个条件,才能将接收到的数据送入接收缓冲器SBUF。(1)RI=0,意味着接收缓冲器为空。(2)SM2=0或接收到的第9位数据位RB8=1。当满足上述两个条件时,收到的数据送SBUF(接收缓冲器),第9位数据送入RB8,且RI置“1”。若不满足这两个条件,接收的信息将被丢弃。31串行口方式2和方式3接收时序如图8-15。图8-15方式2和方式3接收时序328.2.4方式3SM0、SM1=11时,方式3。为波特率可变的9位异步通信方式,除了波特率外,方式3和方式2相同。方式3发送和接收时序如图8-14和图8-15所示。方式3波特率=定时器T1的溢出率33SMOD2328.4波特率的制定串行通信,收、发双方发送或接收的波特率必须一致。8.4.1波特率的定义波特率的定义:串行口每秒钟发送(或接收)的位数。348.4.2定时器T1产生波特率的计算(1)方式0时,波特率固定为时钟频率fosc的1/12,不受SMOD位值的影响。若fosc=12MHz,波特率1Mbit/s。(2)方式2时,波特率仅与SMOD位的值有关。方式2波特率=fosc若fosc=12MHz:SMOD=0,波特率=187.5kbit/s;SMOD=1,波特率=375kbit/s。SMOD264波特率=定时器T1的溢出率(8-1)波特率由T1溢出率和SMOD的值共同决定。实际设定波特率时,T1常设置为方式2定时(自动装初值),即TL1作为8位计数器,TH1存放备用初值。定时器T1的溢出率=(8-2)35SMOD232osc/12256256计数速率fXX(3)方式1或方式3时,用T1作为波特率发生器SMODosc23212(256)fX波特率=(8-3)结论:波特率随fosc、SMOD和定时器TL0初值X而变化。定时器TL1在方式2的初值为X实际使用时,经常根据已知波特率和时钟频率fosc来计算TL1的初值X。为避免繁杂的初值计算,常用的波特率和初值X间的关系常列成表8-2形式,供查用。36表8-2用定时器T1产生的常用波特率37波特率foscSMOD位方式初值X62.5kbit/s12MHz11、3FFH19.2kbit/s11.0592MHz11、3FDH9.6kbit/s11.0592MHz01、3FDH4.8kbit/s11.0592MHz01、3FAH2.4kbit/s11.0592MHz01、3F4H1.2kbit/s11.0592MHz01、3E8H表8-2有两点需要注意:(1)在使用的时钟振荡频率fosc为12MHz或6MHz时,将初值X和fosc带入式(8-3)中计算出的波特率有一定误差。消除误差可采用时钟频率11.0592MHz。(2)如果选用很低的波特率,如选为55,可将定时器T1设为方式1定时。但这种情况,T1溢出时,需在中断服务程序中重新装入初值。中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的方法加以调整。38【例8-3】若时钟频率为11.0592MHz,选用T1的方式2定时作为波特率发生器,波特率为2.4kbit/s,求初值。设
本文标题:第8章 AT89S51单片机的串行口
链接地址:https://www.777doc.com/doc-7087822 .html