(玩电子) 电子技术学习与研究
当前位置单片机教程网 >> 基础教程 >> 浏览文章

21课:单片机串行口介绍

作者:佚名   来源:本站原创   点击数:x  更新时间2007年08月14日   字体

介绍串行口是单片机与外界进行信息交换的工具

8051单片机的通信方式有两种

并行通信:数据的各位同时发送或接收  串行通信:数据一位一位次序发送或接收参看下图

串行通信的方式

异步通信它用一个起始位表示字符的开始用停止位表示字符的结束其每帧的格式如下

在一帧格式中先是一个起始位0然后是8个数据位规定低位在前高位在后接下来是奇偶校验位能省略最后是停止位1用这种格式表示字符则字符能一个接一个地传送

在异步通信中CPU与外设之间必须有两项规定即字符格式和波特省字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义原则上字符格式能由通信的双方自由制定但从通用方便的角度出发一般还是使用一些标准为好如采用ASCII标准

波特始数据传送的速率其定义是每秒钟传送的二进制数的位数例如数据传送的速率是120字符/s而每个字符如上述规定包含10数位则传送波特率为1200波特

同步通信在同步通信中每个字符要用起始位和停止位作为字符开始和结束的标志占用了时间所以在数据块传递时为了提高速度常去掉这些标志采用同步传送由于数据块传递开始要用同步字符来指示同时要求由时钟来实现发送端与接收端之间的同步故硬件较复杂

通信方向在串行通信中把通信接口只能发送或接收的单向传送办法叫单工传送而把数据在甲乙两机之间的双向传递称之为双工传送在双工传送方式中又分为半双工传送和全双工传送半双工传送是两机之间不能同时进行发送和接收我时该只能发或者只能收信息

28051单片机的串行接口结构

8051单片机串行接口是一个可编程的全双工串行通信接口它可用作异步通信方式UART与串行传送信息的外部设备相连接或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式使用TTL或CMOS移位寄存器来扩充I/O口

8051单片机通过管脚RXDP3.0串行数据接收端和管脚TXDP3.1串行数据发送端与外界通信SBUF是串行口缓冲寄存器包括发送寄存器和接收寄存器它们有相同名字和地址空间但换出现冲突因为它们两个一个只能被CPU读出数据一个只能被CPU写入数据

串行口的控制与状态寄存器

串行口控制寄存器SCON

它用于定义串行口的工作方式及实施接收和发送控制字节地址为98H其各位定义如下表

D7
D6
D5
D4
D3
D2
D1
D0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI

SM0SM1串行口工作方式选择位其定义如下

SM0SM1
工作方式
功能描述
波特率
0 0
方式0
8位移位寄存器
Fosc/12
0 1
方式1
10位UART
可变
1 0
方式2
11位UART
Fosc/64或fosc/32
1 1
方式3
11位UART
可变

其中fosc为晶体震荡器频率

SM2多机通信控制位在方式0时SM2一定要等于0在方式1中当SM2=1则只有接收接行停止位时RI才置1在方式2或方式3当SM2=1且接收到的第九位数据RB8=0时RI才置1

REN接收允许控制位由软件置位以允许接收又由软件清0来禁止接收

TB8: 是要发送数据的第9位在方式2或方式3中要发送的第9位数据根据需要由软件置1或清0例如可约定作为奇偶校验位或在多机通信中作为区别地址帧或数据帧的标志位

RB8接收到的数据的第9位在方式0中不使用RB8在方式1中若SM2=0RB8为接收到的停止位在方式2或方式3中RB8为接收到的第9位数据

TI发送中断标志在方式0中第8位发送结束时由硬件置位在其它方式的发送停止位前由硬件置位TI置位既表示一帧信息发送结束同时也是申请中断可根据需要用软件查询的办法获得数据已发送完系信息或用中系方式来发送下一个数据TI必须用软件清0

RI接收中断标志位在方式0当接收完第8位数据后由硬件置位在其它方式中在接收到停止位的中间时刻由硬件置位例外情况见于SM2的得RI置位表示一帧数据接收完毕可用查询的办法获知或者用中系办法获知RI也必须用软件清0

特殊功能寄存器PCON

PCON是为了在CHMOS的80C51单片机上实现电源控制而附加的其中最高位是SMOD

串行口的工作方式

