第八章串行通信
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
main() { SCON=0; ES=1; EA=1; SBUF=temp; while(1); } void ser()interrupt 4 { TI=0; delay(300); temp=_crol_(temp,1); SBUF=temp; }
2、方式0数据接收
REN=1 RI=0 RXD(数据输入) D0 D1 D2 D3 D4 D5 D6 D7
(二)串行工作方式1
方式1是以10位为一帧的异步串行通信方式。其帧格 式为1个起始位、8个数据位和1个停止位。如下图所示。
起始位 D 0
D1
D2
D3
D4
D5
D6
D 7 停止位
方式1的波特率由定时器T1的溢出率决定.
(二)串行工作方式1
1. 数据发送 数据写入 SBUF 后,开始发送,此时由硬件加入起 始位和停止位,构成一帧数据,由TXD串行输出。输出 一帧数据后,TXD保持在高电平状态下,并将TI置位, 通知CPU可以进行下一个字符的发送。
89C51串行通信的方式选择、接收和发送控制以及 串行口的状态标志等均由特殊功能寄存器SCON控制和 指示,其控制字格式如下图所示
串行口控制寄存器SCON
SCON中各位说明如下: (1) SM0 、SM1——串行口工作方式选择位 其状态组合和对应工作方式为:
(1) SM2----多机通信控制位,主要用于方式2和方式3。
单片机串行口及串行通信技术
本章主要介绍串行通信概念及51系列单片机 的串行口问题,将具体介绍以下内容: 串行通信基础----基本概念 51单片机串行口----串行口结构、串行口的控制 寄存器、串行口的工作方式、应用举例。
§8.1 串行通信基础
一、 数据通信
计算机与外界的信息交换称为通信。 通信方式有:并行通信和串行通信。
89C51通过引脚RXD(P3.0,串行数据接收端) 和引脚TXD(P3.1,串行数据发送端)与外界进行通 信。如下图所示:
一、结构
图中有两个物理独立的接收、发送缓冲器SBUF, 它们占用同一低值99H,可同时发送、接收数据。 发送缓冲器只能写入,不能读出;接收缓冲器只能 读出,不能写入。 串行发送与接收的速率与移位时钟同步。89C51用 定时器T1作为串行通信的波特率发生器,T1溢出率 经2分频(或不分频)后又经16分频作为串行发送 或接收的移位脉冲。移位脉冲的速率即是波特率。
2. 电源控制寄存器(PCON)
PCON不可位寻址,字节地址为87H。它主要是为 CHMOS型单片机80C51的电源控制而设置的专用寄存 器。其内容如下:
三、51单片机串行通信工作方式
串行口的工作方式由 SM0 和 SM1 确定,编码和功 能如下表所示
SM0 0 SM1 0 方式 方式0 功能说明 移位寄存器 波特率 fosc/12
例:将8位开关的状态能过发光二极管反映出来
#include <at89x51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int void delay(uint xms) {uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);} main() { SCON=0x10; while(1) { P3_6=1; while(P3_6); P3_5=0; P3_5=1; while(!RI); RI=0; P1=SBUF; delay(200); } }
(2) REN----允许串行接收位。由软件置REN=1,则启
动串行口接收数据;若软件置REN=0,则禁止接收。
(4) TB8——发送第9位数据
在方式2、3时,TB8的内容是要发送的第9位数据, 其值由用户通过软件来设置。可以用作数据的奇偶校验 位,或在多机通信中,作为地址帧/数据帧的标志位。 在方式0和方式1中,该位未用。 (5) RB8——接收的第9位数据 在方式2、3时,RB8是接收的第9位数据。作为奇 偶校验位或地址帧/数据帧的标志位。 在方式1时,若SM2=0, RB8是接收的停止位. 在方式0时,不使用RB8.
停止位: 为逻辑“1”高电平,可是1位、1.5位或2位的高电平, 表示一帧字符传送完毕。接收设备收到停止位之后, 通信线路上便又恢复逻辑1状态,直至下一个字符数据 的起始位到来。
3.波特率(数据传送速率) 串行通信的速率用波特率来表示。 波特率:一秒钟传送数据位的个数。每秒钟传送
一个数据位就是 1 波特。即: 1 波特= 1bps (位 / 秒) 。 每一位代码的传送时间Td为波特率的倒数。
(一)串行通信的数据传输方式
(a)单工方式
(b)半双工方式
(c)全双工方式
(二)串行通信方式
两种基本的通信方式:异步通信和同步通信。 1. 同步通信 同步通信中,在数据开始传送前用同步字符来指 示(常约定1个—2个),并由时钟来实现发送端和接 收端同步,即检测到规定的同步字符后,就连续按顺 序传送数据,直到通信告一段落。 同步传送时,字符与字符之间没有间隙,也不用 起始位和停止位,仅在数据块开始时用同步字符 SYNC来指示,其数据格式如下图所示。
当接收机的SM2=1时可以利用收到的RB8来控制 是否激活RI(RB8=0时不激活RI,收到的信息丢弃; RB8=1时收到的数据进入SBUF,并激活RI,进而在 中断服务中将数据从SBUF读走)。当SM2=0时,不 论收到的RB8为0和1,均可以使收到的数据进入 SBUF,并激活RI(即此时RB8不具有控制RI激活的 功能)。通过控制SM2,可以实现多机通信。 在方式0时,SM2必须是0。在方式1时,若 SM2=1,则只有接收到有效停止位时,RI才置1。
对于发送缓冲器,因为发送时CPU是主动的,不会产 生重叠错误,一般不需要用双缓冲器结构来保持最 大传送速率。
二、串行口控制字及控Baidu Nhomakorabea寄存器
89C51串行口是可编程接口,对它初始化编程只 用两个控制字分别写入特殊功能寄存器SCON(98H) 和电源控制寄存器PCON(87H)中即可。
1. 串行口控制寄存器SCON(98H)
(a)并行传输
(b)串行传输
两种通信方式
二、 串行通信
串行数据通信要解决两个关键技术问题, 一个是数据传送,另一个是数据转换。所谓数 据传送就是指数据以什么方式进行传送。所谓 数据转换就是指单片机在接受数据时,如何把 接收到的串行数据转化为并行数据,单片机在 发送数据时,如何把并行数据转换为串行数据 进行发送。
(三)串←→并转换
在接收数据时,来自通信线路的串行数据被压入 移位寄存器,满8位后并行送到单片机内部。 如下图 所示。
(三)串←→并转换
在串行通信控制电路中,串--并、并--串转换
逻辑被集成在串行异步通信控制器芯片中。 51单片机的串行口和IBM-PC相同。
§8.2 51单片机串行口及应用
同步通信数据格式
2. 异步通信
单片机的串行通信一般使用异步串行通信。
在异步通信中,数据通常以字符(或者字节)
为单位组成字符帧,一帧一帧传送。
异步是指发送端和接收端使用的不是同一个
时钟。
字符帧的帧格式
字符帧由四部分组成:起始位、数据位、奇偶校 验位、停止位。如下图所示
起始位(0):
位于字符帧的开头,只占一位,表示发送端开始 发送一帧数据,用于通知接收设备一个待接收的字符 开始到达。
从图中可看出,接收器是双缓冲结构,在前一个字节 被从接收缓冲器SBUF读出之前,第二个字节即开始 被接收(串行输入至移位寄存器),但是,在第二个 字节接收完毕而前一个字节CPU未读取时,会丢失前 一个字节。 串行口的发送和接收都是以特殊功能寄存器SBUF的 名义进行读或写的。当向SBUF发“写”命令时(执 行“MOV SBUF,A”指令),即是向发送缓冲器 SBUF装载并开始由TXD引脚向外发送一帧数据,发 送完便使发送中断标志位TI=1。
起始位的作用是设备同步,通信双方必须在传送 数据位协调同步。
数据位:
紧跟起始位后,可取5、6、7、8位,低位在前, 高位在后。 89C51串行口采用8位或9位数据传送。这 些数据位被接收到移位寄存器中,构成传送数据字符。 在字符数据传送过程中,数据位从最低有效位开始发 送,依次顺序在接收设备中被转换为并行数据。
0
1 1
1
0 1
方式1
方式2 方式3
8位UART
9位UART 9位UART
可变
fosc/64 或者 fosc/32 可变
方式0和方式2的波特率是固定的,而方式1和方 式3的波特率是可变的,由T1的溢出率决定。
(一)串行工作方式0
方式0为同步移位寄存器输入/输出方式,不
适用于两个51单片机之间的直接数据通信, 常用于扩展I/O口。 串行数据通过RXD输入或输出,发送和接 收均为8位数据,低位在先,高位在后。 TXD用于输出移位时钟,作为外接部件的 同步信号,波特率固定为fosc/12。
TXD(移位脉冲)
应用:扩展并IO输入口
RXD 8051 TXD
D0
......
D7
Q
CLK
74LS165
STB
P1.0
要实现数据接收,必须首先把SCON中的允许接收 位REN设置为1。当REN设置为1时,数据就在移位脉 冲的控制下,从RXD端输入。当接收到8位数据时,置 位接收中断标志位RI,发生中断请求。其接口逻辑如 下图所示。由逻辑图可知,通过外接74LS165,串行 口能够实现数据的并行输入。 CD4014
在满足串行口接收中断标志位RI(SCON.0)=0的条 件下,置允许接收位REN(SCON.4)=1就会接收一 帧数据进入移位寄存器,并装载到接收SBUF中,同 时使RI=1。当发读SBUF命令时(执行“MOV A,SBUF” 命令),便由接收缓冲器(SBUF)取出信息通过 89C51内部总线送CPU。
1. 方式0数据发送
写入SBUF RXD(数据) TXD(移位脉冲) TI(中断标志)
D0 D1 D2 D3 D4 D5 D6 D7
应用:扩展并行IO输出口
应用:扩展并行IO输出口
RXD 8051 TXD
D0
。。。。。。
D7
A B
CLK
74LS164
STB
P1.0
当数据写入SBUF后,数据从RXD端在移位脉冲 (TXD)的 控制下,逐位移入74LS164,74LS164能 完成数据的串并转换。当8位数据全部移出后,TI由硬 件置位,发生中断请求。若CPU响应中断,控制数据 由74LS164并行输出。 CD4094
(6) TI——发送中断标志位
在方式0时,发送完第8位数据后,该位由硬件置位。 在其它方式下,于发送停止位之前,由硬件置位。 TI=1表示帧发送结束,其状态既可供软件查询使 用,也可请求中断。TI由软件清“0”。 (7) RI——接收中断标志位 在方式0时,接收完第8位数据后,该位由硬件置位。 在其它方式下,接收到停止位之前,该位硬件置位。 RI=1表示帧接收结束,其状态既可供软件查询使用, 也可请求中断。 RI由软件清“0”。
奇偶校验位(D8):
占一位,用于对字符传送作正确性检查。奇偶校 验位是可选择的,共有三种可能,即奇校验、偶校验 和无校验,由用户根据需要选定。通信双方需约定已 知的奇偶校验方式。如果选择偶校验,那么组成数据 位和奇偶位的逻辑1的个数必须是偶数;如果选择奇校 验,那么逻辑1的个数必须是奇数。 也可用这一位(1/0)来确定这一帧中的字符所代表信 息的性质(地址/数据等)。
在串行通信中,数据位的发送和接收分别由发送 则波特率高,通信速度就快;反之,时钟频率低,波
特率就低,通信速度就慢。
时钟脉冲和接收时钟脉冲进行定时控制。时钟频率高,
(三)串←→并转换
在51单片机串行发送数据之前,单片机内部的并 行数据被送入移位寄存器并一位一位地输出,将并行 数据转换成串行数据。如下图所示。
例:利用串行方式0和74ls164设计流水灯
源程序:
#include <at89x51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int uchar temp=1; void delay(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); }