1、第第9 9章章 串行通信串行通信9.1 9.1 串行通讯基本知识串行通讯基本知识l数据通讯数据通讯l传输方式传输方式l同步通讯和异步通讯同步通讯和异步通讯l波特率波特率:表示每秒钟传送二进制代码的位数表示每秒钟传送二进制代码的位数,单位单位b/s并行通讯并行通讯串行通讯串行通讯单向单向(单工单工)配置配置全双向全双向(全双工全双工)配置配置半双向半双向(半双工半双工)配置配置1、并行通信和串行通信通信的基本方式:并行通信:数据的各位同时送出。传送距离:小于30米。串行通信:数据的各位逐位送出,只需一对传送线即可完成传送。传送距离:几米几千公里。2、串行通信(1)串行通信的数据传送方向。单工、半
2、双工、全双工三种方式(2)串行通信的工作方式 同步方式:数据按块传送,包括同步字符、数据块。异步方式:数据按字符传送,每一个字符均按固定的 字符格式传送,又被称为帧,如图。包含字符的起始位、数据位、校验位、停止位四个部分。异步通讯的一帧数据格式异步通讯的一帧数据格式同步传送的数据格式同步传送的数据格式单片机系统中的串行接口及特点单片机系统中的串行接口及特点串行通讯可以实现单片机与单片机、单片机与微机之串行通讯可以实现单片机与单片机、单片机与微机之间的数据交换。间的数据交换。串行通讯电路简单,实现远距离低成本的数据传输。串行通讯电路简单,实现远距离低成本的数据传输。缺点是传输速度慢。缺点是传输速
3、度慢。在一些系统中在一些系统中,采用串行通讯的形式将多微处理器连采用串行通讯的形式将多微处理器连接起来,构成一个完整的多接起来,构成一个完整的多CPUCPU控制系统。控制系统。从机从机从机从机从机从机从机从机主机主机9.2 9.2 MCS-51MCS-51串行口及应用串行口及应用串行(异步)通信应用示意图串行(异步)通信应用示意图MCS-51 TXD(甲)(甲)RXD RXD MCS-51 TXD (乙)(乙)TXDRXDRXDTXDRS-232RS-232或或485485RS-232RS-232或或485485TXDRXDRS-232PC机机COM1,COM2单片机甲单片机甲乙之间近距离的直
4、接通讯乙之间近距离的直接通讯单片机甲乙两地之间远距离通讯单片机甲乙两地之间远距离通讯单片机与单片机与PCPC机之间的数据通讯机之间的数据通讯8051串行口结构串行口结构9.2.1 9.2.1 与串口有关的寄存器与串口有关的寄存器数据缓冲寄存器数据缓冲寄存器 SBUF SBUF 地址:地址:99H99HSBUF是用来存放发送和接收数据的寄存器是用来存放发送和接收数据的寄存器,对应两个独立对应两个独立的缓冲器。的缓冲器。CPU写写SBUF就是就是开始发送数据开始发送数据(MOV SBUF,A);CPU读读SBUF就是就是读取接收到的数据读取接收到的数据到到A (MOV A,SBUF)。)。该结构在
5、硬件设计上保证了该结构在硬件设计上保证了51单片机串行口是一个可同时单片机串行口是一个可同时发送与接收的发送与接收的”全双工全双工”串口。串口。接收接收SBUF 移位寄存器移位寄存器发送发送SBUF 移位寄存器移位寄存器内部总线内部总线CPUMCS-51RXDP3.0TXDP3.1SBUF硬件电路:硬件电路:发送:执行指令发送:执行指令MOV SBUF,A接收:当检测到起始位电路自动启动接收。接收:当检测到起始位电路自动启动接收。串行口控制寄存器串行口控制寄存器SCON SCON 地址地址:98H:98HSM0 SM1:串行口工作模式选择位。串行口工作模式选择位。SM0SM1SM2RENTB8
6、RB8TIRISM0 SM1模式模式功功 能能波特率波特率 0 00同步移位寄存器模式同步移位寄存器模式Fosc/12 0 118位异步通信位异步通信UART可变可变 1 029位异步通信位异步通信UARTFosc/64或或/32 1 139位异步通信位异步通信UART可变可变RI:完成一帧数据接收完成一帧数据接收标志标志,应软件清零应软件清零,接收完成接收完成RI=1并并申请中断(如果中断开放,则引发中断);申请中断(如果中断开放,则引发中断);TI:完成一帧数据发送完成一帧数据发送标志标志,应软件清零,应软件清零,发送完成发送完成TI=1同同时申请中断(如果中断开放,则引发中断);时申请中
7、断(如果中断开放,则引发中断);RB8:在在9位数据传送的模式位数据传送的模式2、3中中,接收到的接收到的第第9位数据位数据;TB8:在在9位数据传送的模式位数据传送的模式2、3中中,将要发送的将要发送的第第9位数据位数据;REN:允许接收位允许接收位,REN=1时允许接收时允许接收.由软件置位或清零。由软件置位或清零。SM0SM1SM2RENTB8RB8TIRISM2:多机通信使能位多机通信使能位.1,模式模式0、1时时:SM2SM2不用,应设为不用,应设为0 0。2,模式模式2、3时时:SM2=0,无论,无论RB8如何,如何,RI都能被激活(都能被激活(RI=1)。)。若若SM2=1,收到
8、的第收到的第9位(位(RB8)=0时时,则则RI不会被激活;不会被激活;若若SM2=1且且RB8=1时,时,RI才能被激活才能被激活=1并引发中断。并引发中断。在接收方式时:当在接收方式时:当SM2=1时,能否接收到数据取决于对方时,能否接收到数据取决于对方发送的第发送的第9位数据位数据RB8,可由发送方来控制接收方的数据,可由发送方来控制接收方的数据接收。接收。此种方式(此种方式(SM2=1)用于多机通信。)用于多机通信。SM0SM1SM2RENTB8RB8TIRI如何使用如何使用RIRI,TITI标志完成接收、发送?标志完成接收、发送?通信双方通信双方不是同步工作的,数据交换由各自不是同步
9、工作的,数据交换由各自SBUFSBUF进行进行。CPUCPU不参与通信过程,只能通过标志了解不参与通信过程,只能通过标志了解SBUFSBUF的发送、的发送、接收的状态,以便决定后续操作接收的状态,以便决定后续操作。RIRI(SCON.0SCON.0):接收完成标志接收完成标志。当当SUBFSUBF从从RXDRXD接收完一个完整的数据帧时,接收完一个完整的数据帧时,RI=1RI=1。如果如果串口中断是开放的,则串口中断是开放的,则RIRI=1=1时会自动引发中断。用户可以时会自动引发中断。用户可以通过中断服务程序将通过中断服务程序将SBUFSBUF中的数据取出送累加器中的数据取出送累加器A A。
10、MOV A,SBUFMOV A,SBUF 中断方式接收数据;中断方式接收数据;也可以使用查询的方式对也可以使用查询的方式对RIRI进行检测,如果进行检测,如果RI=1RI=1则执行:则执行:MOV A,SBUFMOV A,SBUF 否则等待否则等待 查询方式接收数据。查询方式接收数据。TI(SCON.1):发送完成标志。发送完成标志。当当CPUCPU执行执行:MOV SBUF,AMOV SBUF,A 后,后,SBUFSBUF开始通过开始通过TXDTXD向外发送数据。当完成一帧数据的发送后,向外发送数据。当完成一帧数据的发送后,TI=1TI=1。如果系统中断是开放的,如果系统中断是开放的,则则T
11、I=1TI=1会自动引发中断。用户可会自动引发中断。用户可以通过中断服务程序向以通过中断服务程序向SBUFSBUF输送下一个数据:输送下一个数据:MOV SBUF,A MOV SBUF,A 中断方式发送数据;中断方式发送数据;也可以使用查询的方式对也可以使用查询的方式对TITI进行检测,如果进行检测,如果TI=1TI=1则执行:则执行:MOV SBUF,AMOV SBUF,A。否则等待。否则等待 查询方式发送。查询方式发送。使用查询使用查询RIRI、TITI标志方式进行发送与接收标志方式进行发送与接收N N个数据个数据CLR SCON.TI数据送累加器数据送累加器A修改数据区指针修改数据区指针
12、mov sbuf,aTI=1?N个数据发送完?个数据发送完?YESNOYESNO发送数据的程序框图发送数据的程序框图SETB SCON.RENmov a,sbufRI=1?N个数据接收完?个数据接收完?YESNOYESNOCLR SCON.RI A送数据区送数据区修改数据指针修改数据指针接接收收数数据据程程序序框框图图PCON 地址:地址:87HSMOD 波特率选择位波特率选择位 SMOD=1时时,方式方式1,方式方式2,方式方式3的波的波特率加倍特率加倍9.2.2 9.2.2 串行通信工作模式串行通信工作模式模式模式0以以8位数据为一帧位数据为一帧,不设起始位和停止位不设起始位和停止位,先发
13、送或接收最低先发送或接收最低位位,其帧格式如下其帧格式如下模式模式1以以10位为一帧传输位为一帧传输,设由设由1个起始位个起始位,8个数据位个数据位,1个停止位个停止位模式模式2和模式和模式3以以11位为位为1帧传输帧传输,设有设有1个起始位个起始位,8个数据位个数据位,1个附个附加第加第9位和位和1个停止位个停止位.D0D1D2D3D4D5D6D7.起始D0D1D2D3D4D5D6D7停止.起始D0D1D2D3D4D5D6D7D8停止.串行口的模式串行口的模式0 0特点特点:同步移位寄存器同步移位寄存器方式。波特率:固定方式。波特率:固定为为 fosc/12fosc/12.RXDRXD(P3
14、.0P3.0):数据口线(发送和接收);先移数据的低位。:数据口线(发送和接收);先移数据的低位。TXDTXD(P3.1P3.1):移位脉冲输出端。:移位脉冲输出端。(注意(注意:移位脉冲的频率就是模式移位脉冲的频率就是模式0 0的波特率)的波特率)主要功能主要功能:使用串行口扩展并行口,使用串行口扩展并行口,理论上可以扩展理论上可以扩展 n n*8 8 位的并行口。位的并行口。MCS-51RXDTXDData 外部移位寄存器cp移位脉冲串行数据并行的数据(8位)模式模式0 0 电路框图电路框图51内部总线SBUF零检测器移位时钟START SHIFT 发送控制器TXCLOCK TI SEND
15、D S QCPSTART RI RECEIVERX 接收控制器 SHIFTCLOCK 1 1 1 1 1 1 1 0输入移位寄存器SBUF51内部总线读SBUF写SBUFS6串行口中断P3.0RXDP3.1TXD装载SBUFREN/RIP3.0RXDMOV SBUF,A1S6P2模式模式0 0的发送与接收的发送与接收单片机执行单片机执行mov sbuf,a指令启动指令启动“发送控制器发送控制器”开开始发送。完毕,始发送。完毕,TI被置位。被置位。在满足在满足REN=1REN=1且且RI=0RI=0的条件下的条件下(实际上是一条写(实际上是一条写SCON指令),就会引发一次接收过程。完毕,指令)
16、,就会引发一次接收过程。完毕,RI置置位,向位,向CPU发中断申请。发中断申请。模式模式0 0的时序信号(发送)的时序信号(发送)S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6写SBUFSENDD1D0D2D3D4D5D6D7RXD端数据SHIFTTXD端同步脉冲TI中断标志mov sbuf,a 指令从发送到结束的10个机器周期模式模式0 0的时序信号(接收)的时序信号(接收)S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6写SCON(RI=0)RECEIVESHIFTRI对RXD采样TXD同步脉冲RI中断标志串
17、行口模式串行口模式1 1特点特点:10位传输格式位传输格式(1个起始位个起始位+8个数据位个数据位+1个停止位个停止位);用于通讯的用于通讯的异步方式异步方式;可变波特率(定时器可变波特率(定时器T1的溢出率来确定的溢出率来确定,所以在此种模式下所以在此种模式下,首先要对首先要对T1进行初始化以确定串行口的波特率)。进行初始化以确定串行口的波特率)。发送操作:发送操作:在在TI=0,执行,执行mov sbuf,a 指令后从指令后从TXD端开始端开始发送数据。当发送完发送数据。当发送完8位数据后自动的添加一个高电平的停位数据后自动的添加一个高电平的停止位,并将止位,并将TI置位。置位。接收操作:
18、接收操作:在在REN=1且且RI=0的条件下进行。的条件下进行。串行口的接收控制器对串行口的接收控制器对RXD线进行采样,其采样频率是接线进行采样,其采样频率是接收时钟的收时钟的16倍。当连续倍。当连续8次采集到次采集到RXD线上为低电平时,线上为低电平时,检测电路便认定检测电路便认定RXD线上有了线上有了“起始位起始位”,在此后,便开,在此后,便开始在每次第始在每次第7、8、9三个脉冲时进行三个脉冲时进行RXD采样,采取采样,采取“三中取二三中取二”的原则来确定接收的数据(如图所示)。的原则来确定接收的数据(如图所示)。数据装载条件:数据装载条件:当接收到停止位时,必须满足:当接收到停止位时
19、,必须满足:RI=0且且SM2=0,才,才能把接收的数据送到能把接收的数据送到SBUF中(停止位送中(停止位送SCON的的RB8中,中,并使并使RI=1),否则数据丢失。),否则数据丢失。要想得到接收的数据,在接收前必须事先清零要想得到接收的数据,在接收前必须事先清零RI。串行口模式串行口模式1 1时数据帧格式及接收采样示意图时数据帧格式及接收采样示意图D0D1D2D3D4D5D6D7起始位起始位8位数据位数据停止位停止位对RXD线的数据以16倍速度采样当连续当连续8次采集到低电次采集到低电平时,便确认起始位到来平时,便确认起始位到来在每个第在每个第7,8,9个脉冲对个脉冲对RXD采样采样并采
20、用并采用“以三取二以三取二”来确定采集的数据来确定采集的数据7.8.9串行口模式串行口模式1 1时序图时序图串行口模式串行口模式2 2、3 3特点特点:模式模式2 2、3 3都是都是1111位传输格式位传输格式 (1 1个起始位个起始位+9+9个数据个数据位位+1+1个停止位个停止位),它们的它们的不同之处是波特率不同之处是波特率。波特率波特率:模式模式2 2:固定固定为为fosc/64fosc/64或或fosc/32fosc/32。(具体由具体由PCONPCON中的中的SMODSMOD位来确定)。位来确定)。模式模式3 3:可变,由定时器可变,由定时器T1T1的溢出波特率来确定。的溢出波特率
21、来确定。D0D1D2D3D4D5D6D7D8起始位8+1位数据停止位第9 位模式模式2、3的的发送过程发送过程类似于模式类似于模式1,唯一的区别在于,唯一的区别在于数数据帧中数据是据帧中数据是9 9位。这样,在发送位。这样,在发送一帧数据一帧数据时时,CPUCPU除除了要把了要把8 8位数据位数据送送SBUFSBUF外(外(mov sbuf,amov sbuf,a),),还要还要事先事先将第将第9 9位数据送位数据送到到SCON.TB8SCON.TB8中。中。如:第如:第9 9位(位(TB8 TB8)=1=1时,时,SETB SCON.TB8SETB SCON.TB8 若若第第9 9位位(TB
22、8 TB8)=0=0时:时:CLR SCON.TB8CLR SCON.TB8 例如:例如:SETB SCON.TB8SETB SCON.TB8 或:或:CLR SCON.TB8CLR SCON.TB8 MOV SBUF,AMOV SBUF,A MOV SBUF,AMOV SBUF,A SM0 SM1 SM2 RENTB8RB8TIRI模式模式2 2、3 3的接收过程的接收过程也也类似于模式类似于模式1 1,不同的是:模式,不同的是:模式1 1时,时,SCONSCON中的中的RB8RB8是接收到的停止位(是接收到的停止位(“1”1”);而模式);而模式2 2、3 3时,时,RB8RB8是接收到的
23、第是接收到的第9 9位。位。在模式在模式1 1,接收操作只有,接收操作只有在在RI=0RI=0,且且REN=1REN=1时数据可以接收。时数据可以接收。而模式而模式2 2、3 3的接收的接收装载装载条件是:条件是:a a)RI=0RI=0且且SM2=0SM2=0(与(与RB8RB8的状态无关);的状态无关);或:或:b b)RI=0RI=0且且RB8=1RB8=1(SM2=1SM2=1时)。时)。只有满足只有满足a a)或满足或满足b b)的条件时的条件时,接收到的数据才能送到接收到的数据才能送到SBUFSBUF,并使,并使RI=1RI=1激活,否则接收无效且激活,否则接收无效且RIRI不能置
24、位。不能置位。RI=0是保证是保证SBUF空空(每次取走数据时通过软件复位(每次取走数据时通过软件复位RI,如,如果没有取走数据则果没有取走数据则RI=1),保证接收到的数据不丢失。),保证接收到的数据不丢失。利用后一个条件利用后一个条件SM2和和RB8来控制接收,可用于多机通信。来控制接收,可用于多机通信。令令SM2=1可以利用接收可以利用接收到的到的RB8控制接收是否有效控制接收是否有效。即即 RB8=1时接收有效;时接收有效;RB8=0时接收无效。时接收无效。SM2也称也称“多机通讯使能位多机通讯使能位”。在没有多机通信的场合,在没有多机通信的场合,RB8可用于奇偶效验可用于奇偶效验,以
25、防止串,以防止串行通信出错。行通信出错。串行口模式串行口模式2 2、3 3时数据帧格式时数据帧格式发送时发送时:将将SCON中的中的TB8作为第作为第9位数据发送;位数据发送;接收时接收时:将接收来的第将接收来的第9位送到位送到SCON中的中的RB8中。中。D0D1D2D3D4D5D6D7D8起始位9位数据停止位SM0 SM1 SM2RENTB8RB8TIRI串行口模式串行口模式2 2和模式和模式3 3时序图时序图模式模式2 2、3 3的应用之一的应用之一带奇偶校验位的数据传送带奇偶校验位的数据传送奇偶校验:奇偶校验:收到的第收到的第9 9位位RB8RB8是发送方送来的奇偶校验位。是发送方送来
26、的奇偶校验位。在这种情况下必须令在这种情况下必须令SM2=0SM2=0,否则接收的校验位否则接收的校验位RB8=0RB8=0时,时,将影响数据的接收(因为将影响数据的接收(因为RB8RB8有时为有时为“1”1”,而有时为,而有时为“0”0”)。)。当接收数据后,对当接收数据后,对 PSW.0PSW.0(P P标志)和标志)和 RB8RB8位进行判断。位进行判断。检查检查结果是否与约定的相符合。结果是否与约定的相符合。例如:例如:发送、接收双方约定为发送、接收双方约定为奇校验奇校验(数据中数据中1 1的个数为奇的个数为奇):则发送方的则发送方的第第9 9位位要根据要根据前前8 8位数据位数据来确
27、定来确定。若发送的若发送的8 8位数据是位数据是:0001101000011010 ,则则TB8TB8为为0 0。发送程序如下:发送程序如下::MOV MOV C,PC,PCPLCPLC CMOVMOVTB8,CTB8,CMOVMOVSBUF,ASBUF,A:接收时将接收时将 PSW.0PSW.0(P P标志)标志)位与位与RB8RB8进行进行“异或异或”,结果,结果为为1 1,说明校验结果正确。,说明校验结果正确。利用模式利用模式2,32,3进行带奇校验的串行通讯程序流程进行带奇校验的串行通讯程序流程图图数据送累加器数据送累加器APSW.P=1?SET SCON.TB8CLR SCON.TB
28、8MOV SBUF,ATI=1?CLR SCON.TIYESNONOYES发送端程序(原始TI=0)使用使用“查询法查询法”编制的发送、接收程序编制的发送、接收程序RI=1?MOV A,SBUFPSW.P RB8=1?出错处理CLR SCON.RIYESNO接收端程序(原始RI=0)NY数据送内存数据送内存模式模式2 2、3 3的应用之二的应用之二多机通信多机通信如果系统采用多如果系统采用多CPU结构,并且有一个做主机,其它为结构,并且有一个做主机,其它为从机时,它们之间可以通过从机时,它们之间可以通过多机通信多机通信的方式进行数据交换。的方式进行数据交换。如:多路数据采集系统。如:多路数据采
29、集系统。我们选一台单片机作为我们选一台单片机作为主机主机,专门负责接收从机传回的数,专门负责接收从机传回的数据,并进行数据的后期处理(保存、打印和显示等);据,并进行数据的后期处理(保存、打印和显示等);而从机则完成对传感器的信号检测、而从机则完成对传感器的信号检测、A/D转换,最后将数转换,最后将数据采用串行通讯的形式上传给主机。据采用串行通讯的形式上传给主机。传统方式的多路数据采集系统传统方式的多路数据采集系统单片机系统单片机系统或或微型计算机系统微型计算机系统传感器传感器 1传感器传感器 2传感器传感器 3传感器传感器 4传感器传感器 N接口接口电路电路引线引线(模拟信号)(模拟信号)机
30、房机房 或或 仪表室仪表室检测现场检测现场采用采用“智能传感器智能传感器”组成的多路数据采集系组成的多路数据采集系统统主机主机从机从机 N从机从机 4从机从机 3从机从机 2从机从机 1串行数据线(串行数据线(2条)条)RXDTXDTXDRXD从机做智从机做智能传感器能传感器多机通讯中多机通讯中SM2SM2的设定的设定在模式在模式2 2、3 3中,中,1 1,SM2=0SM2=0时时:RB8=1RB8=1或或RB8=0RB8=0 都可以激活都可以激活RIRI。2 2,SM2=1SM2=1时:时:RB8=1RB8=1才能激活才能激活RIRI。RB8=0RB8=0时,时,RIRI不能激活。不能激活
31、。主从式多机通信原理主从式多机通信原理主机是通信的发起者主机是通信的发起者,主机发送的数据可以传送到各个,主机发送的数据可以传送到各个从机,从机发送的数据只能为主机接收,从机,从机发送的数据只能为主机接收,从机之间不能从机之间不能直接通讯直接通讯。主机和从机的主机和从机的串口设置为模式串口设置为模式2或或3,其中主机,其中主机的的SM2=0,从机的从机的SM2=1。第九位数据用来作为地址数据标识位第九位数据用来作为地址数据标识位,RB8=1时为地址时为地址帧,帧,RB8=0时为数据帧。从机的时为数据帧。从机的SM2=1时,当收到的时,当收到的RB8=1(地址帧)时,(地址帧)时,RI可以激活;
32、如果可以激活;如果RB8=0(数据(数据帧),则帧),则RI不能激活。不能激活。主机首先通过发送主机首先通过发送地址码地址码来寻找从机(来寻找从机(地址码的特征是第地址码的特征是第9位数据为位数据为“1”),所以所有的从机都能接收到主机发出),所以所有的从机都能接收到主机发出的地址码(因为从机的的地址码(因为从机的RI=0,SM2=1,RB8=1),并使),并使RI=1引发中断。从机在中断服务程序中,将接收到地址码引发中断。从机在中断服务程序中,将接收到地址码与自己的地址进行比较,被选中的从机将自己与自己的地址进行比较,被选中的从机将自己的的SM2=0;而未被选中的从机仍保持而未被选中的从机仍
33、保持SM2=1,并退出中断服务程序,并退出中断服务程序。当主机找到从机后,开始向从机发数据、命令(其特征为当主机找到从机后,开始向从机发数据、命令(其特征为第第9位位=0)。由于被选中的从机)。由于被选中的从机SM2=0,所以尽管接收到,所以尽管接收到的的RB8=0,同样可以激活从机的,同样可以激活从机的RI,使其以,使其以查询的方式查询的方式接接收主机发出的数据或命令。当主机与从机的通讯完成后,收主机发出的数据或命令。当主机与从机的通讯完成后,从机再将其从机再将其SM2=1,并退出中断服务程序。主机重新发,并退出中断服务程序。主机重新发出另一个从机的地址,所有从机可以马上响应并接收地址出另一
34、个从机的地址,所有从机可以马上响应并接收地址信息信息。通信过程通信过程模式模式2 2、3 3使用时要注意的问题使用时要注意的问题在模式在模式2、3中,可以实现较为特殊的通信方式,如带校验中,可以实现较为特殊的通信方式,如带校验位的位的9位传送、多机通讯。位传送、多机通讯。注意:当注意:当SM2=0时,只能采用时,只能采用查询方式?查询方式?功能SM2第9位 工作方式带校验位的带校验位的9位位数传送数传送SM2=0校验位校验位以查询(以查询(RI)的方式)的方式接收数据接收数据多机多机通讯通讯主主机机SM2=0地址码:地址码:TB8=1数据、命令时数据、命令时=0以查询的方式工作以查询的方式工作
35、从从机机SM2=1未选中时未选中时SM2不变不变以中断的方式接收地址以中断的方式接收地址选中后选中后SM2=0以查询的方式与主机通讯以查询的方式与主机通讯9.2.39.2.3波特率的设计波特率的设计模式模式0的波特率的波特率=fosc/12模式模式2的波特率的波特率=模式模式1和模式和模式3的波特率的波特率=OSCSMODf642)1T(322SMOD溢出速率fosc12发送SBUF(99H)TXD输入移位寄存器RXD模式模式0波特率的产生波特率的产生波特率及定时器波特率及定时器T1T1的设定的设定在异步通信中,发送方与接收方是两个互相独立的系在异步通信中,发送方与接收方是两个互相独立的系统,
36、它们的系统时钟可以各不相同统,它们的系统时钟可以各不相同,此时确保通信正确此时确保通信正确的条件是:的条件是:1、要有相同的字符帧格式要有相同的字符帧格式;2、要有相同的波特率要有相同的波特率。MCS-51单片机的串行口四种模式其波特率各不相同。单片机的串行口四种模式其波特率各不相同。其中模式其中模式1、3的波特率就是由的波特率就是由定时器定时器T1的溢出率的溢出率来决来决定的(定的(PCON中的中的SMOD=1波特率加倍)。波特率加倍)。如何设定波特率?如何设定波特率?在编制串行口通讯(模式在编制串行口通讯(模式1、3)程序时,在程序的初始化中,)程序时,在程序的初始化中,通过通过T1进行波
37、特率的设定,既对进行波特率的设定,既对T1进行初始化。进行初始化。T1初始化的主要任务是:初始化的主要任务是:1、设置、设置T1的的工作方式为定时工作方式为定时(C/T=0);工作模式为模式工作模式为模式2:自动重装。:自动重装。2、计算、计算定时常数并分别送给定时常数并分别送给TH1、TL1。波特率计算公式波特率计算公式:T1溢出率:溢出率:=(计数速率(计数速率)/256-(TH1)=(fosc/12)/256-(TH1)溢出率)(1322TSMOD根据波特率求根据波特率求定时器定时器T1T1初值计算公式初值计算公式设设:fosc为系统时钟频率,为系统时钟频率,TH1为定时器为定时器T1的
38、初值的初值,B为波特率。为波特率。可以推出可以推出初值初值:TH1=256-fosc/(384B);(SMOD=0时)时)或:或:TH1=256-fosc/(192B);(SMOD=1时)时)【举例举例】设系统时钟为设系统时钟为11.059MHz,要求波特率为,要求波特率为1200Hz,求,求TH1。【解解】设:设:SMOD=0,用上述公式用上述公式TH1=256-11.059MHz/(384X1200)=232=0E8H注意注意:1、根据波特率计算定时器初值会存在一定的误差。、根据波特率计算定时器初值会存在一定的误差。2、选用、选用11.0592MHz晶振是为了产生精确的波特率。晶振是为了产
39、生精确的波特率。9.2.4 9.2.4 串行口的应用串行口的应用在编制串行通信程序时,通信双方必须保证:在编制串行通信程序时,通信双方必须保证:1、相同的、相同的“波特率波特率”;2、相同的、相同的“字符帧格式字符帧格式”格式。格式。若采用若采用1和和3模式,则波特率可变且模式,则波特率可变且由定时器由定时器T1来来作波特率发生器,作波特率发生器,所以根据所以根据波特率计算波特率计算T1的初值的初值,是是串口程序初始化任务之一。串口程序初始化任务之一。在通信过程中,在通信过程中,对标志(对标志(RI、TI)的判断)的判断是控制通是控制通信全过程的关键环节。信全过程的关键环节。串行口模式串行口模
40、式0 0的应用的应用扩展并行接口扩展并行接口 P3.0 P3.1 P1.0D1D2 74LS164CP CLR(STB)5VTXDRXD P3.0 P3.1 P1.0 P1.1Q 74LS165CP P/S5VTXDRXD外接串入外接串入-并出或并入并出或并入-串出器件可实现串出器件可实现I/O的扩展的扩展74LS164(串人串人/并出并出)74LS165(并入并入/串出串出)例例9-2:8031串行口外接串行口外接CD4049或或164串入串入-并并出移位寄存器扩展出移位寄存器扩展8位并行口位并行口,8位并行口的位并行口的每位都接一个发光二极管每位都接一个发光二极管,要求发光二极管要求发光二
41、极管从左到右以一定延迟轮流显示从左到右以一定延迟轮流显示,并不断循环并不断循环.电路参见电路参见 P195 图图9-17 P3.0 P3.1 P1.0D1D2 74LS164CP CLR(STB)5VTXDRXD例例9-29-2程序程序ORG0023HAJMPSBR;转中断服务转中断服务ORG2000HMOVSCON#00HMOVA,#80H ;最左一位;最左一位LED先亮先亮CLRP1.0;关闭并行输出关闭并行输出MOVSBUF,ALOOP:SJMP$SBR:SETBP1.0;启动并行输出;启动并行输出ACALL DELAYCLRTIRRACLRP1.0MOVSBUF,ARETI例例9 9-
42、3-3:用用80518051串行口外加移位寄存器串行口外加移位寄存器CD4014(CD4014(或或165,166)165,166)扩展扩展8 8位输入口位输入口,输入数据由输入数据由8 8个开关提供个开关提供,另另有一个开关有一个开关K K提供联络信号提供联络信号,当当K=0K=0时时,表示要求输入数表示要求输入数据据,输入的输入的8 8位为开关量位为开关量,提供逻辑模拟子程序的输入提供逻辑模拟子程序的输入信号信号.电路参见电路参见 P196 P196 图图9-189-18用 8051 串行口外接 74LS165 移位寄存器扩展8位输入口,输入数据由 8 个开关提供,另有一个开关 K提供联络
43、信号。电路示意如图 所示。当开关K合上时,表示要求输入数据。输入 8 位开关量,处理不同的程序。程序如下程序如下:START:JB P1.0,$;开关K未合上,等待 SETB P1.1 ;165并行输入数据 CLR P1.1 ;开始串行移位 MOV SCON,10H ;串行口模式 0并启动接收 JNB RI,$;查询RI CLR RI;查询结束,清RI MOV A,SBUF ;输入数据 ;根据 A处理不同任务 SJMP START;准备下一次接收。P3.0 P3.1 P1.0D1D2 74LS164CP CLR(STB)5VTXDRXD P3.0 P3.1 P1.0 P1.1Q 74LS165
44、CP P/S5VTXDRXD例例9-3程序程序START:MOVSCON,#10H;模式;模式0,允许接收,允许接收JBP1.1,$;开关;开关K未闭合,等待未闭合,等待SETBP1.0;并行置入数据;并行置入数据CLRP1.0;开始串行移位;开始串行移位JNBRI,$CLRRIMOVA,SBUFACALLLOGSIM;进行逻辑模拟;进行逻辑模拟SJMPSTART串行口模式串行口模式1的发送和接收的发送和接收例例9-4:8031串行口按双工方式收发串行口按双工方式收发ASCII码码,最高位用来作奇偶校验位最高位用来作奇偶校验位,采用奇检验采用奇检验模式模式,要求传送的波特率为要求传送的波特率为
45、1200b/s.编写编写有关通讯程序有关通讯程序.已知:已知:fosc=6MHz例例9-4:MOVTMOD,#20HMOVTL1,#0F3HMOVTH1,#0F3HSETBTR1MOVSCON,#50HMOVR0,#20HMOVR1,#40HACLALLSOUTSETBESSETBEALOOP:SJMP$;Interrupt serverORG0023HAJMPSBR1ORG0100HSBR1:JNBRI,SENDACALLSINSJMPNEXTSEND:ACALLSOUTNEXT:RETISOUT:CLRTIMOVA,R0MOVC,PCPLCMOVACC.7INCR0MOVSBUF,ARET
46、SIN:CLRRIMOVA,SBUFMOVC,PCPLC;没有检查奇偶校验是否正确没有检查奇偶校验是否正确ANLA,#7FHMOVR1,AINCR1RET例例9 9-5-5:采用查询方式由串行口发送带奇偶校验位的采用查询方式由串行口发送带奇偶校验位的数据块数据块ASCIIASCII码、码、3232字节字节1200b/s 1200b/s foscfosc=11.059MHZ=11.059MHZ例例9-69-6:采用查询方式由串行口接收带奇偶校验位的采用查询方式由串行口接收带奇偶校验位的数据块,要求同上。数据块,要求同上。例例9-5:MOVTMOD,#20HMOVTL1,#0E8HMOVTH1,#
47、0E8H;波特率的设定波特率的设定SETBTR1MOVSCON,#01000000BMOVR0,#20H;数据块起始地址数据块起始地址MOVR7,#32 LOOP:MOVA,R0ACALLSP_OUTJNBP,ERROR;发送程序该判断可不要发送程序该判断可不要?INCR0DJNZR7,LOOPSP_OUT:MOVC,PCPLC;奇校验奇校验MOVACC.7,CMOVSBUF,A;发送数据发送数据JNBTI,$CLRTIRETMOV TMOD,#20HMOV TL1,#0E8HMOV TH1,#0E8HSETB TR1MOV SCON,#01010000BMOV R0,#20HMOV R7,#
48、32 LOOP:ACALLSP_INJC ERRORMOV R0,AINC R0 DJNZR7,LOOP接收子程:接收子程:SP_IN:JNB RI,$CLR RI MOV A,SBUF MOV C,P CPL C ANL A,#7FH RETERROR:(略略)例例9-69-6:串行口模式串行口模式2、模式、模式3的发送和接收的发送和接收例例9-8:用第用第9个数据位作奇偶校验位个数据位作奇偶校验位,编写串行口模编写串行口模式式2的发送程序的发送程序例例9-9:用第用第9个数据位作奇偶校验位个数据位作奇偶校验位,编写串行口模编写串行口模式式2的接收程序的接收程序例例9-8:9-8:TRT:M
49、OV SCON,#80HMOV PCON,#80HMOV R0,#50H;首地址;首地址MOV R7,#10H;长度;长度LOOP:MOV A,R0MOV C,PSW.0MOV TB8,C;偶校验偶校验MOV SBUF,AWAIT:JBCTI,CONTSJMP WAITCONT:INCR0DJNZ R7,LOOPRET例例9-9:9-9:RRR:MOV SCON,#90HMOV PCON,#80HLOOP:JBCRI,RECEIVSJMP LOOPRECIEV:MOV A,SBUFJBPSW.0,ONEJBRB8,ERRSJMP RIGHTONE:JNBRB8,ERR;?RIGHT:ERR:思
50、考:思考:多机通信中第多机通信中第9 9位不能用于校验,应采用位不能用于校验,应采用何种校验方式?何种校验方式?如累加和校验如累加和校验累加和:对所有要发送的数据在发送的同时进行累加。取累加和:对所有要发送的数据在发送的同时进行累加。取其累加和的低其累加和的低8 8位(大于位(大于255255的舍去),即单字节。的舍去),即单字节。发送方在发送完所有数据后,将单字节的累加和也发出。发送方在发送完所有数据后,将单字节的累加和也发出。接收方在接收数据时,对接收到的每一个数据也进行累加接收方在接收数据时,对接收到的每一个数据也进行累加操作。数据接收完成后,将操作。数据接收完成后,将自行计算的累加和自