8051单片机的全双工串行口可编程为4种工作方式现分述如下

方式0为移位寄存器输入/输出方式可外接移位寄存器以扩展I/O口也能外接同步输入/输出设备8位串行数据者是从RXD输入或输出TXD用来输出同步脉冲

输出 串行数据从RXD管脚输出TXD管脚输出移位脉冲CPU将数据写入发送寄存器时立即启动发送将8位数据以fos/12的固定波特率从RXD输出低位在前高位在后发送完一帧数据后发送中断标志TI由硬件置位

输入 当串行口以方式0接收时先置位允许接收控制位REN此时RXD为串行数据输入端TXD仍为同步脉冲移位输出端当RI=0停REN=1同时满足时开始接收当接收到第8位数据时将数据移入接收寄存器并由硬件置位RI

下面两图分别是方式0扩故出和输入的接线图


<单片机串行口接线图>

方式1为波特率可变的10位异步通信接口方式发送或接收一帧信息包括1个起始位08个数据位和1个停止位1

输出 当CPU执行一条指令将数据写入发送缓冲SBUF时就启动发送串行数据从TXD管脚输出发送完一帧数据后就由硬件置位TI

输入 在REN=1时串行口采样RXD管脚当采样到1至0的跳变时确认是开始位0就开始接收一帧数据只有当RI=0且停止位为1或者SM2=0时停止位才进入RB88位数据才能进入接收寄存器并由硬件置位中断标志RI不然信息丢失所以在方式1接收时应先用软件清零RI和SM2标志

方式2

方式月为固定波特实11位UART方式它比方式1增加了一位可程控为1或0的第9位数据

输出: 发送的串行数据由TXD端输出一帧信息为11位附加的第9位来自SCON寄存器的TB8位用软件置位或复位它可作为多机通信中地址/数据信息的标志位也能作为数据的奇偶校验位当CPU执行一条数据写入SUBF的指令时就启动发送器发送发送一帧信息后置位中断标志TI

输入: 在REN=1时串行口采样RXD管脚当采样到1至0的跳变时确认是开始位0就开始接收一帧数据在接收到附加的第9位数据后当RI=0或者SM2=0时第9位数据才进入RB88位数据才能进入接收寄存器并由硬件置位中断标志RI不然信息丢失且不置位RI再过一位时间后还上述条件时否满足接收电路即行复位并重新检测RXD上从1到0的跳变

工作方式3

方式3为波特率可变的11位UART方式除波特率外其余与方式2相同

波特率选择

如前所述在串行通信中收发双方的数据传送率波特率要有一定的约定在8051串行口的四种工作方式中方式0和2的波特率是固定的而方式1和3的波特率是可变的由定时器T1的溢出率控制

方式0

方式0的波特率固定为主振频实1/12

方式2

方式2的波特率由PCON中的选择位SMOD来决定可由下式表示

波特率=2的SMOD次方除以64再乘一个fosc也就是当SMOD=1时波特率为1/32fosc当SMOD=0时波特率为1/64fosc

3方式1和方式3

定时器T1作为波特率发生器其公式如下

波特率=定时器T1溢出率

T1溢出率= T1计数率/产生溢出所需的周期数

式中T1计数率取决于它工作在定时器状态还是计数器状态当工作于定时器状态时T1计数率为fosc/12;当工作于计数器状态时T1计数率为外部输入频率此频率应小于fosc/24产生溢出所需周期与定时器T1的工作方式T1的预置值有关

定时器T1工作于方式0溢出所需周期数=8192-x

定时器T1工作于方式1溢出所需周期数=65536-x

定时器T1工作于方式2溢出所需周期数=256-x

因为方式2为自动重装入初值的8位定时器/计数器模式所以用它来做波特率发生器最恰当

当时钟频率选用11.0592MHZ时取易获得标准的波特率所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个览

下表列出了定时器T1工作于方式2常用波特始初值

常用波特率
Fosc(MHZ)
SMOD
TH1初值
19200
11.0592
1
FDH
9600
11.0592
0
FDH
4800
11.0592
0
FAH
2400
11.0592
0
F4h
1200
11.0592
0
E8h
 

发表评论告诉好友收藏此文关闭窗口

文章评论

ձһhƬձƵ ձƵɫwww ձƵ:ɫ