当前位置:
文档之家› 9单片机原理与应用(同济出版社魏鸿磊):第九章 串行通信技术
9单片机原理与应用(同济出版社魏鸿磊):第九章 串行通信技术
TB8位,与数据一起发送出去供接收方校验。默认是偶校验,如果需要
改成奇校验,则在发送方需要将P值取反后再装入TB8,在接收方校验
时需将RB8中的值取反再与P值进行比较。
DATE: 2019/6/25
PAGE: 22
四、串行通信接口的编程
例9-1 下图是单片机8051与8位并入串出接口芯片74LS165的接口电路 。使用串行口工作方式0,编程实现单片机从74LS165读取8位开关状态 ,并送P1口上的八个LED显示。
DATE: 2019/6/25
PAGE: 17
三、串行通信接口的控制
串行口工作方式1 串行口工作方式1为8位异步通信方式,数据帧格式为1位起始位
、8位数据位、1位停止位,共10位。波特率由定时器T1溢出率 决定。 方式1发送
CPU将待发送的数据写入SBUF后,单片机自动将数据位从TXD 引脚输出。当数据发送完毕后,硬件自动使TI置1。启动下一次 发送前,TI位必须软件清0。 方式1接收
DATE: 2019/6/25
PAGE: 7
一、串行通信概述
波特率
波特率是数据传输速率,指每秒钟传送二进制位的个数, 单位为bit/s。
波特率是串行通信的重要指标,波特率越高,串口数据传 输速度越快。
假如设定波特率为9600bit/s,而数据帧由1位起始位、8 位数据位、1位停止位构成,则串口每秒钟最多传送 9600/(1+8+1)=960个字节。
串行通信接口的编程 在使用串口收发数据之前,需要对串口相关的特殊功能寄存器进
行初始化设置,其内容包括以下两个方面: 1、初始化: (1)串口工作模式SCON设置
需要设置SM0和SM1选择串行口工作方式,多机通信时还需要设置 SM2。此外,如果需要串口接收数据,则必须设置REN为1。 (2)设置波特率
之外与方式2相同。 方式1和方式3下波特率的设定
方式1和方式3下,波特率是可变的,由定时器T1的溢出率控制。定 时器T1用作波特率发生器时,通常选择工作方式2,即8位初值自动重 装载方式。常用的波特率与定时器T1的初值关系见下表:
DATE: 2019/6/25
PAGE: 20
四、串行通信接口的编程
DATE: 2019/6/25
PAGE: 23
四、串行通信接口的编程
#include<reg51.h>
sbit P37=P3^7;
int main(void)
{ EA=1; //开总中断 ES=1;//开串行中断 SCON=0x10;//设置串口工作于方式0,允许接收数据
while(1)
{ P37=0; //锁存数据 P37=1; //允许传送数据 REN=1; //允许接收 while(REN);//等待传送完成
串行通信方式指将数据拆分成多个二进制位,逐一的在同 一条数据线上输出。串行通信虽然传输速度较慢,效率较 低,但所需的数据线少、硬件电路简单、抗干扰能力强, 且适用于远距离数据传输。
DATE: 2019/6/25
PAGE: 3
一、串行通信概述
串行通信有同步通信和异步通信两种基本的通信方式。 (1)同步通信 同步通信是一种连续的串行传输数据的通信方式,待 发送的若干个字符数据构成一个数据块,在该数据块前部 添加1~2个同步字符,在数据块的末尾添加校验信息,以 此种方式构成数据帧,以数据帧为单位进行串行通信。
RB8:在方式2和方式3下,该位为接收数据的第9位,可以作为奇偶校 验位。
TI:串行口发送中断标志位。在方式0下,发送完8位数据后由硬件置1 ,并申请中断;在其他方式下,在停止位开始发送之前由硬件置1,并 申请中断。TI必须用软件清0。
RI:串行口接收中断标志位。在方式0下,接收完8位数据后由硬件置1 ;在其他方式下,在接收到停止位时由硬件置1。RI必须用软件清0。
通信时,发送方首先发送同步字符,之后紧跟数据块 ,最后是校验字符。接收方在检测到同步字符后,开始逐 个接收数据,直到把所有数据接收完毕,最后进行校验。
DATE: 2019/6/25
PAGE: 4
一、串行通信概述
(2)异步通信 每个字符数据被封装成帧,以帧的形式发送。每一帧
由四部分构成,分别是起始位、数据位、校验位和停止位 。起始位是数据开始传送的标志,用逻辑0表示;数据位 紧跟起始位,通常是5~8位二进制位;校验位用于校验数 据位是否发送正确,可以选择奇校验、偶校验或者不使用 校验位。帧和帧之间可以连续,或者加入任意的空闲位, 空闲位用逻辑1表示。
串行通信接口的结构
发送缓冲器SBUF和接收缓冲器SBUF共用同一个地址0x99,发送SBUF 只能写入而不能读出,接收SBUF只能读出不能写入。
CPU将数据写入SBUF中便启动发送,数据送引脚TXD被外设接收。 数据从引脚RXD上接入到数据移位寄存器中,一帧接收完毕后再被
自动送入SBUF中,CPU读取SBUF,便完成一次串口接收。
当SMOD=1时,方式1、2、3的波特率加倍; 当SMOD=0时,方式1、2、3的波特率不变。
DATE: 2019/6/25
PAGE: 16
三、串行通信接口的控制
串行口工作方式 1.串行口工作方式0
方式0下,为8位同步移位寄存器方式。波特率固定为fosc/12, 以8位数据为一帧,不设起始位和停止位。 方式0发送
DATE: 2019/6/25
PAGE: 14
三、串行通信接口的控制
REN:串行口接收允许控制位。REN=1时,允许串行口接收数据;REN=0 时,禁止串行口接收数据。
TB8:在方式2和方式3下,该位为发送数据的第9位,根据需要由软件 置1或清0,该位可用作奇偶校验位。在方式0和方式1下不使用。
工作方式,如下表所示,其中fosc为晶振频率。
DATE: 2019/6/25
PAGE: 13
三、串行通信接口的控制
SM2:多机通信控制位,主要用于工作方式2和工作方式3。 当串行口在多机通信模式下接收数据时: 当SM2=0时,将接收到的8位数据送入到SBUF中,并产生 中断请求。 若设置SM2=1,且RB8为0时,不接收主机发来的数据。 如果不是多机通信,一般将SM2设为0。
方式2的接收过程与方式1类似,前8位数据被移入到SBUF中 ,第9位数据被送入到SCON的RB8位,当数据接收完毕后,RI自 动置1,读取SBUF后必须将RI清0才可以进行下次接收。
DATE: 2019/6/25
PAGE: 19
三、串行通信接口的控制
串行口工作方式3 串行口工作方式3的波特率可变,取决于定时器T1的溢出率,除此
DATE: 2019/6/25
PAGE: 12
三、串行通信接口的控制
串行控制寄存器SCON
SCON用于设定串口通信的工作方式、接收/发送控制以及串口工作 状态指示。SCON的字节地址为0x98,可以进行位寻址,格式如下:
SCON各位的意义如下: SM0、SM1:串行通信工作方式选择位。SM0和SM1共4种组合,对应4中
GND
TXD RXD RTS 乙 CTS 机 DSR DTR GND
PAGE: 9
一、串行通信概述
单片机与PC机串口连接:
由于RS-232C和单片机的电气标准不统一,当单片机通过串口方式 与PC机通信时通常采用MAX3232等专用芯片实现两种电平的转换,连接 方式如下 :
DATE: 2019/6/25
为奇数时,TB8=1/ RB8=1;
奇校验:发送/接收的8个数据位的1的个数为奇数时,TB8=0/RB8=0; 为偶数时,TB8=1/ RB8=1;
用软件产生奇偶校验位是根据51系列单片机的状态寄存器PSW的定义: 当累加器ACC中为1的个数为奇数时,P=1,否则P=0,因此在校验之前需
要先将数据送入累加器ACC计算1的个数,以决定P值,然后将P值装入
DATE: 2019/6/25
PAGE: 15
三、串行通信接口的控制
电源管理寄存器PCON
PCON用来管理单片机的电源部分,包括上电复位检测、掉 电模式、空闲模式等,PCON不可以位寻址,单片机复位时 PCON全部被清0。PCON中与串口通信有关的是最高位D7, 用于设置串行口波特率是否加倍,如下图所示。
DATE: 2019/6/25
PAGE: 5
一、串行通信概述
(2)异步通信与同步通信的区别 同步通信必须在同步时钟的控制下发送和接收,每发送一
个时钟脉冲实现一位数据的发送和接收,即发送和接收之 间是同步进行的; 异步通信则不需要同步时钟,而是根据起始位和停止位判 定一帧的开始和结束,即发送和接收之间是异步进行的。
对于方式0和2,不需要设置波特率。 对于方式1和方式3,波特率设置通过定时器T1的工作方式2,并查表 设置T1的初值TH1和TL1实现。 (3)如需中断,开总中断和串行中断
DATE: 2019/6/25
PAGE: 21
四、串行通信接口的编程
2、奇偶校验:
对于方式2和方式3,需要有奇偶校验。 偶校验:发送/接收的8个数据位的1的个数为偶数时,TB8=0/ RB8=0;
起始位、8位数据位、1位控制/校验位、1位停止位,共11位。 波特率为fosc/32或fosc/64。 方式2发送
将要发送的数据写入到SBUF,并通过SCON中的TB8设置数据 的奇偶校验。数据位从TXD引脚输出。当数据发送完毕后,TI自 动置1。启动下一次发送前,TI位必须清0。 方式2接收
将待发送的数据写入到SBUF后,单片机自动将数据从RXD引脚 输出,同步信号通过TXD引脚输出。发送数据完毕后,TI位被硬件 自动置1。启动下一次发送前,TI位必须通过软件清0。 方式0接收
在REN=1和RI=0的前提下允许串行口输入。串行数据通过RXD引 脚一位一位接收,并被移入到SBUF中,同步信号通过TXD引脚输出 。当8位数据接收完毕后,RI被硬件自动置1,CPU读取SBUF后必须 通过软件将RI清0才可以进行下次接收。