
《第8讲串行通讯》由会员分享,可在线阅读,更多相关《第8讲串行通讯(40页珍藏版)》请在文档大全上搜索。
1、1第8讲 串行通讯电气工程系赵志衡E-mail:2本讲课程主要内容(1)串行通讯的基本概念及MCS-51串行口的SFR(2)串行口的工作方式(3)串行口波特率的制定(4)串行口的编程方法(5)多机通讯3串行通讯的基本概念串行通讯的基本概念通讯的基本方式:n串行通讯与并行通讯n串行同步通讯、串行异步通讯 n单工、半双工和全双工串行通讯 4并行通讯、串行通讯并行通讯:数据各位同时传送串行通讯:数据一位一位顺序传送5串行异步通讯、串行同步通讯 异步通讯,每个数据都要用起始位和停止位作为传送数据开始和结束标志。同步通讯,具有数据端和时钟端,双方依靠时钟同步。6单工、半双工、全双工串行通讯单工、半双工、
2、全双工串行通讯n单工:仅能发送或接收n半双工:能发送、接收,但发送与接收不能同时进行n全双工:能够同时进行发送与接受。nMCS-51可以进行全双工的串行通讯7MCS-51串行口的基本结构n发送器:将发送器:将CPUCPU送来的并行数据,通过送来的并行数据,通过发送移位寄存器变为串行数据逐位发发送移位寄存器变为串行数据逐位发送,并自动添加起始位、停止位和第送,并自动添加起始位、停止位和第9 9位数据。位数据。n接收器:将接收到的串行数据,经接接收器:将接收到的串行数据,经接收移位寄存器变为并行数据,去掉起收移位寄存器变为并行数据,去掉起始位、停止位后,将正确数据送到接始位、停止位后,将正确数据送
3、到接收数据缓冲器,供收数据缓冲器,供CPUCPU读取。读取。n控制器:接收控制器:接收CPUCPU送来的编程命令,按送来的编程命令,按选定方式实现对串行接口的控制。主选定方式实现对串行接口的控制。主要控制参数有:传送波特率的选择、要控制参数有:传送波特率的选择、数据格式的选择等。另外还与数据格式的选择等。另外还与CPUCPU交换交换状态信号和中断信号。状态信号和中断信号。 串行接口逻辑部件框图8串行口的基本结构nSCON为串行口控制为串行口控制/状态寄状态寄存器,通过编程写入存器,通过编程写入SCON的的控制位可选择串行口的工作控制位可选择串行口的工作方式,读出方式,读出SCON的状态位可的状
4、态位可查询串行口的工作状态。查询串行口的工作状态。n定时定时/计数器计数器T1可被用做串行可被用做串行口的波特率发生器。口的波特率发生器。n有可控分频电路影响数据传有可控分频电路影响数据传送波特率。送波特率。n串行口信息的发送串行口信息的发送/接收是通接收是通过写过写/读数据缓冲器读数据缓冲器SBUF来来实现的。实现的。9串行口的SFRn串行数据缓冲器串行数据缓冲器SBUF(99H) 串行口有两个串行口有两个8位数据缓冲器,一个是发送数据位数据缓冲器,一个是发送数据缓冲器缓冲器SBUF,一个是接收数据缓冲器,一个是接收数据缓冲器SBUF。它们共。它们共用一个地址用一个地址99H,发送,发送SB
5、UF只能写入,而接收只能写入,而接收SBUF只能读出。只能读出。 通过指令区分:通过指令区分:MOV SBUF,A MOV A,SBUFn控制寄存器控制寄存器SCON (98H)SM0 SM1 SM2 REN TB8 RB8 TI RIn节电控制节电控制寄存器寄存器PCON(87H) SMOD (D7)n复位后状态均为复位后状态均为00H 10串行口控制寄存器SCON SM0、SM1:串行口串行口4种工作方式选择位种工作方式选择位 SM2:方式方式2和方式和方式3中的多机通信控制位。在方式中的多机通信控制位。在方式2和方式和方式3中,如中,如SM2=1,则当接收到的第,则当接收到的第9位数据位
6、数据(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。在许多的通讯协议中该位是奇偶。在
7、许多的通讯协议中该位是奇偶校验位。校验位。在多机通讯中用来表示是地址帧还是数据帧,在多机通讯中用来表示是地址帧还是数据帧,TB8=1为地址帧,为地址帧,TB80为数据帧。为数据帧。11串行口控制寄存器SCONnRB8:当工作在方式当工作在方式2和和3时,为接收到的第时,为接收到的第9位数据。位数据。nTI:发送中断标志位,在方式发送中断标志位,在方式0串行发送第串行发送第8位数据结位数据结束时由硬件置束时由硬件置1,或在其它方式串行发送停止位后置,或在其它方式串行发送停止位后置1,并申请中断。并申请中断。CPU响应中断后,可发送下一帧数据,响应中断后,可发送下一帧数据,TI必须由软件清必须由软
8、件清0。nRI:为接收结束中断标志。在方式为接收结束中断标志。在方式0中,当接收到一中,当接收到一帧数据的第帧数据的第8位结束时,位结束时,RI=1。在其他方式中,接收。在其他方式中,接收到停止位后,到停止位后,RI=1,表示可读取接收,表示可读取接收SBUF中的内容。中的内容。RI必须用软件清必须用软件清0。 n每次发送和接收前,要注意先将每次发送和接收前,要注意先将TI和和RI标志位清标志位清0 。 串行口作为一个中断源,中断入口地址只有一个串行口作为一个中断源,中断入口地址只有一个(0023H),当用中断方式同时进行发送和接收时,可通过查询当用中断方式同时进行发送和接收时,可通过查询TI
9、和和RI状态,状态,确定是发送还是接收结束引起的中断。确定是发送还是接收结束引起的中断。 12节电控制寄存器PCON nPCON主要用于节电运行方式控制, PCON.7用做串行口波特率加倍控制位。当设定SMOD=1时,波特率加倍,当SMOD=0时,波特率不加倍。 13串行口的工作方式nSM0、SM1工作方式选择位14方式 0 :(SM0=0 SM1=0)n串行口方式串行口方式0为为8位位数据同步移位寄存器数据同步移位寄存器方式。方式。RXD引脚为同引脚为同步数据的输入步数据的输入/输出输出端,端,TXD引脚为同步引脚为同步移位脉冲输出端。一移位脉冲输出端。一个数据帧为个数据帧为8位,位,每每一
10、个移位脉冲对应数一个移位脉冲对应数据帧的一个数据位。据帧的一个数据位。方式方式0的的波特率固定波特率固定为为fosc/12。 REN=0 写 SBUF RXD 数据输出 TXD TI D0 D1 D2 D3 D4 D5 D6 D7 REN=1 RI=0 RXD 输入数据 RI 串行口方式 0 工作时序图 (a) 发送时序图 (b) 接收时序图 TXD 15方式0的说明:n写入写入SCON使使REN=0,TI=0;然后执行写入;然后执行写入SBUF的指令,的指令,8位数位数据装入发送据装入发送SBUF,硬件启动串行口发送器进行一次发送。通过发,硬件启动串行口发送器进行一次发送。通过发送移位寄存器
11、将送移位寄存器将8位数据逐位送到位数据逐位送到RXD引脚,每个机器周期内发送引脚,每个机器周期内发送一位数据。对应发送数据的每一位,由一位数据。对应发送数据的每一位,由TXD引脚同步输出一个移位引脚同步输出一个移位脉冲。发送完一帧,自动置位脉冲。发送完一帧,自动置位TI标志,并申请串行口中断。若标志,并申请串行口中断。若CPU响应中断,则将从响应中断,则将从0023H单元开始执行串行口的中断服务程序。单元开始执行串行口的中断服务程序。 n写入写入SCON使使REN = 1、RI = 0,将启动串行口接收器开始接收。,将启动串行口接收器开始接收。由由TXD输出移位脉冲,每对应一个移位脉冲,采样一
12、次输出移位脉冲,每对应一个移位脉冲,采样一次RXD引脚信引脚信号。每个机器周期采样一次号。每个机器周期采样一次RXD引脚,采到的数据位送入接收移位引脚,采到的数据位送入接收移位寄存器后,接收移位寄存器左移一位。接收完一帧,自动置位寄存器后,接收移位寄存器左移一位。接收完一帧,自动置位RI标标志,申请串行口中断,并将接收下来的志,申请串行口中断,并将接收下来的8位数据装入接收位数据装入接收SBUF。若。若CPU响应中断,则从响应中断,则从0023H单元开始执行串行口的中断服务程序。单元开始执行串行口的中断服务程序。n串行口方式串行口方式0常用于扩展单片机的并行常用于扩展单片机的并行I/O口,也可
13、外口,也可外接串行同步接串行同步I/O设备。用方式设备。用方式0输入输入/输出数据皆通过输出数据皆通过RXD端,因此方式端,因此方式0为半双工方式,只能分时进行发送为半双工方式,只能分时进行发送和接收。和接收。 16方式1(SM0=0 SM1=1) 功能说明:串行口方式1为8位数据全双工异步通信方式。TXD为发送数据端,RXD为接收数据端。一个数据帧为10位,包含8位数据位,1个起始位“0”和1个停止位“1”。串行口用方式1工作时,使用定时器T1作为波特率发生器,波特率的设定以T1的溢出率为基准,波特率计算式为:(2SMOD/32)T1溢出率。 17方式1的时序图 采样 (a) 发送时序图 串
14、行口方式1工作时序图 写入 SBUF TXD 数据输出 TI D0 D1 D2 D3 D4 D5 D6 D7 停止位 起始位 RXD 输入数据 (b) 接收时序图 D0 D1 D2 D3 D4 D5 D6 D7 停止位 起始位 RI 检测 负跳变 REN=1, 18方式1功能说明执行写入执行写入SBUF指令,指令,将将8位数据装入发送位数据装入发送SBUF,并启动发送,并启动发送器进行一次发送器进行一次发送:先将起始位先将起始位“0”送到送到TXD引脚,再从低到引脚,再从低到高逐位发送高逐位发送8位数据,最后发送停止位位数据,最后发送停止位“1”。每位发送占用。每位发送占用的时间由设定的波特率
15、决定。发送完一帧数据,置位的时间由设定的波特率决定。发送完一帧数据,置位TI标志,标志,申请串行口中断。申请串行口中断。当当REN=1时时,允许接收器准备接收。开始,以,允许接收器准备接收。开始,以16倍于波特率倍于波特率的速率检测的速率检测RXD引脚的负跳变,当检测到负跳变后,启动一引脚的负跳变,当检测到负跳变后,启动一次接收,接收完一帧信息,判断是否满足条件次接收,接收完一帧信息,判断是否满足条件:RI = 0,而,而且停止位为且停止位为1(或或SM2=0)。若同时满足这两个条件,则置位。若同时满足这两个条件,则置位RI标志,申请串行口中断,并将接收的标志,申请串行口中断,并将接收的8位数
16、据装入接收位数据装入接收SBUF,停止位装入,停止位装入RB8;否则接收无效,丢失所接收的一否则接收无效,丢失所接收的一帧信息,且不影响帧信息,且不影响RI标志。一位时间以后,接收器重新开始标志。一位时间以后,接收器重新开始检测检测RXD端的负跳变,以准备接收下一帧数据。端的负跳变,以准备接收下一帧数据。19方式2、方式3 串行口方式串行口方式2和方式和方式3皆为皆为9位数据全双工异步位数据全双工异步通信方式,比串行口方式通信方式,比串行口方式1增加了第增加了第9位数据位。位数据位。TXD为发送数据端,为发送数据端,RXD为接收数据端。一帧信息有为接收数据端。一帧信息有11位,包括位,包括9位
17、数据位,位数据位,1个起始位个起始位“0”和和1个停止位个停止位“1”。发送数据的第。发送数据的第9位在位在TB8中,接收数据的第中,接收数据的第9位位存入存入RB8中。第中。第9位数据位也称为可编程位,常用做位数据位也称为可编程位,常用做奇偶校检位或多机通信中的地址奇偶校检位或多机通信中的地址/数据识别位。数据识别位。 串行口的方式串行口的方式2与方式与方式3的唯一差别是波特率设的唯一差别是波特率设定方法不同,方式定方法不同,方式2的波特率以系统时钟为基准,计的波特率以系统时钟为基准,计算式为算式为:(2SMOD/64) fosc。方式。方式3的波特率与方式的波特率与方式1的相同,计算式为的
18、相同,计算式为:(2SMOD/32)T1溢出率。溢出率。 20方式2、3的时序 (a) 发送时序图 串行口方式 2、方式 3 工作时序图 写入 SBUF TXD 数据输出 TI RXD 输入数据 (b) 接收时序图 RI D0 D1 D2 D3 D4 D5 D6 TB8 停止位 起始位 D7 D0 D1 D2 D3 D4 D5 D6 RB8 停止位 起始位 D7 检测 负跳变 REN=1, 21方式2、3的功能说明n发送时,应先将发送数据的第发送时,应先将发送数据的第9位送入位送入TB8,再写入,再写入8位数据到发送位数据到发送SBUF,使发送器启动一次发送,将一帧,使发送器启动一次发送,将一
19、帧数据逐位送到数据逐位送到TXD引脚引脚:发送起始位发送起始位“0”之后,再发之后,再发送送SBUF中的中的8位数据,接着发送位数据,接着发送TB8中的第中的第9位,最位,最后发送停止位后发送停止位“1”。一帧发送结束,置位。一帧发送结束,置位TI标志,申标志,申请串行口中断。请串行口中断。n方式方式2和方式和方式3的接收过程和方式的接收过程和方式1的接收过程基本相的接收过程基本相同,但同,但RB8中装入的是接收数据的第中装入的是接收数据的第9位,而不是停止位,而不是停止位。接收有效必须同时满足的两个条件改为位。接收有效必须同时满足的两个条件改为:RI=0,且接收的第且接收的第9位数据位为位数
20、据位为1(或或SM2=0)。当正确接收。当正确接收到一帧数据后,前面到一帧数据后,前面8位数据进入接收位数据进入接收SBUF,第,第9位位数据进入数据进入RB8。 22波特率的制定波特率的定义:串行口每秒钟发送或者接收的位数。波特率的定义:串行口每秒钟发送或者接收的位数。串行口方式串行口方式0的波特率是固定的,为系统时钟的的波特率是固定的,为系统时钟的12分频分频(fosc/12),即每个机器周期传送一位数据位。,即每个机器周期传送一位数据位。串行口用方式串行口用方式2工作时,波特率为工作时,波特率为(2SMOD/64)fosc 。SMOD为为PCON中的中的D7位,即波特率加倍选择位。方式位
21、,即波特率加倍选择位。方式2可有两种波特率供选择,当可有两种波特率供选择,当SMOD=0时,波特率为时,波特率为fosc/64;当当SMOD=1时,波特率则为时,波特率则为fosc/32 。串行口方式串行口方式1和方式和方式3用定时器用定时器T1作为波特率发生器,作为波特率发生器,其波其波特率有多种选择,与特率有多种选择,与T1的溢出率有关。的溢出率有关。 波特率波特率= (2SMOD32)T1溢出率溢出率 23定时器T1产生波特率的计算T1溢出率:溢出率:T1溢出时间的倒数。溢出时间的倒数。nT1用于波特率发生器时一般工作于非门控定时器方式2,即常数自动重装入方式。 TH1 = TL1 为T
22、1的时间常数 TH1)(212fT18osc溢出率TH1)(25612f322oscSMOD的波特率串行口方式1和方式324定时器T1产生波特率的计算n串行口用方式1和方式3工作时,当需要很低的波特率时,也可选择T1工作于方式1,但需利用T1溢出中断来实现软件重装初值,T1用方式1工作时溢出率为: N为T1溢出后用软件重装初值所需的机器周期数。 N) 1TL1TH(212f16osc25T1产生的常用波特率26波特率计算的几点注意事项:n1)波特率的相对误差不大于波特率的相对误差不大于2.5%n2)注意)注意SMOD位对波特率的影响位对波特率的影响例如:通讯波特率设为例如:通讯波特率设为240
23、0,晶振频率为,晶振频率为6MHz,计算,计算T1的计时常数。的计时常数。当当SMOD=0时,计时常数约为时,计时常数约为249,相对误差,相对误差7%。当当SMOD=1时,计时常数约为时,计时常数约为243,相对误差,相对误差0.16%。27串行口的编程举例n设定波特率设定波特率n设定串行口的工作方式设定串行口的工作方式n设计中断服务程序或查询程序设计中断服务程序或查询程序 注意对注意对TI、RI的处理(硬件置位、软件清零)的处理(硬件置位、软件清零)28MCS-51双机串行通讯的实现n如何进行物理连线?n波特率的选择?n工作方式的选择?n如何编程实现?29双机串行通讯的实现-1正确进行物理
24、接线正确进行物理接线30双机串行通讯的实现-2n设定一致的波特率设定一致的波特率n设定一致的串行口工作方式设定一致的串行口工作方式n分别设计中断服务程序或查询程序分别设计中断服务程序或查询程序 注意对注意对TI、RI的处理的处理 (硬件置位、软件清零)(硬件置位、软件清零)31方式3发送50H5FH的内容n待发送的16个字节存放在片内RAM中 地址为50H5FHn串行口波特率为2400波特率发生器T1工作于方式2, 且SMOD=0晶振为11.0592MHz计算得到TL1的初值为F4H。n串行口工作于方式3n第9位发送奇偶校验位32例1: 方式3发送50H5FH中内容-1 ORG0000H;复位
25、入口复位入口nAJMPMAINnORG0023H;串行口中断入口串行口中断入口nAJMPL1nORG0100H;主程序入口主程序入口nMAIN:MOVSCON,#0C0H;串行口初始化,用方式串行口初始化,用方式3发送,发送,TI=0n MOV PCON,#00H;SMODSMOD=0n MOV TMOD,#20H ;T1方式方式2定时定时nMOV TL1,#0F4H ;写入写入T1时间常数时间常数n MOVTH1,#0F4H n SETBTR1;启动启动T1nSETBEAnSETBES;允许串行口中断允许串行口中断nMOVR0,#50H ;设数据指针设数据指针n MOV R7,#10H ;数
26、据长度数据长度nLOOP: MOV A,R0;取一个字符取一个字符n MOV C,P;加奇偶校验加奇偶校验n MOV TB8,Cn MOV SBUF,A;发送一个字符发送一个字符nHERE:SJMPHERE;CPU原地循环,等待发送结束原地循环,等待发送结束33例1: 方式3发送50H5FH中内容-2nL1L1:n CLRTI ;中断服务程序,中断服务程序, 发送结束标志位清发送结束标志位清0n DJNZR7,NEXT;发送完全部字符发送完全部字符?n CLRES ;已发送完,关闭串行口中断已发送完,关闭串行口中断n SJMPTENDnNEXT:n INC R0 ;未发送完,修改指针未发送完,
27、修改指针nMOV A,R0 ;取下一个字符取下一个字符nMOV C,P ;加奇偶校验加奇偶校验nMOV TB8,C nMOV SBUF,A;再次发送一个字符再次发送一个字符nTEND:n RETI ;中断返回主程序中断返回主程序34例2:方式3接收n接收到的16个字节存放在片内RAM中地址为50H5FHn串行口波特率为2400波特率发生器T1工作于方式2, 且SMOD=0晶振为11.0592MHz计算得到TL1的初值为F4H。n串行口工作于方式3奇偶校验方式判断接收数据是否出错设校验出错标志位为F035MAIN: MAIN: MOVSCON,#0D0H ;串行口方式串行口方式3允许接收,允许接
28、收,RI=0n MOV PCON,#00H ;SMODSMOD=0n MOV TMOD,#20H ;T1方式方式2定时定时n MOV TL1,#0F4H ;写入写入T1时间常数时间常数n MOVTH1,#0F4H n SETBTR1 ;启动启动T1n LCALL AAAA LCALL AAAAn SJMP $方式3接收-查询36方式3接收-查询nAAAA: MOVR0,#50H;设数据指针设数据指针n MOVR7,#10H;数据长度数据长度nWAIT: JBCRI,NEXT ;查询查询RI标志,等待串行口接收结束标志,等待串行口接收结束n SJMPWAITnNEXT: MOVA,SBUF ;读
29、取一个接收字符读取一个接收字符n JNB P,COMP ;进行奇偶校验进行奇偶校验n JNB RB8,ERR ;PRB8,数据出错,数据出错n SJMP RIGHT ;P=RB8,数据正确,数据正确nCOMP:JB RB8,ERRnRIGHT:MOV R0,A ;保存一个字符到片内保存一个字符到片内RAMn INC R0 ;修改指针修改指针n DJNZ R7,WAIT;全部字符接收完全部字符接收完?n CLR F0 ;F0 =0,接收数据全部正确,接收数据全部正确n RET ;返回主程序返回主程序nERR: SETBF0 ;F0 =1,接收数据出错,接收数据出错n RET ;返回主程序返回主程
30、序37双机通讯小结n物理接线: TXD-RXD、RXD-TXD、共地n必须一致的波特率n必须一致的工作方式n各自的发送和接收程序可以不同38多机通讯 n主机与各从机实现全双工通信,而各从机之间只能通过主机交换信息。n下图是由MCS-51构成的的集散式分布系统 39多机通讯的基本原理n多机通信控制位多机通信控制位SM2的使用:当串行口以方式的使用:当串行口以方式2(或方式或方式3)接收时,若接收时,若SM2=1,则只有接收到第,则只有接收到第9位数据为位数据为1,才将接,才将接收的数据装入接收收的数据装入接收SBUF,并置位,并置位RI标志标志;否则,不会置位否则,不会置位RI,也不产生中断请求
31、,一帧信息被丢弃。若,也不产生中断请求,一帧信息被丢弃。若SM2=0,则,则接收到的第接收到的第9位不论为位不论为0还是为还是为1,都会将数据装入,都会将数据装入SBUF,并置位并置位RI标志。根据这一功能,可实现多机系统中的主从标志。根据这一功能,可实现多机系统中的主从一对一通信。现将多机通信步骤概述如下一对一通信。现将多机通信步骤概述如下:n1) 令所有从机令所有从机SM2=1,处于只接收地址帧状态(第,处于只接收地址帧状态(第9位为位为1)。)。n2) 主机令主机令TB8=1,并发送地址呼叫信息。,并发送地址呼叫信息。n3) 各从机接收到地址帧后,将接收到的地址与本机地址编各从机接收到地址帧后,将接收到的地址与本机地址编号相比较,确认是否为被呼叫目标。号相比较,确认是否为被呼叫目标。n4) 被呼叫从机使被呼叫从机使SM2清清0,变为接收数据帧状态,而未被,变为接收数据帧状态,而未被呼叫从机仍保持呼叫从机仍保持SM2=1。n5) 主机使主机使TB8=0,发送控制或数据信息。,发送控制或数据信息。n6) 只有只有SM2=0的从机能接收到控制或数据信息,仍保持的从机能接收到控制或数据信息,仍保持SM2=1的从机不予理睬。的从机不予理睬。 40END