当前位置:文档之家› 第六章单片机串行口及应用

第六章单片机串行口及应用

微机原理及应用第六章单片机串行口及应用P2 6.1 MCS-51 单片机串行接口6.1.1 基本概念1.串行通信与并行通信并行通信:数据的各位同时进行传送的通信方式。

并行通信的优点是传送速度快,缺点是需要的传输线多,不适宜远距离通信。

并行通信通过并行口实现。

串行通信:数据逐位按顺序传送的通信方式。

串行通信的优点是只需要一对传输线,特别适用于远距离通信。

其缺点是传送速度低。

串行通信通过串行口实现。

2.异步通信和同步通信(1)异步通信在异步通信中,数据以字符为单位进行传送,一个字符也叫一帧信息。

每帧数据数用一起始位(低电平)表示传送字符的开始,接着由数据的低位开始逐位传送。

最后以一个停止位(高电平)表示该字符结束。

异步通信字符帧的格式 无空闲位字符帧:带空闲位字符帧:P3D70/1D1D0D1D2D3D4D5D6D70/1D011停止位起始位停止位起始位第n-1字符第n+1字符第n 字符帧8个数据位校验位停止位起始位D0第n+1字符D0D1D2D3D4D5D6D70/111起始位第n-1字符第n 字符帧8个数据位111空闲位空闲位校验位(2) 同步通信同步通信是一种连续串行传送数据的通信方式。

每次通信连读传送若干个数据字符。

在数据传送前,发送方先发送1个或2个同步符作起始标志,接收方不断采样传输线,确认接收到同步符后便开始接收后面的数据。

数据紧跟同步符之后,个数不受限制,每个数据不需起始位和停止位,数据之间无间隙。

所以同步通信的传输速率要比异步通信高,可达56000bps。

为使发送方和接收方的时钟保持严格同步,要求发送方除发送数据外,还要同时发送时钟脉冲到接收端。

同步字符1同步字符2数据1数据2数据3数据……同步字符数据1数据2数据3数据……3. 串行通信的传送方式串行通信的传送方式有三种。

(1)单工方式:只允许数据向一个方向传送。

(2)半双工方式:允许数据双向传送,但同一时刻只能一方发送,另一方接收。

(3)全双工方式:允许数据同时双向传送,全双工方式其发送和接收是各自独立的通道。

发送器接收器A 站B 站发送器发送器接收器接收器A 站B 站发送器接收器接收器发送器A 站B 站4. 波特率和发送/接收时钟(1)波特率波特率的定义为每秒钟传送二进制代码的位数。

单位是位/秒(bps)。

波特率是串行通信的重要指标,用于表征数据的传输速度。

每位的传送时间为波特率的倒数。

即Td=1/波特率。

(2)发送/接收时钟在异步传送方式中,发送/接收时钟频率为波特率的n倍,n取16或64,通常取16。

即每位的传送时间Td=nTc,(Tc为发送/接收时钟周期)。

也就是每传送1位需要16个时钟周期。

这样做目的是更准确地给数据位定位。

收发双方传送波特率必须保持一致,否则传送过程就会发生错位。

6.1.2 串行口结构串行口主要由发送缓冲器、发送控制器、输出控制门、接收缓冲器,接收控制器、输入侈位寄存器等组成。

内部数据总线发送端口接收端口波特率发生器≥1串行口中断写SBUF读SBUFSBUF (发送)发送控制器接收控制器SBUF (接收)接收移位寄存器TXDP3.1RXDP3.0DBDBTIRIP7P8 6.1.3 串行口控制1.串行口控制寄存器SCONSCON 格式:D7D0SM0SM1SM2REN TB8RB8TI RI(98H)各位的含义和下:SM0、SM1:串行口工作方式选择位。

SM0 SM10 0方式0,同步移位寄存器方式,传送波特率为fosc/12。

0 1 方式1,10位异步收发,传送波特率可变。

1 0 方式2,11位异步收发,传送波特率为fosc/32或fosc/64。

1 1 方式3,11位异步收发,传送波特率可变。

P9 SCON (续)SM2:多机通信控制位。

单片机串行口的4种工作方式中,只有方式2或方式3(11位异步通信)才可用于多机通信。

在进行多机通信时,若接收机的SM2置1,则它只能接收地址帧,而不能接收数据帧。

只有SM2=0时才能接收数据帧。

有关通信原理将在后面介绍。

REN:允许接收控制位。

REN=1时,允许串行口接收数据。

REN=0时,禁止串行口接收数据。

TB8:是方式2和方式3发送数据的第9位。

发送数据前,预先将第9位写入TB8中。

RB8:是方式2和方式3接收数据的第9位。

接收数据时,将接收到的数据第9位存入RB8中。

TI:发送中断标志位。

发送完一帧数据后,由硬件置位TI,同时向CPU发出中断请求。

RI:接收中断标志位。

当一帧数据接收完并能进入输入SBUF,则置位RI,同时向CPU发出中断请求。

2. 电源控制寄存器PCON PCON 格式:PCON 中只有D7位SMOD 与串行口有关,SMOD 称为串行口波特率倍率控制位,用于控制串行口工作于方式1、2、3时的波特率。

单片机复位时,SMOD =0。

D7D0(87H)SMODGF1GF2PDIDLD3P10P11 6.2 串行口工作方式及波特率设置6.2.1串行口的工作方式1.方式0(SM0=0,SM1=0)方式0亦称为同步移位寄存器方式,常用作扩展并行I/O口。

