6单片机的串口.ppt
单 片 机 原 理,单片机原理,单 片 机 原 理,第六章 MCS-51的串行口6.1 串行口的概念 6.2 串行口的结构 6.3 串行口的四种工作方式6.4 多机通讯6.5 波特率的设定6.6 串行口应用举例,单片机原理,6.1 串行口的概念,通信的基本方式分为并行通信和串行通信两种:并行通信是构成1组数据的各位同时进行传送,例如8位数据或16位数据并行传送。其特点是传输速度快,但当距离较远、位数又多时导致了通信线路复杂且成本高。串行通信是数据一位接一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现通信(如电话线),从而大大地降低了成本,特别适用于远距离通信。缺点是传送速度慢。,单片机原理,6.1 串行口的概念,串行通信可分为同步传送和异步传送两种基本方式(1)同步方式是将一大批数据分成几个数据块,数据块之间用同步字符予以隔开,而传输的各位二进制码之间都没有间隔。其基本特征是发送与接收时钟始终保持严格同步。(2)异步通信是按帧传送数据,它利用每一帧的起、止信号来建立发送与接收之间的同步,每帧内部各位均采用固定的时间间隔,但帧与帧之间的时间间隔是随机的。其基本特征是每个字符必须用起始位和停止位作为字符开始和结束的标志,它是以字符为单位一个个地发送和接收的。,单片机原理,6.1 串行口的概念,在串行异步传送中,CPU与外设之间事先必须约定:字符格式。双方要事先约定字符的编码形式、奇偶校验形式及起始位和停止位的规定。例如用ASCII码通信,有效数据为7位,加1个奇偶校验位、1个起始位和1个停止位共10位。当然停止位也可大于1位。波特率(Baudrate)。波特率就是数据的传送速率,即每秒钟传送的二进制位数,单位为位/秒。它与字符的传送速率(字符/秒)之间存在如下关系:波特率=位/字符字符/秒=位/秒 要求发送端与接收端的波特率必须一致。,单片机原理,6.1 串行口的概念,串行通信的数据传送方向有3种形式。(1)单工方式:如图(a)所示,A端为发送站,B端为接收站,数据仅能从A站发至B站。(2)半双工方式:如图(b)所示,数据既可从A站发送到B站,也可以由B站发送到A站。不过在同一时间只能作1个方向的传送。(3)全双工方式:如图(c)所示,每个站(A、B)既可同时发送,也可同时接收。,单片机原理,6.2 串行口的结构,MCS-51单片机内部有1个功能很强的全双工串行口,可同时发送和接收数据。它有4种工作方式,可供不同场合使用。波特率由软件设置,通过片内的定时/计数器产生。接收、发送均可工作在查询方式或中断方式,使用十分灵活。MCS-51的串行口除了用于数据通信外,还可以非常方便地构成1个或多个并行输入/输出口,或作串并转换,用来驱动键盘与显示器。,单片机原理,6.2 串行口的结构,单片机原理,6.2 串行口的结构,1、串行口数据缓冲器SBUF SBUF是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。两个缓冲器只用一个字节地址99H,可通过指令对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。CPU写SBUF,就是修改发送缓冲器;读SBUF,就是读接收缓冲器。串行口对外也有两条独立的收发信号线RXD(P3.0)和TXD(P3.1),因此可以同时发送、接收数据,实现全双工传送。,单片机原理,6.2 串行口的结构,2、串行口控制寄存器SCON SCON寄存器用来控制串行口的工作方式和状态,它可以是位寻址。在复位时所有位被清0,字地址为98H。SCON的格式为,D7 D6 D5 D4 D3 D2 D1 D0,SM0和SM1:工作方式选择位,可选择四种工作方式:,单片机原理,6.2 串行口的结构,SM2:多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB80时不激活RI,收到的信息丢弃;RB81时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。在方式0时,SM2必须是0。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。REN:允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。,单片机原理,6.2 串行口的结构,TB8:发送的第9位数据。在方式2和方式3时,TB8为所要发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址;也可用作数据的奇偶校验位。该位由软件置位或复位。在方式0和方式1中,该位未用。RB8:接收的第9位数据。在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。,单片机原理,6.2 串行口的结构,TI:发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。RI:接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。,单片机原理,6.2 串行口的结构,3、电源控制寄存器PCON 特殊功能寄存器PCON中,只有一位(最高位)SMOD与串行口的工作有关。PCON的地址为 87H,不可位寻址,因此初始化时需要字节传送。,SMOD(PCON.7)波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。,D7 D6 D5 D4 D3 D2 D1 D0,PCON,87H,单片机原理,6.3 串行口的四种工作方式,(1)方式0:串行接口的工作方式0为同步移位寄存器方式,其波特率是固定的,为fosc(振荡频率)的1/12。方式0发送:数据从RXD引脚串行输出,TXD引脚输出同步脉冲。当1个数据写入串行口发送缓冲器时,串行口将8位数据以fosc/12的固定波特率从RXD引脚输出,从低位到高位。发送完后置中断标志TI为1,呈中断请求状态,在再次发送数据之前,必须用软件将TI清0。,单片机原理,6.3 串行口的四种工作方式,方式0接收:在满足REN=1和RI=0的条件下,串行口处于方式0输入。此时,RXD为数据输入端,TXD为同步信号输出端,接收器也以fosc/12的波特率采样RXD引脚输入的数据信息。当接收器接收完8位数据后,置中断标志RI=1为请求中断,在再次接收之前,必须用软件将RI清0。,单片机原理,6.3 串行口的四种工作方式,在方式0工作时,必须使SCON寄存器中的SM2位为“0”,这并不影响TB8位和RB8位。方式0发送或接收完8位数据后由硬件置位TI或RI中断请求标志,CPU在响应中断后要用软件清除TI或RI标志。若串行口要作为并行口输入输出,这时必须设置“串入并出“或”并入串出”的移位寄存器来配合使用(如74LS164或74LS165等)。例如将串行口作为并行输出口使用时,可采用下图所示的方法。,单片机原理,6.3 串行口的四种工作方式,(2)方式1:在方式1时,串行口被设置为波特率可变的8位异步通信接口。方式1发送:数据位由TXD端输出,发送1帧信息为10位,其中1位起始位、8位数据位(先低位后高位)和一个停止位“1”。CPU执行1条数据写入发送缓冲器SBUF的指令,就启动发送器发送。当发送完数据,就置中断标志TI为1。方式1所传送的波特率取决于定时器T1的溢出率和特殊功能寄存器PCON中SMOD的值,即方式1的波特率=(2SMOD/32)定时器T1的溢出率。,单片机原理,6.3 串行口的四种工作方式,方式1接收:用软件置REN为1时,接收器以所选择波特率的16倍速率,并在7、8、9个脉冲期间采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。,单片机原理,6.3 串行口的四种工作方式,(3)方式2:串行口工作于方式2时,被定义为9位异步通信接口。方式2的发送和接收与方式1基本相似。方式2发送发送数据由TXD端输出,发送1帧信息为11位,其中1位起始位(0)、8位数据位(先低位后高位)、1位可控位为1或0的第9位数据、1位停止位。附加的第9位数据为SCON中的TB8,它由软件置位或清0,可作为多机通信中地址/数据信息的标志位,也可作为数据的奇偶校验位。方式2接收数据由RXD端输入,接收11位信息,其中1位起始位(0)、8位数据位、1位附加的第9位数据、1位停止位(1)。方式2的波特率=(2SMOD/64)fosc,单片机原理,6.3 串行口的四种工作方式,数据接受同时满足下列两个条件,才会产生:RI=0;(接受缓冲器为空)SM2=0 或接收到的第 9 位数据RB81。上述两个条件中任一个不满足,所接收的数据帧就会丢失,不再恢复。两者都满足时,第9位数据装入 RB8,前8位数据装入 SBUF。请注意:与方式1不同,方式2中装入RB8的是第9位数据,而不是停止位。所接收的停止位的值与SBUF、RB8和RI都没有关系,利用这一特点可用于多机通信中。方式2的波特率=(2SMOD/64)fosc(4)方式3:方式3为波特率可变的9位异步通信方式,除了波特率有所区别之外,其余方式都与方式2相同。方式3的波特率=(2SMOD/32)(定时器T1的溢出率),单片机原理,6.4 多机通讯,单片机原理,6.4 多机通讯,在主从式多机系统中,主机发出的信息有两类,而且具有特征,能够有所区分。一类为地址,用来确定需要和主机通信的从机,特征是串行传送的第9位数据为1;另一类是数据,特征是串行传送的第9位数据为0。对从机来说,要利用SCON寄存器中的SM2位的控制功能。在接收时,若RI=0,则只要SM2=1,接收总能实现;而若SM2=0,则发送的第9位TB8必须为0接收才能进行。因此,对于从机来说,在接收地址时,应使SM2=1,以便接收到主机发来的地址,从而确定主机是否打算和自己通信,一经确认后,从机应使SM2=0,以便接收TB8=0的数据。,单片机原理,6.4 多机通讯,主从多机通信的过程如下:(1)使所有的从机的SM2位置1,以便接收主机发来的地址。(2)主机发出一帧地址信息,其中包括8位需要与之通信的从机地址,第9位为1。(3)所有从机接收到地址帧后,各自将所接收到的地址与本机地址相比较,对于地址相同的从机,使SM2位清零以接收主机随后发来的所有信息;对于地址不符合的从机,仍保持SM2=1的状态,对主机随后发来的数据不予理睬,直至发送新的地址帧。(4)主机给已被寻址的从机发送控制指令和数据(数据帧的第9位为0)。,单片机原理,6.5 波特率的设定,串行通信的4种工作方式对应着3种波特率:(1)对于方式0,波特率是固定的,为单片机时钟的十二分之一,即fosc/12。(2)对于方式2,波特率有两种可供选择,即fosc/32和fosc/64。对应于以下公式:波特率=fosc2SMOD/64(3)对于方式1和方式3,波特率都由定时器T1的溢出率来决定,对应于以下公式:波特率=(2SMOD/32)(定时器T1的溢出率)而定时器T1的溢出率则和所采用的定时器工作方式有关,并可用以下公式表示:定时器T1的溢出率=fosc/12(2n-X)其中X为定时器T1的计数初值,n为定时器T1的位数,对于定时器方式0,取n=13;对于定时器方式1,取n=16;对于定时器方式2、3,取n=8。,单片机原理,工作方式3应用举例 例:某双机系统,甲乙两机的时钟频率为11.0592MHz,波特率设定为9600bps,试编写程序将甲机片外RAM50H70H的数据块通过串行口传送到乙机的片内RAM 50H70H单元中,采用奇偶校验检验差错。(1)定时器/计数器T1的初始化,即对和T1相关的特殊功能寄存器TH1、TL1、TMOD、TCON进行设定。对TH1、TL1的设定即为对计数初值的确定。本题中假设SMOD=1,则由公式:波特率=2SOMDT1的溢出率/32 9600=211.0592106/(12(28-x)32)可得初值X=250=FAH,6.6 串行口应用举例,单片机原理,(2)串行口的初始化,即对和串行口相关的寄存器SCON、PCON进行设定。串行数据的发送内容包括数据和奇偶校验位两部分内容,若将串行口工作方式设定为方式3,允许接收。则SCON=11010000B=0D0H,PCON=80H。(3)甲机:将片外RAM50H70H的内容逐一向乙机发送,发送前奇偶校验位放在TB8中。一帧发送完毕后,如收到乙机回送“数据发送正确(00H)”的应答信号,则可以发送下一个数据;若是“数据不正确(FFH)”的应答信号,则重新发送原来的数据,直至发送正确为止。(4)乙机:接收甲机发送的数据并逐一写入片内RAM50H70H。每接收一帧信息后进行奇偶校验,并与接收到的第9位数据RB8对比;对比正确则向甲机回复“数据正确(00H)”的应答信号,否则回复“数据不正确(FFH)”的应答信号,直至接收完所有数据。,6.6 串行口应用举例,单片机原理,甲机发送参考程序如下:ORG 0100HMOV TMOD,#20H;设定时器T1工作在方式2MOV TH1,#0FAH;设定时器T1自动重装载值MOV TL1,#0FAH;设定时器T1计数初值MOV PCON,#80H;设SMOD=1MOV SCON,#0D0H;串口设定为方式3,允许接收SETB TR1;启动定时器T1MOV R1,#50H;设数据块地址指针MOV R2,#20H;设数据块长度,6.6 串行口应用举例,单片机原理,EX723_LP1:MOVX A,R1;取数据MOV C,PMOV TB8,C;奇偶校验位送入TB8MOV SBUF,A;启动发送JNB TI,$;等待发送,TI=1发送完毕CLR TI;一帧发送完毕,清零TIJNB RI,$;等待接收CLR RI;一帧接收完毕,清零RIMOV A,SBUF;接收数据送入A中JNZ EX723_LP1;不为“00H”,重发INC R1;修改地址指针DJNZ R2,EX723_LP1;循环发送RET END,6.6 串行口应用举例,单片机原理,乙机接收主程序如下:MOV TMOD,#20H;设定时器T1工作在方式2 MOV TH1,#0FAH;设定时器T1自动重装载值 MOV TL1,#0FAH;设定时器T1计数初值 MOV PCON,#80H;设SMOD=1 MOV SCON,#0D0H;串口设定为方式3,允许接收 SETB TR1;启动定时器T1 MOV R1,#50H;设数据块地址指针 MOV R2,#20H;设数据块长度EX723_LP2:JBC RI,RECIV;等待接收AJMP EX723_LP2RECIV:MOV A,SBUF;读入接收数据JB PSW.0,LZ;奇偶位为1,转移,6.6 串行口应用举例,单片机原理,JB RB8,ERR;PSW.00,RB81,出错 SJMP RIG;正确,转RIGLZ:JNB RB8,ERR;PSW.01,RB80,出错RIG:MOV R1,A;存放数据 MOV SBUF,#00H;发送数据正确标志 JNB TI,$;等待发送 CLR TI;发送完毕,清TI INC R1 DJNZ R2,EX723_LP2;继续接收 RET;返回ERR:MOV SBUF,#0FFH;发送数据错误标志 JNB TI,$;等待发送 CLR TI;发送完毕,清TI RET;返回,6.6 串行口应用举例,