AT89S51单片机的串行口.ppt
《AT89S51单片机的串行口.ppt》由会员分享,可在线阅读,更多相关《AT89S51单片机的串行口.ppt(89页珍藏版)》请在三一办公上搜索。
1、第8章 AT89S51单片机的 串行口,全双工异步串行口,并行通信,并行通信和串行通信,串行通信,数据的各位同时传送(接收),数据的逐位分时传送(接收),异步通信和同步通信,异步通信(Asynchronous Communication):,同步通信(Synchronous Communication):,同步通信是指通信时要建立发送方时钟对接收方时钟的直接控制,使收发双方达到完全同步的一种通信方式。,异步通信是指发送端和接收端使用各自的时钟来控制数据的发送和接收的一种通信方式。这两个时钟源彼此独立,无需严格同步。,串行通信的3种制式:单工(simplex)半双工(half duplex)全双
2、工(duplex),概述:可编程的全双工异步串行口 管脚:TXD(P3.1)、RXD(P3.0)可同时发送、接收数据 四种工作方式,帧格式有8位、10位、11位 波特率(Baud rate)可设置 波特率(比特率):每秒钟传送二进制数的位 数,单位b/s。,8.1 串行口的结构,图8-1 内部结构,PCON,SCON,SBUF_串行口数据缓冲器两个物理上独立的接收、发送缓冲器发送缓冲器只写不能读。接收缓冲器只读不能写。两个缓冲器共用一个字节地址(99H)。SCON _串行口控制寄存器(98H),可位寻址 PCON _电源控制寄存器(87H),不可位寻址,8.1.1 串行口控制寄存器SCON,接
3、收中断标志,发送中断标志,发送中断标志,接收的第9位数据,发送的第9位数据,允许串行接收位,多机通信控制位,允许串行接收位,工作方式选择位,表8-1串行口的工作方式,8.1.2 电源控制及波特率选择寄存器PCON,当SMOD=1时,要比SMOD=0时波特率加倍,所以也称SMOD位为波特率倍增位。,例如,方式1的波特率计算公式:方式1波特率=定时器T1的溢出率,8.2 串行口的4种工作方式8.2.1 方式0同步移位寄存器输入/输出方式。该方式并不用于两个AT89S51单片机之间的异步串行通信,而是用于串行口外接移位寄存器,扩展并行I/O口。8位数据为一帧,无起始位和停止位,先发送或接收最低位。波
4、特率为fosc/12。帧格式如图8-4。图8-4 方式0的帧格式,1方式0输出(1)方式0输出的工作原理当执行一条将数据写入发送缓冲器SBUF指令时,产生一个正脉冲,串行口开始把SBUF中的8位数据以fosc/12的固定波特率从RXD引脚串行输出,低位在先,TXD引脚输出同步移位脉冲,发送完8位数据,中断标志位TI置“1”。发送时序如图8-5。,图7-5 方式0发送时序,(2)方式0输出的应用 典型应用是外扩串行输入/并行输出的同步移位寄存器74LS164,实现并行输出端口的扩展。图8-6为串行口工作在方式0,通过74LS164的输出来控制8个外接LED发光二极管亮灭的接口电路。当串行口被设置
5、在方式0输出时,串行数据由RXD端(P3.0)送出,移位脉冲由TXD端(P3.1)送出。在移位脉冲的作用下,串行口发送缓冲器的数据逐位地从RXD端串行地移入74LS164中。,图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位数据。采
6、用中断方式的参考程序如下。,#include#include sbit P1_0=0 x90;unsigned char nSendByte;void delay(unsigned int i)int j;for(;i0;i-)for(j=0;j125;j+);main()SCON=0 x00;/*设置串行口为方式0*/EA=1;/*全局中断允许*/ES=1;/*允许串行口中断*/nSendByte=1;SBUF=nSendByte;/启动串口发送P1_0=0;/允许串口向164串行发送数据while(1);,void Serial_Port()interrupt 4 using 0 TI=0
7、;P1_0=1;nSendByte=1;if(nSendByte=0)nSendByte=1;SBUF=nSendByte;delay(500);P1_0=0;,2方式0输入(1)方式0输入工作原理方式0接收,REN为允许接收控制位,REN=0,禁止接收;REN=1,允许接收。当向SCON寄存器写入控制字(设置为方式0,并使REN位置“1”,同时RI=0)时,产生一个正脉冲,串行口开始接收数据。引脚RXD为数据输入端,TXD为移位脉冲信号输出端,接收器以fosc/12的固定波特率采样RXD引脚的数据信息,当接收完8位数据时,中断标志RI置“1”,表示一帧数据接收完毕,通知CPU读取该数据,并执
8、行RI=0指令,准备接收下一帧数据,时序如图8-7。,图7-7 方式0接收时序,图8-8 外接并行输入串行输出的同步移位寄存器,#include sbit P1_1=0 x91;void delay(unsigned int i)int j;for(;i0;i-)for(j=0;j125;j+);void main()SCON=0 x10;/*串行口初始化为方式0*/while(1)P1_1=0;P1_1=1;while(RI=0);RI=0;P2=SBUF;/*读入SBUF 中的数据*/delay(10);,参考程序如下:,查询方式读入开关状态,作业:中断方式读入开关状态,8.2.2 方式1
9、方式1为双机串行通信方式,如图8-9所示。当SM0、SM1=01时,串行口设为方式1的双机串行通信。TXD脚和RXD脚分别用于发送和接收数据。图8-9 方式1双机串行通信的连接电路,方式1一帧数据为10位,1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。帧格式如图8-10。图8-10 方式1的帧格式方式1为波特率可变的8位异步通信接口。波特率由下式确定:方式1波特率=定时器T1的溢出率SMOD为PCON寄存器的最高位的值(0或1)。,1方式1发送方式1输出时,数据位由TXD端输出,当CPU执行一条数据写SBUF的指令,就启动发送。发送时序见图8-11。图8-11中TX时钟的
10、频率就是发送的波特率。,内部发送控制信号,图8-11 方式1发送时序,中断标志位TI置“1,发送移位时钟信号,空闲为1,2方式1接收方式1接收时(REN=1),数据从RXD(P3.1)引脚输入。当检测到起始位的负跳变,则开始接收。接收时序见图8-12。,图8-12 方式1接收时序,接收移位时钟信号,空闲为1,D7,接收数据有效(能装入SBUF且能被CPU读出的)的条件:(1)RI=0;SM2=0(方式1时,SM2设为0)。(2)RI=0;RB8=1(控制激活RI的功能),SM2=1(只有接收到有效的停止位,RI才被置“1”。若不满足任何一个条件,收的数据不能被CPU读,该帧数据将丢弃。,8.2
11、.3 方式2 方式2和方式3,9位异步通信接口。每帧数据为11位,1位起始位0,8位数据位(先低位),1位可程控为1或0的第9位数据和1位停止位。方式2、方式3帧格式如图8-13。图8-13 方式2、方式3的帧格式方式2波特率=fosc,1方式2发送 发送前,先根据协议由软件设置TB8(如奇偶校验位或多机通信的地址/数据标志位),然后将要发送的数据写入SBUF,即启动发送。TB8自动装入第9位数据位,逐一发送。发送完毕,使TI位置“1”。图8-14 方式2和方式3发送时序,2方式2接收 SM0、SM1=10,且REN=1时。数据由RXD端输入,当位检测逻辑采样到RXD的负跳变,判断起始位有效,
12、便开始接收一帧信息。在接收完第9位数据后,需满足以下两个条件,才能将接收到的数据送入接收缓冲器SBUF。(1)RI=0,意味着接收缓冲器为空。(2)SM2=0或接收到的第9位数据位RB8=1。当满足上述两个条件时,收到的数据送SBUF(接收缓冲器),第9位数据送入RB8,且RI置“1”。若不满足这两个条件,接收的信息将被丢弃。,串行口方式2和方式3接收时序如图8-15。图8-15 方式2和方式3接收时序,8.2.4 方式3 SM0、SM1=11时,方式3。为波特率可变的9位异步通信方式,除了波特率外,方式3和方式2相同。方式3发送和接收时序如图8-14和图8-15所示。方式3波特率=定时器T1
13、的溢出率,8.4 波特率的制定 串行通信,收、发双方发送或接收的波特率必须一致。8.4.1 波特率的定义 波特率的定义:串行口每秒钟发送(或接收)的位数。,34,8.4.2 定时器T1产生波特率的计算(1)方式0时,波特率固定为时钟频率fosc的1/12,不受SMOD位值的影响。若fosc=12 MHz,波特率1Mbit/s。(2)方式2时,波特率仅与SMOD位的值有关。方式2波特率=fosc 若fosc=12 MHz:SMOD=0,波特率=187.5 kbit/s;SMOD=1,波特率=375 kbit/s。,波特率=定时器T1的溢出率(8-1)波特率由T1溢出率和SMOD的值共同决定。实际
14、设定波特率时,T1常设置为方式2定时(自动装初值),即TL1作为8位计数器,TH1存放备用初值。定时器T1的溢出率=(8-2),35,(3)方式1或方式3时,用T1作为波特率发生器,波特率=(8-3),结论:波特率随fosc、SMOD和定时器 TL0初值X而变化。,定时器TL1在方式2的初值为X,实际使用时,经常根据已知波特率和时钟频率fosc来计算TL1的初值X。为避免繁杂的初值计算,常用的波特率和初值X间的关系常列成表8-2形式,供查用。,36,表8-2用定时器T1产生的常用波特率,37,表8-2有两点需要注意:(1)在使用的时钟振荡频率fosc为12MHz或6MHz时,将初值X和fosc
15、带入式(8-3)中计算出的波特率有一定误差。消除误差可采用时钟频率11.0592MHz。(2)如果选用很低的波特率,如选为55,可将定时器T1设为方式1定时。但这种情况,T1溢出时,需在中断服务程序中重新装入初值。中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的方法加以调整。,38,【例8-3】若时钟频率为11.0592MHz,选用T1的方式2定时作为波特率发生器,波特率为2.4kbit/s,求初值。设T1为方式2定时,选SMOD=0。将已知条件带入式(7-3)中波特率=2400b/s从中解得:X=244=F4H。只要把F4H装入TH1和TL1,即得波特率2 400bit/s
16、。也可直接从表7-2中查到。这里时钟振荡频率选为11.0592MHz,就可使初值为整数,从而产生精确的波特率。,39,8.5 串行通信的应用设计 串行通信接口设计时,需考虑如下问题。(1)首先确定串行通信双方的数传速率和通信距离;(2)由串行通信的数传速率和通信距离确定采用的串行通信接口标准;(3)注意串行通信的通信线选择,一般选用双绞线较好,并根据传输的距离选择纤芯的直径。如空间干扰较多,还要选择带有屏蔽层的双绞线。,8.5.1 各种串行通信接口标准 AT89S51单串口的输入、输出均为TTL电平。以TTL电平串行传输数据的方式,抗干扰性差,传输距离短,速率低。为了提高串行通信可靠性,增大串
17、行通信的距离和提高传输速率,一般都采用标准串行接口,如RS-232、RS-422A、RS-485等。,8.5.2 方式1的应用设计【例8-4】如图甲、乙双机串行通信,双机的RXD和TXD相互交叉相连,甲机的P1口接8个开关,乙机的P1口接8个发光二极管。甲机设置为只发不收的单工方式。要求甲机读入P1口的8个开关的状态后,通过串行口发送到乙机,乙机将接收到的甲机的8个开关的状态数据送入P1口,由P1口的8个发光二极管来显示8个开关的状态。双方晶振均采用11.0592MHz。参考程序如下。,#include void delay(unsigned int i)int j;for(;i0;i-)fo
18、r(j=0;j125;j+);void main()TMOD=0 x20;/*设置定时器T1为方式2*/TH1=0 xfd;/*波特率9600*/TL1=0 xfd;SCON=0 x40;/*方式1只发送,不接收*/PCON=0 x00;/*串行口初始化为方式0*/TR1=1;/*启动T1*/P1=0 xff;/*P1口为输入*/SBUF=P1;while(1)if(TI=1);/*如果TI=1,发送完数据*/SBUF=P1;/*读入P1口开关的状态数据并送串行口发送*/delay(100);TI=0;/*已发送完,再把TI清0*/,44,P218页书中的程序是否工作正常,如不能找出原因,/*
19、甲机串行发送*/,#include void delay(unsigned int i)int j;for(;i0;i-)for(j=0;j125;j+);void main()TMOD=0 x20;/*设置定时器T1为方式2*/TH1=0 xfd;/*波特率9600*/TL1=0 xfd;SCON=0 x50;/*设置串口为方式1接收,REN=1*/PCON=0 x00;/*SMOD=0*/TR1=1;/*启动T1*/while(1)if(RI=1);/*若RI为1,接收到数据*/P1=SBUF;/*接收的数据送P1口控制8个LED的亮与灭*/delay(100);RI=0;/*接收到数据,
20、则把RI清0*/,45,/*乙机串行接收*/,8.5.3 方式2和方式3的应用 方式2和方式1两点不同:方式2收/发11位信息,第0位为起始位,第18位为数据位,第9位是程控位,可由用户置TB8决定,第10位是停止位1。方式2波特率=振荡器频率/n。,当SMOD=0时,n=64。当SMOD=1时,n=32。除波特率的差别外,方式2的使用和方式3是一样的,所以下面介绍的方式3应用编程,也适用于方式2。,【例8-6】甲乙两个单片机进行方式3(或方式2)串行通讯。甲机将8个流水灯控制数据发送给乙机,乙机再利用该数据点亮其P1口的8个LED。方式3比方式1多了一个可编程位TB8,该位一般作奇偶校验位。
21、乙机接收到的8位二进制数据有可能出错,需进行奇偶校验,其方法是将乙机的RB8和PSW的奇偶校验位P进行比较,如相同,接收数据;否则拒绝接收。参考程序如下。,甲机发送程序如下:,#include unsigned char code Tab=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;void Send(unsigned char dat)/*发送一个字节数据的函数*/SBUF=dat;/*将待发送的数据写入发送缓冲器*/TB8=P;/*将奇偶校验位写入TB8*/while(TI=0);/*检测发送标志位TI,TI=0,未发送完*/;/*空操作
22、*/TI=0;/*一个字节发送完,TI清0*/void Delay(void)/*延时大约200ms函数*/unsigned char m,n;for(m=0;m250;m+);for(n=0;n250;n+);,void main(void)/*主函数*/unsigned char i;TMOD=0 x20;/*设置定时器T1为方式2*/SCON=0 xc0;/*设置串口为方式3*/PCON=0 x00;/*SMOD=0*/TH1=0 xfd;/*给定时器T1赋初值,波特率设置为9600*/TL1=0 xfd;TR1=1;/*启动定时器T1*/while(1)for(i=0;i8;i+)Se
23、nd(Tabi);Delay();/*大约200ms发送一次数据*/,乙机接收程序如下:,#include unsigned char Receive(void)/*接收一个字节数据的函数*/unsigned char dat;while(RI=0);/*检测接收中断标志RI,RI=0,未接收完,则循环等待*/;RI=0;/*已接收一帧数据,将RI清0*/ACC=SBUF;/*将接收缓冲器的数据存于ACC*/if(RB8=P)/*只有奇偶校验成功才接收数据*/dat=ACC;/*将接收缓冲器的数据,存于dat*/return dat;/*将接收的数据返回*/,void main(void)/*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AT89S51 单片机 串行口

链接地址:https://www.31ppt.com/p-5415953.html