特点:①一帧数据为8位,无起始位和停止位。

②发送和接收数据均通过RXD引脚进行。

③TXD引脚发送同步移位脉冲,传送波特率为fosc/12。

(1)发送:CPU执行一条写SBUF指令后,即开始发送数据,从低位到高位逐位发送。

当一帧数据发送完后,由硬件自动置TI=1,并发出中断请求。

要继续发送数据必须用指令将TI清0,再执行写SBUF指令。

(2)接收:在RI=0条件下,将REN置1便启动接收器接收。

当一帧数据接收完后,由硬件置RI=1,并发出中断请求。

CPU响应中断后,服务程序将接收SBUF的数据读入累加器A中,并用指令将RI置0,以便接收下一帧数据。

P12 2. 方式1 (SM0=0,SM1=1)特点:①一帧数据为10位,包括一个起始位和一个停止位。

②通过TXD发送数据,通过RXD接收数据。

③传送波特率可变。

(1)发送:CPU执行一条写SBUF指令后,即开始发送数据,数据从SBUF由低到高逐位经TXD发送出去。

一帧数据发送完后,由硬件置TI=1,并向CPU发中断请求。

要继续发送数据,同样要用指令将TI清0。

(2)接收:将REN置1后,接收器便开始工作,先以波特率16倍的频率采样RXD上的电平,若发现有负跳变并确认是起始位,则启动接收器接收数据。

当一帧数据接收完后,若以下两个条件同时满足:①RI=0;②SM2=0或接收到的停止位为1。

则所接收到的8位数装入SBUF,停止位装入RB8中,并置RI=1,向CPU发出中断法请求。

若条件不满足,则接收到的数据不能进入SBUF而自动丢失。

P13 3. 方式2和方式3特点:①一帧数据为11位,包括一个起始位和一个停止位。

②数据由TXD端发送,RXD端接收。

③数据的第9位用于奇偶校验或地址/数据识别(可实现多机通信)。

发送时,第9位先存入TB8,接收时,接收到的第9位存入RB8中。

④传送波特率:方式2固定为fosc/32或fosc/64;方式3波特率可变,由T1的溢出率和SMOD决定。

(1)发送:CPU执行一条写SBUF指令后,即启动发送器发送数据,发送的第9位由TB8提供。

一帧数据发送完后,由硬件置TI=1,并向CPU 发出中断请求。

(2)接收:将REN置1后,接收器开始检测RXD的电平,当发现有负跳变并确认为起始位后,即启动接收器接收数据。

当接收到的第9位数据进入移位寄存器后,若满足以下条件:①RI=0,SM2=0。

或②RI=0,SM2=1且第9位D8=1,则将8位数据装入SBUF,第9位装入RB8中,并置RI=1,向CPU发出中断请求。

若条件不满足,则接收的数据不能进入SBUF而自动丢失。

6.2.2 波特率设置1. 方式0的波特率:(固定)波特率= fosc/122.方式2的波特率:(固定为两种频率)波特率= 2SMOD /64 ×fosc当SMOD = 0时,波特率= fosc/64当SMOD = 1时,波特率= fosc/323.方式1和方式3的波特率:(可变)方式1、3波特率= 2SMOD /32×T1的溢出率T1溢出率= = = 方式1、3波特率= 2SMOD /32×= 2SMOD ×fosc / [32×12(2n –x)]在实际应用中T1常设为方式2即上式中n = 8。

1T1的溢出周期1T1的定时时间(2n –X)×12/fosc 1(2n –X)×12/fosc1P14P15 【例6-1】设8051的fosc = 12MHz,串行口工作方式1,串行通信波特率为4800bps,T1设为方式2,求T1初值并编写串行口初始化程序。

设SMOD = 1,则T1的初值为:X = 28-21×12×106/ (32×12×4800)= 242.98≈243 = F3H定时器T1和串行口的初始化程序如下:MOV TMOD , #20H ;T1设为定时方式2MOV TL1 , #0F3H ;置定时器初值MOV TH1 , #0F3HSETB TR1 ;启动T1MOV PCON , #80H ;SMOD = 1MOV SCON , #40H ;串行口设为方1式P16 SMOD 的取值对波特率误差的影响如上例SMOD = 1时,计算出来的波特率和误差如下:波特率= 2SMOD×fosc/ [32×12(28–x)]= {21×12×106/ [32×12(256-243)]}= 4807.69bps 波特率误差= (4807.69-4800)/4800 = 0.16%若SMOD = 0,T1的初值为:X = 28-20×12×106/(32×12×4800) = 249.49≈249则计算出来的波特率和误差如下:波特率= 2SMOD×fosc/ [32×12(28–x)]= {20×12×106/ [32×12(256-249)]}= 4464.29bps 波特率误差= (4464.29-4800)/4800 = -6.99%由上可知应选择使波特率误差小的SMOD值。

P102,表6-2给出常用波特率及其设置方法。

6.3 串行口应用及实例6.3.1串行口方式0的应用串行口方式0通常用于扩展并行I/O 口,通过外接“串入并出”或“并入串出”移位寄存器,实现扩展并行输出口或并行输入口。

【例6-2】8051外接CD4094扩展8位并行输出口如图所示,编一程序,使发光管从右到左以一定速度循环轮流点亮。

相关主题