资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第七讲 串行通讯,电气工程系,赵志衡,E-,mail:,1,本讲课程主要内容,(,1,)串行通讯的基本概念及,MCS-51,串行口的,SFR,(,2,),串行口的工作方式,(,3,)串行口波特率的制定,(,4,)串行口的编程方法,(,5,)多机通讯,2,串行通讯的基本概念,通讯的基本方式:,串行通讯与并行通讯,串行同步通讯、串行异步通讯,单工、半双工和全双工串行通讯,3,并行通讯、串行通讯,并行通讯:数据各位同时传送,串行通讯:数据一位一位顺序传送,4,串行异步通讯、串行同步通讯,异步通讯,每个数据都要用起始位和停止位作为传送数据开始和结束标志。,同步通讯,具有数据端和时钟端,双方依靠时钟同步。,5,MCS-51,串行口的基本结构,发送器:将,CPU,送来的并行数据,通过发送移位寄存器变为串行数据逐位发送,并自动添加起始位、停止位和奇偶校验位。,接收器:将接收到的串行数据,经接收移位寄存器变为并行数据,去掉起始位、停止位后,将正确数据送到接收数据缓冲器,供,CPU,读取。,控制器:接收,CPU,送来的编程命令,按选定方式实现对串行接口的控制。主要控制参数有:传送波特率的选择、数据格式的选择等。另外还与,CPU,交换状态信号和中断信号。,串行接口逻辑部件框图,6,串行口的基本结构,SCON,为串行口控制,/,状态寄存器,通过编程写入,SCON,的控制位可选择串行口的工作方式,读出,SCON,的状态位可查询串行口的工作状态。定时,/,计数器,T1,被用做串行口的波特率发生器,由可控分频电路决定数据传送的波特率。串行口信息的发送,/,接收是通过写,/,读数据缓冲器,SBUF,来实现的。,7,串行口的,SFR,串行数据缓冲器,SBUF(99H),串行口有两个,8,位数据缓冲器,一个是发送数据缓冲器,SBUF,,,一个是接收数据缓冲器,SBUF,。,它们共用一个地址,99H,,,发送,SBUF,只能写入,而接收,SBUF,只能读出。,通过指令区分:,MOV SBUF,A MOV A,SBUF,控制寄存器,SCON(98H),SM0 SM1 SM2 REN TB8 RB8 TI RI,节电控制,寄存器,PCON(87H),SMOD (D7),复位后状态均为,00H,8,串行口控制寄存器,SCON,SM0,、,SM1,:,串行口,4,种工作方式选择位,SM2,:,方式,2,和方式,3,中的多机通信控制位。在方式,2,和方式,3,中,如,SM2=1,,,则当接收到的第,9,位数据,(RB8),为,0,时,不激活接收中断标志,RI(RI=1),。,在方式,1,中,如,SM2=1,,,则只有当接收到有效停止位时才激活,RI,,,若没有接收到有效停止位,则,RI,清,0,。在方式,0,中,,SM2,必须为,0,。,REN,:,允许串行接收位。,REN=1,允许接收;,REN=0,禁止接收,由软件置位或清零。,TB8,:,是工作在方式,2,和,3,时,要发送的第,9,位数据。可由软件置,1,或清,0,。在许多的通讯协议中该位是奇偶校验位。,在多机通讯中用来表示是地址帧还是数据帧,,TB8=1,为地址帧,,TB8,0,为数据帧。,9,串行口控制寄存器,SCON,RB8,:,当工作在方式,2,和,3,时,为接收到的第,9,位数据。,TI,:,发送中断标志位,在方式,0,串行发送第,8,位数据结束时由硬件置,1,,或在其它方式串行发送停止位后置,1,,并申请中断。,CPU,响应中断后,可发送下一帧数据,,TI,必须由软件清,0,。,RI,:,为接收结束中断标志。在方式,0,中,当接收到一帧数据的第,8,位结束时,,RI=1,。,在其他方式中,接收到停止位后,,RI=1,,,表示可读取接收,SBUF,中的内容。,RI,必须用软件清,0,。,每次发送和接收前,要注意先将,TI,和,RI,标志位清,0,。,串行口作为一个中断源,中断入口地址只有一个,(0023H),,,当用中断方式同时进行发送和接收时,可通过查询,TI,和,RI,状态,确定是发送还是接收结束引起的中断。,10,节电控制寄存器,PCON,PCON,主要用于节电运行方式控制,,PCON.7,用做串行口波特率加倍控制位。当设定,SMOD=1,时,波特率加倍,当,SMOD=0,时,波特率不加倍。,11,串行口的工作方式,SM0,、,SM1,工作方式选择位,12,方式,0,:,(SM0=0 SM1=0),串行口方式,0,为,8,位数据同步移位寄存器方式。,RXD,引脚为同步数据的输入,/,输出端,,TXD,引脚为同步移位脉冲输出端。一个数据帧为,8,位,,每一个移位脉冲对应数据帧的一个数据位。方式,0,的,波特率固定为,f,osc,/12,。,13,方式,0,的说明,:,写入,SCON,使,REN=0,,,TI=0,;,然后执行写入,SBUF,的指令,,8,位数据装入发送,SBUF,,,硬件启动串行口发送器进行一次发送。通过发送移位寄存器将,8,位数据逐位送到,RXD,引脚,每个机器周期内发送一位数据。对应发送数据的每一位,由,TXD,引脚同步输出一个移位脉冲。发送完一帧,自动置位,TI,标志,并申请串行口中断。若,CPU,响应中断,则将从,0023H,单元开始执行串行口的中断服务程序。,写入,SCON,使,REN=1,、,RI=0,,,将启动串行口接收器开始接收。由,TXD,输出移位脉冲,每对应一个移位脉冲,采样一次,RXD,引脚信号。每个机器周期采样一次,RXD,引脚,采到的数据位送入接收移位寄存器后,接收移位寄存器左移一位。接收完一帧,自动置位,RI,标志,申请串行口中断,并将接收下来的,8,位数据装入接收,SBUF,。若,CPU,响应中断,则从,0023H,单元开始执行串行口的中断服务程序。,串行口方式,0,常用于扩展单片机的并行,I/O,口,也可外接串行同步,I/O,设备。用方式,0,输入,/,输出数据皆通过,RXD,端,因此方式,0,为半双工方式,只能分时进行发送和接收。,14,方式,1,(,SM0=0 SM1=1,),功能说明:串行口方式,1,为,8,位数据全双工异步通信方式。,TXD,为发送数据端,,RXD,为接收数据端。一个数据帧为,10,位,包含,8,位数据位,,1,个起始位“,0”,和,1,个停止位“,1”,。串行口用方式,1,工作时,使用定时器,T1,作为波特率发生器,波特率的设定,以,T1,的溢出率为基准,波特率计算式为,:,(2,SMOD,/32)T1,溢出率。,15,方式,1,的时序图,16,方式,1,功能说明,执行写入,SBUF,指令,,将,8,位数据装入发送,SBUF,,,并启动发送器进行一次发送,:,先将起始位“,0”,送到,TXD,引脚,再从低到高逐位发送,8,位数据,最后发送停止位“,1”,。每位发送占用的时间由设定的波特率决定。发送完一帧数据,置位,TI,标志,申请串行口中断。,当,REN=1,时,,允许接收器准备接收。开始,以,16,倍于波特率的速率检测,RXD,引脚的负跳变,当检测到负跳变后,启动一次接收,接收完一帧信息,判断是否满足条件,:,RI=0,,,而且停止位为,1(,或,SM2=0),。,若同时满足这两个条件,则置,位,RI,标志,申请串行口中断,并将接收的,8,位数据装入接收,SBUF,,,停止位装入,RB8,;,否则接收无效,丢失所接收的一帧信息,且不影响,RI,标志。一位时间以后,接收器重新开始检测,RXD,端的负跳变,以准备接收下一帧数据,。,17,方式,2,、方式,3,串行口方式,2,和方式,3,皆为,9,位数据全双工异步通信方式,比串行口方式,1,增加了第,9,位数据位,。,TXD,为发送数据端,,RXD,为接收数据端。一帧信息有,11,位,包括,9,位数据位,,1,个起始位“,0”,和,1,个停止位“,1”,。发送数据的第,9,位在,TB8,中,接收数据的第,9,位存入,RB8,中。第,9,位数据位也称为可编程位,常用做奇偶校检位或多机通信中的地址,/,数据识别位。,串行口的方式,2,与方式,3,的唯一差别是波特率设定方法不同,方式,2,的波特率以系统时钟为基准,计算式为,:,(2,SMOD,/64),f,osc,。,方式,3,的波特率与方式,1,的相同,计算式为,:,(2,SMOD,/32)T1,溢出率。,18,方式,2,、,3,的时序,19,方式,2,、,3,的功能说明,发送时,应先将发送数据的第,9,位送入,TB8,,,再写入,8,位数据到发送,SBUF,,,使发送器启动一次发送,将一帧数据逐位送到,TXD,引脚,:,发送起始位“,0”,之后,再发送,SBUF,中的,8,位数据,接着发送,TB8,中的第,9,位,最后发送停止位“,1”,。一帧发送结束,置位,TI,标志,申请串行口中断。,方式,2,和方式,3,的接收过程和方式,1,的接收过程基本相同,但,RB8,中装入的是接收数据的第,9,位,而不是停止位。接收有效必须同时满足的两个条件改为,:,RI=0,,,且接收的第,9,位数据位为,1(,或,SM2=0),。,当正确接收到一帧数据后,前面,8,位数据进入接收,SBUF,,,第,9,位数据进入,RB8,。,20,波特率的制定,波特率的定义:串行口每秒钟发送或者接收的位数。,串行口方式,0,的波特率是固定的,为系统时钟的,12,分频,(f,osc,/12),,,即每个机器周期传送一位数据位。,串行口用方式,2,工作时,波特率为,(2,SMOD,/64)f,osc,。,SMOD,为,PCON,中的,D,7,位,即波特率加倍选择位。方式,2,可有两种波特率供选择,当,SMOD=0,时,波特率为,f,osc,/64,;,当,SMOD=1,时,波特率则为,f,osc,/32,。,串行口方式,1,和方式,3,用定时器,T1,作为波特率发生器,,其波特率有多种选择,,与,T1,的溢出率有关。,波特率,=(2,SMOD,32)T1,溢出率,21,定时器,T1,产生波特率的计算,T1,溢出率:,T1,溢出时间的倒数。,T1,用于波特率发生器时一般工作于非门控定时器方式,2,,即常数自动重装入方式。,TH1=TL1,为,T1,的时间常数,22,定时器,T1,产生波特率的计算,串行口用方式,1,和方式,3,工作时,当需要很低的波特率时,也可选择,T1,工作于方式,1,,但需利用,T1,溢出中断来实现软件重装初值,,T1,用方式,1,工作时溢出率为,:,N,为,T1,溢出后用软件重装初值所需的机器周期数。,23,T1,产生的常用波特率,24,波特率计算的几点注意事项,:,1,),波特率的相对误差不大于,2.5%,2,),注意,SMOD,位对波特率的影响,例如:通讯波特率设为,2400,,晶振频率为,6MHz,,,计算,T1,的,计时常数。,当,SMOD=0,时,计时常数约为,249,,相对误差,7%,。,当,SMOD=1,时,计时常数约为,243,,相对误差,0.16%,。,25,串行口的编程举例,设定波特率,设定串行口的工作方式,设计中断服务程序或查询程序,注意,对,TI,、,RI,的处理(硬件置位、软件清零),26,MCS-51,双机串行通讯的实现,如何进行物理连线?,波特率的选择?,工作方式的选择?,如何编程实现?,27,双机串行通讯的实现,-1,正确进行物理接线,28,双机串行通讯的实现,-2,设定一致的波特率,设定一致的串行口工作方式,分别设计中断服务程序或查询程序,注意,对,TI,、,RI,的处理,(硬件置位、软件清零),29,方式,3,发送,50H5FH,的内容,待发送的,16,个字节存放在片内,RAM,中,地址为,50H5FH,串行口波特率为,2400,波特率发生器,T1,工作于方式,2,,,且,SMOD=0,晶振为,11.0592MHz,计算得到,TL1,的初值为,F4H,。,串行口工作于方式,3,第,9,位发送奇偶校验位,
展开阅读全文