资源描述
第第9 9章章 串行通信串行通信第9章 串行通信9.1 串行通讯基本知识串行通讯基本知识l数据通讯数据通讯l传输方式传输方式l同步通讯和异步通讯同步通讯和异步通讯l波特率波特率:表示每秒钟传送二进制代码的位数表示每秒钟传送二进制代码的位数,单位单位b/s并行通讯并行通讯串行通讯串行通讯单向单向(单工单工)配置配置全双向全双向(全双工全双工)配置配置半双向半双向(半双工半双工)配置配置9.1 串行通讯基本知识并行通讯串行通讯单向(单工)配置全双1、并行通信和串行通信通信的基本方式:并行通信:数据的各位同时送出。传送距离:小于30米。串行通信:数据的各位逐位送出,只需一对传送线即可完成传送。传送距离:几米几千公里。1、并行通信和串行通信2、串行通信(1)串行通信的数据传送方向。单工、半双工、全双工三种方式(2)串行通信的工作方式 同步方式:数据按块传送,包括同步字符、数据块。异步方式:数据按字符传送,每一个字符均按固定的 字符格式传送,又被称为帧,如图。包含字符的起始位、数据位、校验位、停止位四个部分。2、串行通信异步通讯的一帧数据格式异步通讯的一帧数据格式异步通讯的一帧数据格式同步传送的数据格式同步传送的数据格式同步传送的数据格式单片机系统中的串行接口及特点单片机系统中的串行接口及特点串行通讯可以实现单片机与单片机、单片机与微机之串行通讯可以实现单片机与单片机、单片机与微机之间的数据交换。间的数据交换。串行通讯电路简单,实现远距离低成本的数据传输。串行通讯电路简单,实现远距离低成本的数据传输。缺点是传输速度慢。缺点是传输速度慢。在一些系统中在一些系统中,采用串行通讯的形式将多微处理器连采用串行通讯的形式将多微处理器连接起来,构成一个完整的多接起来,构成一个完整的多CPU控制系统。控制系统。从机从机从机从机从机从机从机从机主机主机9.2 MCS-51MCS-51串行口及应用串行口及应用单片机系统中的串行接口及特点串行通讯可以实现单片机与单片机、串行(异步)通信应用示意图串行(异步)通信应用示意图MCS-51 TXD(甲)(甲)RXD RXD MCS-51 TXD (乙)(乙)TXDRXDRXDTXDRS-232或485RS-232或或485TXDRXDRS-232PC机机COM1,COM2单片机甲单片机甲、乙之间近距离的直接通讯乙之间近距离的直接通讯单片机甲乙两地之间远距离通讯单片机甲乙两地之间远距离通讯单片机与单片机与PCPC机之间的数据通讯机之间的数据通讯串行(异步)通信应用示意图MCS-51 TXD RXD M8051串行口结构串行口结构8051串行口结构9.2.1 与串口有关的寄存器与串口有关的寄存器数据缓冲寄存器数据缓冲寄存器 SBUF SBUF 地址:地址:99HSBUF是用来存放发送和接收数据的寄存器是用来存放发送和接收数据的寄存器,对应两个独立对应两个独立的缓冲器。的缓冲器。CPU写写SBUF就是就是开始发送数据开始发送数据(MOV SBUF,A);CPU读读SBUF就是就是读取接收到的数据读取接收到的数据到到A (MOV A,SBUF)。)。该结构在硬件设计上保证了该结构在硬件设计上保证了51单片机串行口是一个可同时单片机串行口是一个可同时发送与接收的发送与接收的”全双工全双工”串口。串口。9.2.1 与串口有关的寄存器数据缓冲寄存器 SBUF 接收接收SBUF 移位寄存器移位寄存器发送发送SBUF 移位寄存器移位寄存器内部总线内部总线CPUMCS-51RXDP3.0TXDP3.1SBUF硬件电路:硬件电路:发送:执行指令发送:执行指令MOV SBUF,A接收:当检测到起始位电路自动启动接收。接收:当检测到起始位电路自动启动接收。接收SBUF 移位寄存器发送SBUF 移位寄存器内部串行口控制寄存器串行口控制寄存器SCON SCON 地址地址:98H:98HSM0 SM1:串行口工作模式选择位。串行口工作模式选择位。SM0SM1SM2RENTB8RB8TIRISM0 SM1模式模式功功 能能波特率波特率 0 00同步移位寄存器模式同步移位寄存器模式Fosc/12 0 118位异步通信位异步通信UART可变可变 1 029位异步通信位异步通信UARTFosc/64或或/32 1 139位异步通信位异步通信UART可变可变串行口控制寄存器SCON 地址:98HSM0 SM1:串行RI:完成一帧数据接收完成一帧数据接收标志标志,应软件清零,应软件清零,接收完成接收完成RI=1并并申请中断(如果中断开放,则引发中断);申请中断(如果中断开放,则引发中断);TI:完成一帧数据发送完成一帧数据发送标志标志,应软件清零,应软件清零,发送完成发送完成TI=1同同时申请中断(如果中断开放,则引发中断);时申请中断(如果中断开放,则引发中断);RB8:在在9位数据传送的模式位数据传送的模式2、3中中,接收到的接收到的第第9位数据位数据;TB8:在在9位数据传送的模式位数据传送的模式2、3中中,将要发送的将要发送的第第9位数据位数据;REN:允许接收位允许接收位,REN=1时允许接收时允许接收.由软件置位或清零。由软件置位或清零。SM0SM1SM2RENTB8RB8TIRIRI:完成一帧数据接收标志,应软件清零,接收完成RI=1并SM2:多机通信使能位多机通信使能位.1,模式模式0、1时:SM2不用,应设为0。2,模式2、3时时:SM2=0,无论,无论RB8如何,如何,RI都能被激活(都能被激活(RI=1)。)。若若SM2=1,收到的第收到的第9位(位(RB8)=0时时,则则RI不会被激活;不会被激活;若若SM2=1且且RB8=1时,时,RI才能被激活才能被激活=1并引发中断。并引发中断。在接收方式时:当在接收方式时:当SM2=1时,能否接收到数据取决于对方时,能否接收到数据取决于对方发送的第发送的第9位数据位数据RB8,可由发送方来控制接收方的数据接,可由发送方来控制接收方的数据接收。收。此种方式(此种方式(SM2=1)用于多机通信。)用于多机通信。SM0SM1SM2RENTB8RB8TIRISM2:多机通信使能位.SM0SM1SM2RENTB8RB如何使用如何使用RIRI,TITI标志完成接收、发送?标志完成接收、发送?通信双方不是同步工作的,数据交换由各自不是同步工作的,数据交换由各自SBUF进行。CPU不参与通信过程,只能通过标志了解不参与通信过程,只能通过标志了解SBUF的发送、接收的状态,以便决定后续操作。RI(SCON.0):接收完成标志接收完成标志。当当SUBF从从RXD接收完一个完整的数据帧时,接收完一个完整的数据帧时,RI=1。如果如果串口中断是开放的,则串口中断是开放的,则RI=1=1时会自动引发中断。用户可以时会自动引发中断。用户可以通过中断服务程序将通过中断服务程序将SBUF中的数据取出送累加器中的数据取出送累加器A。MOVA,SBUF 中断方式接收数据;中断方式接收数据;也可以使用查询的方式对也可以使用查询的方式对RI进行检测,如果进行检测,如果RI=1则执行:则执行:MOVA,SBUF 否则等待否则等待 查询方式接收数据。查询方式接收数据。如何使用RI,TI标志完成接收、发送?通信双TI(SCON.1):发送完成标志。发送完成标志。当当CPU执行:执行:MOVSBUF,A 后,后,SBUF开始通过开始通过TXD向外发送数据。当完成一帧数据的发送后,向外发送数据。当完成一帧数据的发送后,TI=1。如果系统中断是开放的,则如果系统中断是开放的,则TI=1会自动引发中断。用户可会自动引发中断。用户可以通过中断服务程序向以通过中断服务程序向SBUF输送下一个数据:输送下一个数据:MOVSBUF,A 中断方式发送数中断方式发送数据;据;也可以使用查询的方式对也可以使用查询的方式对TI进行检测,如果进行检测,如果TI=1则执行:则执行:MOVSBUF,A。否则等待。否则等待 查询方式发送。查询方式发送。TI(SCON.1):发送完成标志。使用查询使用查询RIRI、TITI标志方式进行发送与接收标志方式进行发送与接收N N个数据个数据CLR SCON.TI数据送累加器数据送累加器A修改数据区指针修改数据区指针mov sbuf,aTI=1?N个数据发送完?个数据发送完?YESNOYESNO发送数据的程序框图发送数据的程序框图SETB SCON.RENmov a,sbufRI=1?N个数据接收完?个数据接收完?YESNOYESNOCLR SCON.RI A送数据区送数据区修改数据指针修改数据指针接接收收数数据据程程序序框框图图使用查询RI、TI标志方式进行发送与接收N个数据CLR SCPCON 地址:地址:87HSMOD 波特率选择位波特率选择位 SMOD=1时时,方方式式1,方方式式2,方方式式3的的波波特率加倍特率加倍PCON 地址:87HSMOD 波特率选择位9.2.2 串行通信工作模式串行通信工作模式模式模式0以以8位数据为一帧位数据为一帧,不设起始位和停止位不设起始位和停止位,先发送或接收最低先发送或接收最低位位,其帧格式如下其帧格式如下模式模式1以以10位为一帧传输位为一帧传输,设由设由1个起始位个起始位,8个数据位个数据位,1个停止位个停止位模式模式2和模式和模式3以以11位为位为1帧传输帧传输,设有设有1个起始位个起始位,8个数据位个数据位,1个个附加第附加第9位和位和1个停止位个停止位.D0D1D2D3D4D5D6D7.起始D0D1D2D3D4D5D6D7停止.起始D0D1D2D3D4D5D6D7D8停止.9.2.2 串行通信工作模式模式0以8位数据为一帧,不设起串行口的模式串行口的模式0 0特点特点:同步移位寄存器同步移位寄存器方式。波特率:固定为方式。波特率:固定为 fosc/12.RXD(P3.0):数据口线(发送和接收);先移数据的低位。:数据口线(发送和接收);先移数据的低位。TXD(P3.1):移位脉冲输出端。:移位脉冲输出端。(注意(注意:移位脉冲的频率就是模式移位脉冲的频率就是模式0 0的波特率)的波特率)主要功能主要功能:使用串行口扩展并行口,使用串行口扩展并行口,理论上可以扩展理论上可以扩展n*8位的并行口。位的并行口。MCS-51RXDTXDData 外部移位寄存器cp移位脉冲串行数据并行的数据(8位)串行口的模式0特点:同步移位寄存器方式。波特率:固定为 fo模式模式0 0 电路框图电路框图51内部总线SBUF零检测器移位时钟START SHIFT 发送控制器TXCLOCK TI SENDD 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 电路框图51内部总线SBUF零检测器移位START 模式模式0 0的发送与接收的发送与接收单片机执行单片机执行mov sbuf,a指令启动指令启动“发送控制器发送控制器”开开始发送。完毕,始发送。完毕,TI被置位。被置位。在满足在满足REN=1且且RI=0的条件下的条件下(实际上是一条写(实际上是一条写SCON指令),就会引发一次接收过程。完毕,指令),就会引发一次接收过程。完毕,RI置置位,向位,向CPU发中断申请。发中断申请。模式0的发送与接收单片机执行mov sbuf,a指令启动“发模式模式0 0的时序信号(发送)的时序信号(发送)S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6写SBUFSENDD1D0D2D3D4D5D6D7RXD端数据SHIFTTXD端同步脉冲TI中断标志mov sbuf,a 指令从发送到结束的10个机器周期模式0的时序信号(发送)S1S6S1S6S1S6S1模式模式0 0的时序信号(接收)的时序信号(接收)S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6S1S6写SCON(RI=0)RECEIVESHIFTRI对RXD采样TXD同步脉冲RI中断标志模式0的时序信号(接收)S1S6S1S6S1S6S1串行口模式串行口模式1 1特点特点:10位传输格式位传输格式(1个起始位个起始位+8个数据位个数据位+1个停止位个停止位);用于通讯的用于通讯的异步方式异步方式;可变波特率(定时器可变波特率(定时器T1的溢出率来确定的溢出率来确定,所以在此种模式下所以在此种模式下,首先要对首先要对T1进行初始化以确定串行口的波特率)。进行初始化以确定串行口的波特率)。发送操作:发送操作:在在TI=0,执行,执行mov sbuf,a 指令后从指令后从TXD端开始端开始发送数据。当发送完发送数据。当发送完8位数据后自动的添加一个高电平的停位数据后自动的添加一个高电平的停止位,并将止位,并将TI置位。置位。串行口模式1特点:10位传输格式(1个起始位+8个数据位+接收操作:接收操作:在在REN=1且且RI=0的条件下进行。的条件下进行。串行口的接收控制器对串行口的接收控制器对RXD线进行采样,其采样频率是接线进行采样,其采样频率是接收时钟的收时钟的16倍。当连续倍。当连续8次采集到次采集到RXD线上为低电平时,线上为低电平时,检测电路便认定检测电路便认定RXD线上有了线上有了“起始位起始位”,在此后,便开,在此后,便开始在每次第始在每次第7、8、9三个脉冲时进行三个脉冲时进行RXD采样,采取采样,采取“三中取二三中取二”的原则来确定接收的数据(如图所示)。的原则来确定接收的数据(如图所示)。数据装载条件:数据装载条件:当接收到停止位时,必须满足:当接收到停止位时,必须满足:RI=0且且SM2=0,才能,才能把接收的数据送到把接收的数据送到SBUF中(停止位送中(停止位送SCON的的RB8中,中,并使并使RI=1),否则数据丢失。),否则数据丢失。要想得到接收的数据,在接收前必须事先清零要想得到接收的数据,在接收前必须事先清零RI。接收操作:在REN=1且RI=0的条件下进行。串行口模式串行口模式1 1时数据帧格式及接收采样示意图时数据帧格式及接收采样示意图D0D1D2D3D4D5D6D7起始位起始位8位数据位数据停止位停止位对RXD线的数据以16倍速度采样当连续当连续8次采集到低电次采集到低电平时,便确认起始位到来平时,便确认起始位到来在每个第在每个第7,8,9个脉冲对个脉冲对RXD采样采样并采用并采用“以三取二以三取二”来确定采集的数据来确定采集的数据7.8.9串行口模式1时数据帧格式及接收采样示意图D0D1D2D3D4串行口模式串行口模式1时序图时序图串行口模式1时序图串行口模式串行口模式2 2、3 3特点特点:模式模式2 2、3 3都是都是1111位传输格式位传输格式 (1 1个起始位个起始位+9+9个数据个数据位位+1+1个停止位个停止位),它们的不同之处是波特率。,它们的不同之处是波特率。波特率波特率:模式模式2 2:固定为固定为fosc/64或或fosc/32。(具体由具体由PCON中的中的SMOD位来确定)。位来确定)。模式模式3 3:可变,由定时器可变,由定时器T1T1的溢出波特率来确定。的溢出波特率来确定。D0D1D2D3D4D5D6D7D8起始位8+1位数据停止位第9 位串行口模式2、3特点:模式2、3都是11位传输格式(1个起模式模式2、3的的发送过程发送过程类似于模式类似于模式1,唯一的区别在于,唯一的区别在于数数据帧中数据是据帧中数据是9 9位。这样,在发送位。这样,在发送一帧数据一帧数据时,时,CPU除除了要把了要把8 8位数据送位数据送SBUFSBUF外(外(movsbuf,a),),还要还要事先事先将第将第9 9位数据送到位数据送到SCON.TB8中。中。如:第如:第9 9位(位(TB8 TB8)=1=1时,时,SETBSCON.TB8 若若第第9 9位(位(TB8 TB8)=0=0时:时:CLRSCON.TB8 例如:例如:SETBSCON.TB8 或:或:CLRSCON.TB8 MOVSBUF,A MOVSBUF,A SM0SM1SM2RENTB8RB8TIRI模式2、3的发送过程类似于模式1,唯一的区别在于数据帧中数据模式模式2 2、3 3的接收过程也类似于模式的接收过程也类似于模式1 1,不同的是:模式,不同的是:模式1 1时,时,SCONSCON中的中的RB8RB8是接收到的停止位(是接收到的停止位(“1”“1”);而模式);而模式2 2、3 3时,时,RB8RB8是接收到的第是接收到的第9 9位。位。在模式在模式1 1,接收操作只有在,接收操作只有在RI=0,且且REN=1时数据可以接收。时数据可以接收。而模式而模式2 2、3 3的接收装载条件是:的接收装载条件是:a)RI=0且且SM2=0(与(与RB8的状态无关);的状态无关);或:或:b)RI=0且且RB8=1(SM2=1时)。时)。只有满足只有满足a)或满足或满足b)的条件时的条件时,接收到的数据才能送到接收到的数据才能送到SBUFSBUF,并使,并使RI=1RI=1激活,否则接收无效且激活,否则接收无效且RIRI不能置位。不能置位。模式2、3的接收过程也类似于模式1,不同的是:模式1时,SCRI=0是保证是保证SBUF空空(每次取走数据时通过软件复位(每次取走数据时通过软件复位RI,如,如果没有取走数据则果没有取走数据则RI=1),保证接收到的数据不丢失。),保证接收到的数据不丢失。利用后一个条件利用后一个条件SM2和和RB8来控制接收,可用于多机通信。来控制接收,可用于多机通信。令令SM2=1可以利用接收到的可以利用接收到的RB8控制接收是否有效控制接收是否有效。即即 RB8=1时接收有效;时接收有效;RB8=0时接收无效。时接收无效。SM2也称也称“多机通讯使能位多机通讯使能位”。在没有多机通信的场合,在没有多机通信的场合,RB8可用于奇偶效验可用于奇偶效验,以防止串行,以防止串行通信出错。通信出错。RI=0是保证SBUF空(每次取走数据时通过软件复位RI,如串行口模式串行口模式2 2、3 3时数据帧格式时数据帧格式发送时发送时:将将SCON中的中的TB8作为第作为第9位数据发送;位数据发送;接收时接收时:将接收来的第将接收来的第9位送到位送到SCON中的中的RB8中。中。D0D1D2D3D4D5D6D7D8起始位9位数据停止位SM0 SM1 SM2 REN TB8 RB8TIRI串行口模式2、3时数据帧格式发送时:将SCON中的TB8作为串行口模式串行口模式2和模式和模式3时序图时序图串行口模式2和模式3时序图模式模式2 2、3 3的应用之一的应用之一带奇偶校验位的数据传送带奇偶校验位的数据传送奇偶校验:奇偶校验:收到的第收到的第9 9位位RB8RB8是发送方送来的奇偶校验位。是发送方送来的奇偶校验位。在这种情况下必须令在这种情况下必须令SM2=0,否则接收的校验位否则接收的校验位RB8=0RB8=0时,将影响数据的接收(因为时,将影响数据的接收(因为RB8RB8有时为有时为“1”“1”,而有时,而有时为为“0”“0”)。)。当接收数据后,对当接收数据后,对 PSW.0 PSW.0(P P标志)和标志)和 RB8 RB8位进行判断。位进行判断。检查结果是否与约定的相符合。检查结果是否与约定的相符合。模式2、3的应用之一带奇偶校验位的数据传送奇偶校验:收到的例如:例如:发送、接收双方约定为发送、接收双方约定为奇校验奇校验(数据中数据中1 1的个数为奇的个数为奇):则发送方的则发送方的第第9 9位位要根据要根据前前8 8位数据位数据来确定来确定。若发送的若发送的8 8位数据是:位数据是:00011010 ,则则TB8为为0。发送程序如下:发送程序如下::MOV MOV C,PC,PCPLCPLC CMOVMOVTB8,CTB8,CMOVMOVSBUF,ASBUF,A:接收时将接收时将 PSW.0 PSW.0(P P标志)位与标志)位与RB8RB8进行进行“异或异或”,结果,结果为为1 1,说明校验结果正确。,说明校验结果正确。例如:发送、接收双方约定为奇校验(数据中1的个数为奇):接利用模式利用模式2,32,3进行带奇校验的串行通讯程序流程图进行带奇校验的串行通讯程序流程图数据送累加器数据送累加器APSW.P=1?SET SCON.TB8CLR SCON.TB8MOV SBUF,ATI=1?CLR SCON.TIYESNONOYES发送端程序(原始TI=0)使用使用“查询法查询法”编制的发送、接收程序编制的发送、接收程序RI=1?MOV A,SBUFPSW.PRB8=1?出错处理CLR SCON.RIYESNO接收端程序(原始RI=0)NY数据送内存数据送内存利用模式2,3进行带奇校验的串行通讯程序流程图数据送累加器A模式模式2 2、3 3的应用之二的应用之二多机通信多机通信如果系统采用多如果系统采用多CPU结构,并且有一个做主机,其它为从结构,并且有一个做主机,其它为从机时,它们之间可以通过机时,它们之间可以通过多机通信多机通信的方式进行数据交换。的方式进行数据交换。如:多路数据采集系统。如:多路数据采集系统。我们选一台单片机作为我们选一台单片机作为主机主机,专门负责接收从机传回的数,专门负责接收从机传回的数据,并进行数据的后期处理(保存、打印和显示等);据,并进行数据的后期处理(保存、打印和显示等);而从机则完成对传感器的信号检测、而从机则完成对传感器的信号检测、A/D转换,最后将数转换,最后将数据采用串行通讯的形式上传给主机。据采用串行通讯的形式上传给主机。模式2、3的应用之二多机通信如果系统采用多CPU结构,并且传统方式的多路数据采集系统传统方式的多路数据采集系统单片机系统单片机系统或或微型计算机系统微型计算机系统传感器传感器 1传感器传感器 2传感器传感器 3传感器传感器 4传感器传感器 N接口接口电路电路引线引线(模拟信号)(模拟信号)机房机房 或或 仪表室仪表室检测现场检测现场传统方式的多路数据采集系统单片机系统传感器 1传感器 2传感采用采用“智能传感器智能传感器”组成的多路数据采集系组成的多路数据采集系统统主机主机从机从机 N从机从机 4从机从机 3从机从机 2从机从机 1串行数据线(串行数据线(2条)条)RXDTXDTXDRXD从机做智从机做智能传感器能传感器采用“智能传感器”组成的多路数据采集系统主机从机 N从机 4多机通讯中多机通讯中SM2的设定的设定在模式在模式2 2、3 3中,中,1 1,SM2=0时:RB8=1或或RB8=0 都可以激活都可以激活RI。2 2,SM2=1时:时:RB8=1才能激活才能激活RI。RB8=0 RB8=0时,时,RIRI不能激活。不能激活。多机通讯中SM2的设定在模式2、3中,主从式多机通信原理主从式多机通信原理主机是通信的发起者主机是通信的发起者,主机发送的数据可以传送到各个,主机发送的数据可以传送到各个从机,从机发送的数据只能为主机接收,从机,从机发送的数据只能为主机接收,从机之间不能从机之间不能直接通讯直接通讯。主机和从机的主机和从机的串口设置为模式串口设置为模式2或或3,其中主机的,其中主机的SM2=0,从机的从机的SM2=1。第九位数据用来作为地址数据标识位第九位数据用来作为地址数据标识位,RB8=1时为地址时为地址帧,帧,RB8=0时为数据帧。从机的时为数据帧。从机的SM2=1时,当收到的时,当收到的RB8=1(地址帧)时,(地址帧)时,RI可以激活;如果可以激活;如果RB8=0(数据(数据帧),则帧),则RI不能激活。不能激活。主从式多机通信原理主机是通信的发起者,主机发送的数据可以传送主机首先通过发送主机首先通过发送地址码地址码来寻找从机(来寻找从机(地址码的特征是第地址码的特征是第9位数据为位数据为“1”),所以所有的从机都能接收到主机发),所以所有的从机都能接收到主机发出的地址码(因为从机的出的地址码(因为从机的RI=0,SM2=1,RB8=1),并使),并使RI=1引发中断。从机在中断服务程序中,将接收到地址码引发中断。从机在中断服务程序中,将接收到地址码与自己的地址进行比较,被选中的从机将自己的与自己的地址进行比较,被选中的从机将自己的SM2=0;而未被选中的从机仍保持而未被选中的从机仍保持SM2=1,并退出中断服务程序,并退出中断服务程序。当主机找到从机后,开始向从机发数据、命令(其特征为当主机找到从机后,开始向从机发数据、命令(其特征为第第9位位=0)。由于被选中的从机)。由于被选中的从机SM2=0,所以尽管接收到,所以尽管接收到的的RB8=0,同样可以激活从机的,同样可以激活从机的RI,使其以,使其以查询的方式查询的方式接接收主机发出的数据或命令。当主机与从机的通讯完成后,收主机发出的数据或命令。当主机与从机的通讯完成后,从机再将其从机再将其SM2=1,并退出中断服务程序。主机重新发出,并退出中断服务程序。主机重新发出另一个从机的地址,所有从机可以马上响应并接收地址信另一个从机的地址,所有从机可以马上响应并接收地址信息息。通信过程通信过程主机首先通过发送地址码来寻找从机(地址码的特征是第9位数据为模式模式2 2、3 3使用时要注意的问题使用时要注意的问题在模式在模式2、3中,可以实现较为特殊的通信方式,如带校验中,可以实现较为特殊的通信方式,如带校验位的位的9位传送、多机通讯。位传送、多机通讯。注意:当注意:当SM2=0时,只能采用查时,只能采用查询方式?询方式?功能SM2第9位 工作方式带校验位的带校验位的9位位数传送数传送SM2=0校验位校验位以查询(以查询(RI)的方式)的方式接收数据接收数据多机多机通讯通讯主主机机SM2=0地址码:地址码:TB8=1数据、命令时数据、命令时=0以查询的方式工作以查询的方式工作从从机机SM2=1未选中时未选中时SM2不变不变以中断的方式接收地址以中断的方式接收地址选中后选中后SM2=0以查询的方式与主机通讯以查询的方式与主机通讯模式2、3使用时要注意的问题在模式2、3中,可以实现较为特殊9.2.3波特率的设计波特率的设计模式模式0的波特率的波特率=fosc/12模式模式2的波特率的波特率=模式模式1和模式和模式3的波特率的波特率=9.2.3波特率的设计模式0的波特率=fosc/12fosc12发送SBUF(99H)TXD输入移位寄存器RXD模式模式0波特率的产生波特率的产生fosc12发送SBUF(99H)TXD输入移位寄存器RX串行口模式课件波特率及定时器波特率及定时器T1T1的设定的设定在异步通信中,发送方与接收方是两个互相独立的系在异步通信中,发送方与接收方是两个互相独立的系统,它们的系统时钟可以各不相同统,它们的系统时钟可以各不相同,此时确保通信正确此时确保通信正确的条件是:的条件是:1、要有相同的字符帧格式要有相同的字符帧格式;2、要有相同的波特率要有相同的波特率。MCS-51单片机的串行口四种模式其波特率各不相同。单片机的串行口四种模式其波特率各不相同。其中模式其中模式1、3的波特率就是由的波特率就是由定时器定时器T1的溢出率的溢出率来决来决定的(定的(PCON中的中的SMOD=1波特率加倍)。波特率加倍)。波特率及定时器T1的设定在异步通信中,发送方与接收方是两个互如何设定波特率?如何设定波特率?在编制串行口通讯(模式在编制串行口通讯(模式1、3)程序时,在程序的初始化中,)程序时,在程序的初始化中,通过通过T1进行波特率的设定,既对进行波特率的设定,既对T1进行初始化。进行初始化。T1初始化的主要任务是:初始化的主要任务是:1、设置、设置T1的的工作方式为定时(工作方式为定时(C/T=0);工作模式为模式工作模式为模式2:自动重装。:自动重装。2、计算、计算定时常数并分别送给定时常数并分别送给TH1、TL1。波特率计算公式:波特率计算公式:T1溢出率:溢出率:=(计数速率)(计数速率)/256-(TH1)=(fosc/12)/256-(TH1)如何设定波特率?在编制串行口通讯(模式1、3)程序时,在程序根据波特率求根据波特率求定定时器器T1初值计算公式初值计算公式设设:fosc为系系统时钟频率,率,TH1为定定时器器T1的初的初值,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晶振是为了产生精确的波特率。晶振是为了产生精确的波特率。根据波特率求定时器T1初值计算公式设:fosc为系统时钟频率9.2.4 串行口的应用串行口的应用在编制串行通信程序时,通信双方必须保证:在编制串行通信程序时,通信双方必须保证:1、相同的、相同的“波特率波特率”;2、相同的、相同的“字符帧格式字符帧格式”格式。格式。若采用若采用1和和3模式,则波特率可变且模式,则波特率可变且由定时器由定时器T1来来作波特率发生器,作波特率发生器,所以根据所以根据波特率计算波特率计算T1的初值的初值,是是串口程序初始化任务之一。串口程序初始化任务之一。在通信过程中,在通信过程中,对标志(对标志(RI、TI)的判断)的判断是控制通是控制通信全过程的关键环节。信全过程的关键环节。9.2.4 串行口的应用在编制串行通信程序时,通信双方必须串行口模式串行口模式0的应用的应用扩展并行接口扩展并行接口 P3.0 P3.1 P1.0D1D2 74LS164CP CLR(STB)5VTXDRXD P3.0 P3.1 P1.0 P1.1Q 74LS165CP P/S5VTXDRXD外接串入外接串入-并出或并入并出或并入-串出器件可实现串出器件可实现I/O的扩展的扩展串行口模式0的应用扩展并行接口 D15VTXDRX74LS164(串人串人/并出并出)74LS164(串人/并出)74LS165(并入并入/串出串出)74LS165(并入/串出)例例9-2:8031串行口外接串行口外接CD4049或或164串入串入-并并出移位寄存器扩展出移位寄存器扩展8位并行口位并行口,8位并行口的位并行口的每位都接一个发光二极管每位都接一个发光二极管,要求发光二极管要求发光二极管从左到右以一定延迟轮流显示从左到右以一定延迟轮流显示,并不断循环并不断循环.电路参见电路参见 P195 图图9-17 P3.0 P3.1 P1.0D1D2 74LS164CP CLR(STB)5VTXDRXD 3.0 P3.1 P1.0 P1.1Q 74LS165CP P/S5VTXDRXD例9-2:D15VTXDRXD Q5VTXDR例例9-29-2程序程序ORG0023HAJMPSBR;转中断服务转中断服务ORG2000HMOVSCON#00HMOVA,#80H ;最左一位;最左一位LED先亮先亮CLRP1.0;关闭并行输出关闭并行输出MOVSBUF,ALOOP:SJMP$SBR:SETBP1.0;启动并行输出;启动并行输出ACALL DELAYCLRTIRRACLRP1.0MOVSBUF,ARETI例9-2程序例例9 9-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例9-3:用8051串行口外加移位寄存器CD4014(或用 8051 串行口外接 74LS165 移位寄存器扩展8位输入口,输入数据由 8 个开关提供,另有一个开关 K提供联络信号。电路示意如图 所示。当开关K合上时,表示要求输入数据。输入 8 位开关量,处理不同的程序。用 8051 串行口外接 74LS165 移位寄存器扩展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 74LS165CP P/S5VTXDRXD D15VTXDRXD Q5VTXDRXD例例9-3程序程序START:MOVSCON,#10H;模式;模式0,允许接收,允许接收JBP1.1,$;开关;开关K未闭合,等待未闭合,等待SETBP1.0;并行置入数据;并行置入数据CLRP1.0;开始串行移位;开始串行移位JNBRI,$CLRRIMOVA,SBUFACALLLOGSIM;进行逻辑模拟;进行逻辑模拟SJMPSTART例9-3程序串行口模式串行口模式1的发送和接收的发送和接收例例9-4:8031串行口按双工方式收发串行口按双工方式收发ASCII码码,最高位用来作奇偶校验位最高位用来作奇偶校验位,采用奇检采用奇检验模式验模式,要求传送的波特率为要求传送的波特率为1200b/s.编编写有关通讯程序写有关通讯程序.已知:已知:fosc=6MHz串行口模式1的发送和接收例例9-4:MOVTMOD,#20HMOVTL1,#0F3HMOVTH1,#0F3HSETBTR1MOVSCON,#50HMOVR0,#20HMOVR1,#40HACLALLSOUTSETBESSETBEALOOP:SJMP$;Interrupt serverORG0023HAJMPSBR1ORG0100HSBR1:JNBRI,SENDACALLSINSJMPNEXTSEND:ACALLSOUTNEXT:RETI例9-4:MOVTMOD,#20HSOUT:CLRTIMOVA,R0MOVC,PCPLCMOVACC.7INCR0MOVSBUF,ARETSIN:CLRRIMOVA,SBUFMOVC,PCPLC;没有检查奇偶校验是否正确没有检查奇偶校验是否正确ANLA,#7FHMOVR1,AINCR1RETSOUT:CLRTI例例9 9-5-5:采用查询方式由串行口发送带奇偶校验位的采用查询方式由串行口发送带奇偶校验位的数据块数据块ASCIIASCII码、码、3232字节字节1200b/s 1200b/s fosc=11.059MHZfosc=11.059MHZ例例9-69-6:采用查询方式由串行口接收带奇偶校验位的采用查询方式由串行口接收带奇偶校验位的数据块,要求同上。数据块,要求同上。例9-5:采用查询方式由串行口发送带奇偶校验位的数据块例例9-5:MOVTMOD,#20HMOVTL1,#0E8HMOVTH1,#0E8H;波特率的设定波特率的设定SETBTR1MOVSCON,#01000000BMOVR0,#20H;数据块起始地址数据块起始地址MOVR7,#32 LOOP:MOVA,R0ACALLSP_OUTJNBP,ERROR;发送程序该判断可不要发送程序该判断可不要?INCR0DJNZR7,LOOPSP_OUT:MOVC,PCPLC;奇校验奇校验MOVACC.7,CMOVSBUF,A;发送数据发送数据JNBTI,$CLRTIRET例9-5:MOVTMOD,#20HMOV TMOD,#20HMOV TL1,#0E8HMOV TH1,#0E8HSETB TR1MOV SCON,#01010000BMOV R0,#20HMOV R7,#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:MOV TMOD,#20H接收子程:例9-6:串行口模式串行口模式2、模式、模式3的发送和接收的发送和接收例例9-8:用第用第9个数据位作奇偶校验位个数据位作奇偶校验位,编写串行口模编写串行口模式式2的发送程序的发送程序例例9-9:用第用第9个数据位作奇偶校验位个数据位作奇偶校验位,编写串行口模编写串行口模式式2的接收程序的接收程序串行口模式2、模式3的发送和接收例例9-8:9-8:TRT:MOV 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-8:TRT:MOV SCON,#80H例例9-9:9-9:RRR:MOV SCON,#90HMOV PCON,#80HLOOP:JBCRI,RECEIVSJMP LOOPRECIEV:MOV A,SBUFJBPSW.0,ONEJBRB8,ERRSJMP RIGHTONE:JNBRB8,ERR;?RIGHT:ERR:例9-9:RRR:MOV SCON,#90H思考:思考:多机通信中第多机通信中第9位不能用于校验,应采用位不能用于校验,应采用何种校验方式?何种校验方式?如累加和校验如累加和校验累加和:对所有要发送的数据在发送的同时进行累加。取累加和:对所有要发送的数据在发送的同时进行累加。取其累加和的低其累加和的低8 8位(大于位(大于255255的舍去),即单字节。的舍去),即单字节。发送方在发送完所有数据后,将单字节的累加和也发出。发送方在发送完所有数据后,将单字节的累加和也发出。接收方在接收数据时,对接收到的每一个数据也进行累加接收方在接收数据时,对接收到的每一个数据也进行累加操作。数据接收完成后,将操作。数据接收完成后,将自行计算的累加和自行计算的累加和与最后收与最后收到的发送方送来的到的发送方送来的发送累加和发送累加和进行比较。如果两个累加进行比较。如果两个累加和一致,则认为数据传送正确。和一致,则认为数据传送正确。思考:多机通信中第9位不能用于校验,应采用何种校验方式?如累应用举例:使用模式应用举例:使用模式3 3进行多机通讯进行多机通讯主机主机从机从机 N从机从机 4从机从机 3从机从机 2从机从机 1串行数据线(串行数据线(2条)条)主机可以与所有从机通讯,而从机之间不能通讯。主机可以与所有从机通讯,而从机之间不能通讯。应用举例:使用模式3进行多机通讯主机从机 N从机 4从机 3多机通讯中主机与从机之间的控制、状态信息多机通讯中主机与从机之间的控制、状态信息主机的控制命令:主机的控制命令:00H 主机发送,从机接收;主机发送,从机接收;(控制从机的操作)(控制从机的操作)01H 主机接收,从机发送。主机接收,从机发送。从机状态字:从机状态字:从机向主机发送的用于表征从机工作状态的从机向主机发送的用于表征从机工作状态的信息(如下图)。信息(如下图)。ERRTRDYRRDY0:合法命令:合法命令 0:发送未就绪:发送未就绪 0:接收未就绪:接收未就绪1:非法命令:非法命令 1:发送就绪:发送就绪 1:接收就绪:接收就绪从机返回的状态字从机返回的状态字多机通讯中主机与从机之间的控制、状态信息主机的控制命令:主机程序框图主机程序框图T1为定时为定时,模式模式2B=1200,启动,启动T1设串口为模式设串口为模式3REN=1,SM2=0TB8=1设定程序数据:设定程序数据:R0R5停机停机MCOMMU从机应答?从机应答?地址相符?地址相符?发送命令字发送命令字(TB8=0)从机应答?从机应答?命令正确?命令正确?命令分类命令分类从机接收就绪?从机接收就绪?从机发送就绪?从机发送就绪?RET命令从命令从机复位机复位发发FFHNNYYNNYYNNYY接收接收发送发送调用调用MCOMMU接收数据块接收数据块发送数据块发送数据块发送从机地址发送从机地址主机程序框图T1为定时,模式2B=1200,启动T1设串口为一:主机程序(初始化部分)一:主机程序(初始化部分)ORG 2000HSTART:MOV TMOD,#20H;定时器定时器T1为模式为模式2(8位自动重装)位自动重装)MOV TH1,#0F4HMOV TL1,#0F4H;波特率为波特率为1200(设外接(设外接MHz晶体)晶体)SETB TR1;启动启动T1MOV SCON,#0D8H;串口为模式串口为模式3,REN=1,SM2=0,TB8=1MOV PCON,#00H;设设PCON中的中的SMOD=0MOV R0,#40H;发送数据块首地址送发送数据块首地址送R0指针指针MOV R1,#20H;接收数据块首地址送接收数据块首地址送R1指针指针MOV R2,#SLAVE;被寻从机地址送被寻从机地址送R2MOV R3,#00H;主发、从收命令。主发、从收命令。或主收、从发命令或主收、从发命令/#01HMOV R4,#14H;发送数据块长度送发送数据块长度送R4(20)计数器)计数器MOV R5,#14H;接收数据块长度送接收数据块长度送R5(20)计数器)计数器ACALL MCOM;调用主机通讯子程序调用主机通讯子程序SJMP$一:主机程序(初始化部分)ORG 2000H二二:主机通讯子程序主机通讯子程序(MCOM)ORG 2100HMCOM:MOV A,R2;取从机地址取从机地址MOV SBUF,AJNB RI,$;注意:为什么判断注意:为什么判断RI而不是而不是TI?CLR RIMOV A,SBUF;取从机的返回地址取从机的返回地址XRL A,R2;核对两个地址核对两个地址JZ MTXD2;相符时,转相符时,转MTXD2MTXD1:MOV SBUF,#0FFH;返回地址错误时,发送从机复位信号返回地址错误时,发送从机复位信号SETB TB8;设定地址标志设定地址标志SJMP MCOM ;重发从机地址,所有从机重新判断地址重发从机地址,所有从机重新判断地址MTXD2:CLR TB8;将将TB8=0,准备发送命令准备发送命令MOV SBUF,R3;送出命令送出命令JNB RI,$;等待从机应答等待从机应答CLR RI;从机应答后清标志从机应答后清标志MOV A,SBUF;接收从机应答命令接收从机应答命令JNB ACC.7,MTXD3;命令无错时,则命令分类命令无错时,则命令分类SJMP MTXD1;命令错返回重新联络命令错返回重新联络二:主机通讯子程序(MCOM)ORG 2100HMTXD3:CJNE R3,#00H,MRXD;从机发送主机接收时,转从机发送主机接收时,转MRXDJNB ACC.0,MTXD1;从机接收时,若从机未准备好转回从机接收时,若从机未准备好转回MTXD4:MOV SBUF,R0;若从机准备好,则开始发送若从机准备好,则开始发送JNB TI,$CLR TIINC R0DJNZ R4,MTXD4RETMRXD:JNB ACC.1,MTXD1;从机发送未准备好返回从机发送未准备好返回MRXD1:JNB RI,$;等待接收等待接收CLR RIMOV A,SBUFINC R1;接收数据区指针加一接收数据区指针加一DJNZ R5,MRXD1;未接收完则继续(未接收完则继续(R5接收数据计数器)接收数据计数器)RETENDERR从机返回的状态字TRDYRRDY0:合法命令 0:发送未就绪 0:接收未就绪1:非法命令 1:发送就绪 1:接收就绪MTXD3:CJNE R3,#00H,MRXD;从机发送主从机主程序框图从机主程序框图T1为定时为定时,模式模式2B=1200,启动,启动T1设串口为模式设串口为模式3REN=1,SM2=1TB8=1设定程序参数:设定程序参数:R0R3开串行口中断开串行口中断动态停机动态停机等待主机发送地址码等待主机发送地址码保护现场保护现场接收地址符合本机?接收地址符合本机?向主机回送本机地址向主机回送本机地址接收下一字符接收下一字符是命令吗?是命令吗?命令分类命令分类 本机发送准备就绪?本机发送准备就绪?本机接收准备就绪?本机接收准备就绪?发发TRDY=1状态字状态字发发RRDY=1状态字状态字发送数据发送数据接收数据接收数据发送完?发送完?接收完?接收完?恢复现场返回恢复现场返回NNYY发送命令发送命令接收命令接收命令非法命令非法命令送送TRDY=0送送RRDY=0NNNY中断服务程序中断服务程序NY接收接收FFH时时从机主程序框图T1为定时,模式2B=1200,启动T1设串口ORG 0000HLJMP STARTORG 0023HLJMP 0100HORG 0040HSTART:MOV TMOD,#20H;设定定时器设定定时器T1为模式为模式2MOV TH1,#0F4H;设定波特率为设定波特率为1200MOV TL1,#0F4HSETB TR1;启动定时器启动定时器T1MOV SCON,#0F8H;设串口模式设串口模式3,REN=1,SM2=1,TB8=1MOV PCON,#00HMOV R0,#20H;R0指向发送数据块首地址指向发送数据块首地址MOV R1,#40H;R1指向接收数据块首址指向接收数据块首址MOV R2,#14H;R2赋发送数据块长度赋发送数据块长度MOV R3,#14H;R3赋接收数据块长度赋接收数据块长度SETB EASETB ES;开中断开中断CLR RI;清标志;清标志RI准备接收数据准备接收数据SJMP$;等待中断等待中断三,从机主程序(初始化)ORG 0000H三,从机主程序(初始化)四:从机中断服务程序四:从机中断服务程序ORG 0100HSINTS:CLR RI;接收到地址后清接收到地址后清RI PUSH ACCPUSH PSW;保护现场保护现场MOV A,SBUF;接收主机送来得从机地址接收主机送来得从机地址XRL A,#SLAVE;核实从机地址核实从机地址JZ SRXD1;若是本机地址转若是本机地址转SRXD1RETU:POP PSW;返回主程序返回主程序POP ACC;恢复现场恢复现场RETI;中断返回中断返回SRXD1:CLR SM2;SM2清零,单独接收主机数据清零,单独接收主机数据/命令命令MOV SBUF,#SLAVE;向主机发回从机地址向主机发回从机地址JNB RI,$;等待主机的命令等待主机的命令CLR RI;接收到主机命令后清接收到主机命令后清RIJNB RB8,SRXD2;若是命令(若是命令(RB8=0)则转)则转SRXD2继续继续SJMP RETU;接收的不是命令时(接收的不是命令时(RB8=1),返回),返回四:从机中断服务程序ORG 0100HSRXD2:MOV A,SBUF;将接收到的命令送将接收到的命令送ACJNE A,#02H,NEXT;命令合法(命令合法(A-02H)NEXT:JC SRXD3;若命令合法(若命令合法(A 02H)则继续)则继续CLR TI;命令不合法则清命令不合法则清TI准备发回准备发回ERR=1MOV SBUF,#80H;发送发送ERR=1的状态字的状态字SETB SM2;SM2重新置位重新置位SJMP RETU;返回主程序返回主程序SRXD3:JZ SCHRX ;若若A=0
展开阅读全文