第八章 数据通信 本章学习目标 了解通信的有关概念...

367
1 7 : 1 8 : 2 4 1/367 第第第 第第第第 第第第第第第 第第第第第第第第第 第第第第第第第第第第第第第第 第第第第第第第第 (RS232/RS485/SPI/I 2 C) 第第第第第第 第第 第第第第第第第第第第第第第第

description

第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法 掌握单片机并行接口的扩展方法. §8.1 通信的有关概念. 通信:计算机的 CPU 与外部设备之间,以及计算机和计算机之间的信息交换。 通信分类:并行通信和串行通信. 并行通信 以字节( Byte )或字节的倍数为传输单位 一次传送一个或一个以上字节的数据,数据的各位同时进行传送 适合于外部设备与微机之间进行近距离、大量和快速的信息交换。计算机的各个总线传输数据时就是以并行方式进行的。 - PowerPoint PPT Presentation

Transcript of 第八章 数据通信 本章学习目标 了解通信的有关概念...

Page 1: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:241/367

第八章 数据通信

本章学习目标了解通信的有关概念掌握串行通信和并行通信的原理掌握常见串行接口 (RS232/RS485/SPI/I2C) 的原理及应用方法掌握单片机并行接口的扩展方法

Page 2: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:242/367

§8.1 通信的有关概念

通信:计算机的 CPU 与外部设备之间,以及计算机和计算机之间的信息交换。

通信分类:并行通信和串行通信

Page 3: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:243/367

并行通信以字节( Byte )或字节的倍数为传输单位一次传送一个或一个以上字节的数据,数据的各位同时进行传送适合于外部设备与微机之间进行近距离、大量和快速的信息交换。计算机的各个总线传输数据时就是以并行方式进行的。并行通信的特点就是传输速度快,但当距离较远、位数较多时,通信线路复杂且成本高。

Page 4: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:244/367

串行通信通信双方使用一根或两根数据信号线相连,同一时刻,数据在一根数据信号线上一位一位地顺序传送,每一位数据都占据一个固定的时间长度。与并行通信相比,串行通信的优点是传输线少、成本低、适合远距离传送及易于扩展。缺点是速度慢、传输时间长等。如计算机上常用的 COM 设备、 USB 设备和网络通信等设备都采用串行通信。

Page 5: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:245/367

一、串行通信的相关概念1 、串行通信的分类( 1 )按照串行数据的同步方式分类按照串行数据的同步方式,串行通信可以分为同步通信和异步通信两类

Page 6: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:246/367

1 )异步通信在 异 步 通 信 (Asynchronous Communication)方式中,接收器和发送器使用各自的时钟,它们的工作是非同步的。在异步传送中,每一个字符要用起始位和停止位作为字符开始和结束的标志,以字符为单位一个个地发送和接收。

Page 7: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:247/367

典型的异步通信格式如图所示。

……0/1 0/1 1 0 0/110/10/10/10/10/10/10/10/1 0/10/10/10

低位 高位

n 第 个字符 n-1 第 个字符 n 1 第 + 个字符

7位数据停止位

奇偶校验

起始位

奇偶校验

停止位

起始位 7位数据

下降沿指出下一个字符的开始

a) 7 ASCII数据字为 位 码时的通信格式

0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/101 1 1 1

n 第 个字符

起始位

低位 高位

奇偶校验

停止位 空闲位

下降沿指出下一个字符的开始

n 1 第 + 个字符

位的时间长度取决于波特率

b)有空闲位时的通信格式

7位数据 起始位

图 8-1 异步通信的格式

Page 8: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:248/367

异步传送时,每个字符的组成格式首先用一个起始位表示字符的开始;后面紧跟着的是字符的数据字,数据字通常是7 位或 8 位数据(低位在前,高位在后),在数据字中可根据需要加入奇偶校验位;最后是停止位,其长度可以是一位或两位。串行传送的数据字加上成帧信号的起始位和停止位就形成了一个串行传送的帧。起 始 位 用 逻 辑 “ 0” 低 电 平 表 示 , 停 止 位 用 逻辑“ 1” 高电平表示。

Page 9: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:249/367

图 a 所示为数据字为 7 位的 ASCII 码,第 8 位是奇偶校验位,加上起始位、停止位,一个字符帧由 10 位组成。形成帧信号后,字符便一个一个地进行传送。

Page 10: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2410/367

在异步传送中,字符间隔不固定,在停止位后可以加空闲位,空闲位用高电平表示,用于等待发送。这样,接收和发送可以随时进行,不受时间的限制。图 b 为有空闲位的情况。

Page 11: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2411/367

在异步数据传送中,通信双方必须约定好两项事宜:

字符格式。包括字符的编码形式、奇偶校验以及起始位和停止位的规定。通信速率。通信速率通常使用比特率来表示。 比特率是数字信号的传输速率,它用单位时间内传输的二进制代码的有效位 (bit) 数来表示,其单位为每秒比特数 bit/s(bps) 、每秒千比特数(Kbps) 或每秒兆比特数 (Mbps) 来表示。

Page 12: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2412/367

波特率与比特率波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,其单位为波特 (Baud) 。波特率与比特率的关系是比特率 = 波特率 × 单个调制状态对应的二进制位数。在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。波特率是传输通道频宽的指标。

Page 13: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2413/367

例如,数据传送速率为 120 字符 / 秒(这个速率可以称为波特率),而每一个字符为 10 位,则其传送的比特率为 10×120=1200 位 / 秒=1200 比特。在后面的描述中,为了适应习惯用法,将比特率和波特率统一使用波特率来表示。

Page 14: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2414/367

2 )同步通信同步通信 (Synchronous Communication )是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧和异步通信中的字符帧不同,通常含有若干个数据字符。根据控制规程,数据格式分为面向字符及面向比特两种。

Page 15: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2415/367

①面向字符型的数据格式面向字符型的同步通信数据格式可采用单同步、双同步和外同步三种数据格式,如图所示。

图 8-2 面向字符型同步通信数据格式

Page 16: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2416/367

单同步、双同步单同步和双同步均由同步字符、数据字符和校验字符 CRC 等三部分组成。

单同步是指在传送数据之前先传送一个同步字符“ SYNC” ,双同步则先传送两个同步字符“ SYNC” 。

Page 17: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2417/367

外同步外同步通信的数据格式中没有同步字符,而是用一条专用控制线来传送同步字符,使接收端及发送端实现同步。当每一帧信息结束时均用两个字节的循环控制码 CRC 为结束。

Page 18: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2418/367

②面向比特型的数据格式根据同步数据链路控制规程( SDLC ),面向比特型的数据每帧由六个部分组成。第一部分是开始标志“ 7EH” ;第二部分是一个字节的地址场;第三部分是一个字节的控制场;第四部分是需要传送的数据,数据都是位( bit )的集合;第五部分是两个字节的循环控制玛 CRC ;最后部分又是“ 7EH” ,作为结束标志。

Page 19: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2419/367

面向比特型的数据格式如图所示。

注意:在 SDLC 规程中不允许在数据段和 CRC段中出现六个“ 1” ,否则会误认为是结束标志。要求在发送端进行检验,当连续出现五个 “ 1” 时,则立即插入一个“ 0” ,到接收端要将这个插入的“ 0”去掉,恢复原来的数据,保证通信的正常进行。

图 8-3 面向比特型同步通信数据格式

Page 20: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2420/367

同步通信优缺点数据传输速率较高,通常可达 56000bps 或更高,适用于传送信息量大、传送速率高的系统中,缺点是要求发送时钟和接收时钟保持严格同步,故发送时钟除应和发送波特率保持一致外,还要求把它同时传送到接收端去。

Page 21: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2421/367

( 2 )按照数据的传送方向分类

按照数据传送方向,串行通信可分为单工、半双工和全双工三种方式。

Page 22: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2422/367

图 a 为单工通信方式( Simplex )。 A 为发送站, B 为接收站,数据只能能由 A 发至 B ,而不能由 B 传送到 A 。

单工通信类似无线电广播,电台发送信号,收音机接收信号,收音机永远不能发送信号。

Page 23: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2423/367

图 b 为半双工通信方式( Half Duplex )。数据可以从 A 发送到 B ,也可以由 B 发送到 A 。不过,由于使用一根线连接,发送和接收不可能同时进行,同一时间只能作一个方向的传送,其传送方向由收发控制开关 K 来控制。

半双工通信方式类似对讲机,某时刻 A 发送B 接收,另一时刻 B 发送 A 接收,双方不能同时进行发送和接收。

Page 24: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2424/367

图 c 为全双工通信方式( Full Duplex )。在这种方式中,分别用 2 根独立的传输线来连接发送方和接收方, A、 B既可同时发送,又可同时接收。

全双工通信工方式类似电话机,双方可以同时进行数据的发送和接收。

Page 25: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2425/367

图所示为主从多终端通信方式。 A 可以向多个终端( B、 C、 D… )发出信息。在 A允许的条件下,可以控制管理 B、 C、 D 等在不同的时间向 A 发出信息。

根据数据传送的方向又分为多终端半双工通信和多终端全双工通信。

A

D

C

B A

D

C

B

a)多终端半双工通信方式 b)多终端全双工通信方式

Page 26: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2426/367

2 、串行接口作用:串行通信中的数据是一位一位依次传送的,而计算机中数据是并行传送的。因此,发送端必须把并行数据变成串行才能传送,接收端接收到的串行数据又需要变换成并行数据才可以送给计算机。上述并→串或串→并的转换既可以用软件实现,也可用硬件实现。由于用软件实现会使 CPU 的负担增加,目前往往用硬件(串行接口)完成这种转换。

Page 27: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2427/367

串行接口通过系统总线和 CPU 相连,如图所示。

CPU

控制寄存器

状态寄存器

数据输入寄存器

数据输出寄存器

串入并出

并入串出

地 址译码器

数据总线

RXRDY

TXRDY

复位

I OR

I OW

AEN地址总线 CS

C/ D

接收时钟

发送时钟

串行数据输入

串行数据输出MODEM控制

串行接口

图 8-6 CPU 与串行接口的连接

Page 28: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2428/367

串行接口主要由 4 部分组成数据输入寄存器。在输入过程中,串行数据一位一位地从传输线进入串行接口的接收移位寄存器,经过串入并出电路的转换,当接收完一个字符之后,数据就从接收移位寄存器传送到数据输入缓冲器,等待 CPU读取。数据输出寄存器。当 CPU 输出数据时,先送到数据输出缓冲器,然后,数据由输出寄存器传到发送移位寄存器,经过并入串出电路转换一位一位地通过输出传输线送到外设。

Page 29: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2429/367

串行接口主要由 4 部分组成状态寄存器。状态寄存器用来存放外设运行的状态信息, CPU 通过访问这个寄存器来了解某个外设的状态,进而控制外设的工作,以便与外设进行数据交换。控制寄存器 。 串 行 接 口 中 有 一 个控制寄存器, CPU 对外设设置的工作方式命令、操作命令都存放在控制寄存器中,通过控制寄存器控制外设运行。

Page 30: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2430/367

串行接口基本工作原理串行发送时, CPU 通过数据总线把 8 位并行数据送到数据输出寄存器,然后送给并行输入 /串行输出移位寄存器,并在发送时钟和发送控制电路控制下通过串行数据输出端一位一位串行发送出去。起始位和停止位是由串行接口在发送时自动添加上去的。串行接口发送完一帧后产生中断请求, CPU响应后可以把下一个字符送到发送数据缓冲器。

Page 31: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2431/367

串行接口基本工作原理串行接收时,串行接口监视串行数据输入端,并在检测到有一个低电平(起始位)时就开始一个新的字符接收过程。串行接口每接收到一位二进制数据位后就使接收移位寄存器(即串行输入并行输出寄存器)左移一次,连续接收到一个字符后将其并行传送到数据输入寄存器,并产生中断促使 CPU从中取走所接收的字符。

Page 32: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2432/367

常 见 的 串 行 接 口芯片 称 为 通 用 异 步 接收 器 / 发 送 器UART(Universal Asynchronous Receiver/Transmitter) , 其 内 部 结构如图 8-7 所示。

WRRESET

CONTROL TXC

Ææż´í

Òç³ö´í

Ö¡´í

RXC

TBE

DATA Bus

RXD

TXD

RDCS

IN

OUT

PE

OE

FE

接收移位寄存器

接收数据缓冲器

发送缓冲器空

发送移位寄存器

发送数据缓冲器

INT

图 8-7 硬件 UART 的结构

Page 33: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2433/367

UART中 3种出错标志:奇偶错误( Parity error )。为了检测传送中可能发生的错误, UART 在发送时会检查每个要传送的字符中的“ 1” 的个数,自动在奇偶校验位上添加“ 1” 或“ 0” ,使得“ 1” 的总和(包括奇偶校验位)在偶校验时为偶数,奇校验时为奇数。 UART 在接收时会检查字符中的每一位(包括奇偶校验位),计算其“ 1” 的总和是否符合奇偶检验的要求,以确定是否发生传送错误。

Page 34: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2434/367

UART中 3种出错标志:帧错误( Frame error ),表示字符格式不符合规定。虽然接收端和发送端的时钟没有直接的联系,但是因为接收端总是在每个字符的起始位处进行一次重新定位,因此,必须要保证每次采样都对应一个数据位。如果接收时钟和发送时钟的频率相差太大,引起在起始位之后刚采样几次就造成错位时,会出现采样造成的接收错误。如果遇到这种情况,就会出现停止位(按规定应为高电平)为低电平(此情况下,未必每个停止位都是低电平),从而引起信息帧格式错误,帧错误标志 FE置位。

Page 35: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2435/367

UART中 3种出错标志:溢 出 ( 丢 失 ) 错 误 ( Overrun error ) 。 UART 是 一 种 双 缓 冲 器 结构。 UART 接收端在接收到第一个字符后便放入接收数据缓冲器,然后就继续从 RXD 线上接收第二个字符,并等待 CPU从接收数据缓冲器中取走第一个字符。如果 CPU很忙,一直没有机会取走第一个字符,以致接收到的第二字符进入接收数据缓冲器而造成第一个字符被丢失,于是产生了溢出错误, UART 自动使溢出错误标志 OE置位。

Page 36: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2436/367

二、并行通信中的相关概念1 、并行接口

定义:实现并行通信的接口电路分类:输入并行接口、输出并行接口和输入 /输出并行接口。并行通信以同步方式传输,其特点是:传输速度快;硬件开销大;适合近距离传输。

Page 37: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2437/367

并行接口传输信息状态信息。状态信息表示外设当前所处的工作状态。例如,准备好信号“ READY”=1 表示输入接口已经准备好,可以和 CPU 交换数据;忙信 号 “ BUSY”=1 表 示 接 口正在 传 输 信息, CPU 需要等待。控制信息。控制信息是由 CPU 发出的,用于控制外设接口的工作方式以及外设的启动和复位等。数据信息。 CPU 与并行接口交换的主要内容。

Page 38: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2438/367

一个典型的并行接口与 CPU 、外设连接图如图所示。

CPU

输入设备

控制寄存器

输入缓冲寄存器

输出缓冲寄存器

状态寄存器 输出设备

数据总线读出信号

写入信号复位准备好中断请求

地址译码

地址片选

A1

A0

数据输入准备好

数据输入回答

数据输入

数据输入数据输出准备好

数据输出回答

并行接口

图 8-8 典型并行接口电路图

Page 39: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2439/367

2 、并行接口电路组成输入缓冲寄存器。输入数据缓冲器主要功能是负责接收设备送来的数据, CPU 通过读操作指令 IN执行读操作,从输入数据缓冲器读取数据。输出缓冲寄存器。输出数据缓冲器主要功能是负责接收 CPU 送来的数据,如果设备处于空闲状态,则从输出数据缓冲器取走数据,接口通知 CPU 进行下一次输出操作。

Page 40: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2440/367

2 、并行接口电路组成状态寄存器。状态寄存器用来存放外设运行状态信息, CPU 通过访问状态寄存器来了解外设状态,进而控制外设的工作。控制寄存器 。 并 行 接 口 中 有 一 个控制寄存器, CPU 对外设设置的工作方式命令、操作命令都存放在控制寄存器中,通过控制寄存器控制外设的运行。数据信息。 CPU 与并行接口交换的主要内容。

Page 41: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2441/367

3 、并行通信接口的基本输入 / 输出工作过程( 1 )输入过程

外设首先将并行传输的数据放到外设与接口之间的数据总线上,并使“数据输入准备好”状态选通信号有效,该选通信号使数据输入到接口的输入数据缓冲器内。当数据写入输入数据缓冲器后,接口使“数据输入应答”信号有效,作为对外设输入的响应。外设收到此信号后,便撤销输入数据和“数据输入准备好”信号。

Page 42: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2442/367

数据到达接口后,接口在状态寄存器中设置“输入准备好”状态位,以便 CPU 进行查询;接口也可以在此时向 CPU 发送中断请求,表示数据已输入到接口。CPU既可以用查询程序方式,也可以用程序中断方式来读取接口中的数据。CPU从输入缓冲器中读取数据后,接口自动清除状态寄存器中“输入准备好”状态位,并使数据总线处于高阻状态。至此,一个数据的传送结束。

Page 43: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2443/367

( 2 )输出过程当外设从接口取走数据后,接口就会将状态寄存器中“输出准备好”状态位置 1 ,表示 CPU当前可以向接口输出数据,这个状态位可供CPU 进行查询。接口此时也可以向 CPU 发中断请求。 CPU既可以用查询程序方式,也可以用程序中断方式向接口输出数据。当 CPU将数据送到输出缓冲器后,接口自动清除“输出准备好”状态位,并将数据送往外设的数据线上,同时,接口将给外设发送“启动信号”来启动外设接收数据。

Page 44: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2444/367

外设被启动后,开始接收数据,并向接口发“数据输出应答”信号。接口收到此信号,便将状态寄存器中的“输出准备好”状态位置 1 ,以便 CPU 输出下一个数据。

Page 45: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2445/367

§8.2 串行接口一、单片机的串行接口

STC15F2K60S2 单片机具有 2 个采用 UART工

作方式的全双工串行通信接口(串口 1 和串口2 )。 每个串口由 2 个数据缓冲器、 1 个移位寄存器、 1 个串行控制寄存器和一个波特率发生器等组成。

Page 46: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2446/367

每个串口的数据缓冲器由串行接收缓冲器和发送缓冲器构成,它们在物理上是独立的,既可以接收数据也可以发送数据,还可以同时发送和接收数据。接收缓冲器只能读出,不能写入,而发送缓冲器则只能写入,不能读出。它们共用一个地址号。串口 1 的接收缓冲器和发送缓冲器共用一个地址号( 99H );串口 2 的接收缓冲器和发送缓冲器共用一个地址号( 9BH )。

Page 47: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2447/367

STC15F2K60S2 的串行口既可以用于串行异步通信,也可以构成同步移位寄存器。如果在串行口的输入 / 输出引脚上加上电平转换器,可以方便地构成标准的 RS-232 接口。STC15F2K60S2 单片机的串行口有 4种工作方式,有的工作方式的波特率是可变的。用户用软件编程的方法在串行控制寄存器中写入相应的控制字节,即可改变串行口的波特率和工作方式。

Page 48: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2448/367

1 、串行接口的寄存器

与 串 行 接 口 1 相 关 的 寄 存 器 有 :CON、 PCON、 AUXR、 SBUF、 TMOD、TL1、 TH1、 TCON、 IE、 IP、 CLK_DIV、 P_SW2、 SADEN和 SADDR 。与 串 行 接 口 2 相 关 的 寄 存 器 有 :S2CON、 S2BUF、 T2H、 T2L、 AUXR、IE2、 IP2和 AUXR1 。

Page 49: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2449/367

( 1 )串口 1控制寄存器 SCON

SCON (地址为 98H ,复位值为 00H )用于确定串口 1 的操作方式和控制串口 1 的某些功能,也可用于发送和接收第 9 个数据位( TB8、RB8 ),并设有接收和发送中断标志( RI及TI )位。SCON 各位的定义如下 :

位号 D7 D 6 D 5 D 4 D 3 D 2 D 1 D 0

位名称 SM0/FE SM1 SM2 REN TB8 RB8 TI RI

Page 50: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2450/367

位号 D7 D 6 D 5 D 4 D 3 D 2 D 1 D 0

位名称 SM0/FE SM1 SM2 REN TB8 RB8 TI RI

1) SM0/FE : PCON寄存器中的 SMOD0=1 时,该位用于帧错误检测,当检测到一个无效停止位时, FE置 1 。它必须由软件清零。

PCON寄存器中的 SMOD0=0 时, SM0/FE 位和SM1 一起指定串行通信的工作方式。 ( 如下表)

表中 SYSclk 为振荡器频率

Page 51: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2451/367

表 8-1 串行通信的工作方式

Page 52: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2452/367

2) SM2 :多机通信控制位。 多机通信时单片机工作于方式 2 或方式 3。 SM2 位

是进行主-从多机通信的控制位。 当进行主从式通信时,开始各个从机都应置 SM2=1 。主机发出的第一帧信息是地址帧信息(数据帧的第 9数据位为 1 ),此时各个从机接收到地址帧信息后都能产生中断,并进入各自的中断服务程序。

位号 D7 D 6 D 5 D 4 D 3 D 2 D 1 D 0

位名称 SM0/FE SM1 SM2 REN TB8 RB8 TI RI

Page 53: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2453/367

只有被寻址的从机(地址与从主机发出的地址号相符)在中断服务程序中使 SM2=0 ,为从机接收主机发出的数据帧信息(第 9 数据位为 0 )作准备。而其他从机仍然维持 SM2=1 ,对主机以后发出的数据帧信息,将不会产生中断申请,从而不会接收后续的数据帧信息。在方式 1 时,如 SM2=1 ,则只有在接收到有效停止位时才能激发中断标志( RI=1 ),如没有接收到有效停止位,则 RI 仍然为 0 。如果使用方式 0 ,则SM2 应为 0 。

Page 54: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2454/367

3) REN :允许接收控制位。 1 :允许串行口接收数据; 0 :禁止串行口接收数据。

位号 D7 D 6 D 5 D 4 D 3 D 2 D 1 D 0

位名称 SM0/FE SM1 SM2 REN TB8 RB8 TI RI

Page 55: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2455/367

4) TB8 在方式 2和 3 时,它是要发送的第 9 个数据

位,按需要由软件进行置位或清零。 该位可用作数据的奇偶校验位,或在多机通

信中用作地址帧 / 数据帧的标志位。

位号 D7 D 6 D 5 D 4 D 3 D 2 D 1 D 0

位名称 SM0/FE SM1 SM2 REN TB8 RB8 TI RI

5) RB8

在方式 2和 3 时,它是接收到的第 9 位数据,作为奇偶检验位或地址帧 / 数据帧标志位。

在方式 1 时,若 SM2=0 ,则 RB8 是接收到的停止位。在方式 0 时,不使用 RB8 。

Page 56: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2456/367

6) TI :发送中断标志位。 在方式 0 时,当串行发送数据字第 8 位结

束时由内部硬件置位,向 CPU申请发送中断。CPU响应中断后,必须用软件清零。

在其他方式时,在停止位开始发送时由硬件置位。同样,必须用软件清零。

位号 D7 D 6 D 5 D 4 D 3 D 2 D 1 D 0

位名称 SM0/FE SM1 SM2 REN TB8 RB8 TI RI

Page 57: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2457/367

7) RI :接收中断标志位。 在方式 0 时,当串行接收到第 8 位结束时由内部硬件置位。

在其他方式时, RI 在接收到停止位的中间时 刻由硬件置位 ( 例 外 情 况 见 SM2 说明)。 RI也必须用软件清 0 。

位号 D7 D 6 D 5 D 4 D 3 D 2 D 1 D 0

位名称 SM0/FE SM1 SM2 REN TB8 RB8 TI RI

Page 58: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2458/367

TI与 RI 使用时需注意当一帧数据发送完成时,发送中断标志 TI被置位,接着发生串口中断,进入串口中断服务程序。但 CPU 事先并不能分辨是 TI还是 RI 的中断请求,因此,必须在中断服务程序中用位测试指令加以判别。两个中断标志位 TI及 RI均不能自动复位,必须在中断服务程序中使用清中断标志位指令,撤销中断请求状态,否则原先的中断标志位状态又将表示有中断请求。

Page 59: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2459/367

( 2 )串口 2控制寄存器 S2CON

寄存器 S2CON ( 地址为 9AH , 复 位值为00H )用于确定串口 2 的操作方式和控制串口2 的某些功能,也可用于发送和接收第 9 个数据位( S2TB8、 S2RB8 ),并设有接收和发送中断标志( S2RI及 S2TI )位。S2CON 各位的定义如下:

位号 D7 D 6 D 5 D 4 D 3 D 2 D 1 D 0

位名称 S2SM0 0 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI

Page 60: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2460/367

其中, S2SM0 用于指定串口 2 的工作方式,如表所示

当 T2x12=1 时,定时器 2 的溢出率 = SYSclk / ( 65536 - [RL_TH2,RL_TL2])当 T2x12=0 时 , 定 时 器 2 的溢出率 = SYSclk / 12 / ( 65536 - [RL_ TH2,RL_TL2])

式中 RL_TH2是 T2H 的重装载寄存器, RL_TL2是 T2L 的重装载寄存器。

S2SM0 工作方式 功能说明 波特率0 方式 0 8位 UART,波特率可

变(定时器 2的溢出率 )/4

1 方式 1 9位 UART,波特率可变

(定时器 2的溢出率 )/4

Page 61: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2461/367

( 3 )掉电控制寄存器 PCON

PCON (地址为 87H ,复位值为 30H )中的SMOD 用于设置方式 1 、方式 2 和方式 3 的波特率是否加倍。各位的定义如下:

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL

Page 62: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2462/367

SMOD :串行口波特率系数控制位。复位时,SMOD=0 。

1 :使方式 1 、方式 2 和方式 3 的波特率加倍。 0 :各工作方式的波特率不加倍。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL

Page 63: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2463/367

SMOD0 : 帧错误检测有 效控制 。 复 位时, SMOD0=0 。

1 : SCON 寄存器中的 SM0/FE 位用于 FE(帧错误检测)功能。

0: SCON寄存器中的 SM0/FE 位用于 SM0功能,和 SM1 一起指定串行通信的工作方式。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL

Page 64: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2464/367

( 4 )辅助寄存器 AUXR

辅助寄存器 AUXR (地址为 8EH ,复位值为01H )各位的定义如下:

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 T0x12 T1x12 UART_M0x6 T2R T2_C/ T2x12 EXTRAM S1S2T

Page 65: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2465/367

1) UART_M0x6 :串行口模式 0 的通信速度设置位。

0: UART 串口模式 0 的速度是传统 12T的 8051 速度, 12 分频。

1: UART 串口模式 0 的速度是传统 12T的 8051的 6 倍, 2 分频。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 T0x12 T1x12 UART_M0x6 T2R T2_C/ T2x12 EXTRAM S1S2T

Page 66: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2466/367

2) S1S2 :串口 1 波特率发生器选择位。 0 :选择定时器 1 作为串口 1 波特率发生器。 1 :选择定时器 2 作为串口 1 波特率发生器。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 T0x12 T1x12 UART_M0x6 T2R T2_C/ T2x12 EXTRAM S1S2T

Page 67: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2467/367

注意:对于具有串口 2的 STC15F2K60S2 单片机,串口 2只能使用独立波特率发生器作为波特率发生器,不能够选择定时器 1 作为波特率发生器;串口 1 可以选择定时器 1 作为波特率发生器,也可以选择独立波特率发生器作为波特率发生器。

Page 68: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2468/367

( 5 )定时器 2寄存器定时器 2 时间常数寄存器 T2H和 T2L (地址分别为 0D6H和 0D7H ,复位值为 00H )用于保存重装时间常数,从而作为波特率发生器使用。可 以 配 合 辅 助 寄 存 器 AUXR 中 的T2R 、 T2_C/ 和 T2x12 位进行时间常数的确定。

Page 69: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2469/367

( 6 )从机地址控制寄存器为了方便多机通信, STC15F2K60S2 单片机设置了从机 地址控制寄存器 SADEN 和SADDR 。SADEN 是从机地址掩模寄存器(地址为 B9H ,复位值为 00H ), SADDR 是从机地址寄存器(地址为 A9H ,复位值为 00H )。

Page 70: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2470/367

主机可以用从机地址来选择性的访问从机。可以用广播的方式来寻址所有的从机。从机的地址由 SADDR和 SADEN寄存器定义,从机地址是由 SADDR 设定的 8 位数据,如果 SADEN 中相应的 位置 0 , 则 SADDR 中 对 应 的 位无效 。只有 当SADEN 中的相应位为 1, SADDR 中的数据才有效。也就是说, SADEN寄存器使能串口的自动地址识别功能,当 SADEN 中的某位被置为 1 ,那么 SADDR寄存器中的相应位会与接收到的数据进行比较。如果 SADEN.n被设为 0 ,那么系统会忽略对该位的比较。如果 SADEN 为全 0 ,那么对于所有的地址帧系统都会产生中断。

Page 71: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2471/367

( 7 )数据缓冲器数据缓冲器用于保存要发送的数据或者从串口接收到的数据。串口 1 的数据缓冲器是 SBUF ,串口 2 的数据缓冲器是 S2BUF 。

对于串口 1 ,当一个字符接收完毕,移位寄存器 中 的 数 据 字 节装入 串 行 接 收 数 据缓冲器SBUF 中,其第 9 位则装入 SCON 寄存器的RB8 位。如果 SM2 使得已接收的数据无效,则 RB8 位和 SBUF缓冲器中的内容不变。

Page 72: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2472/367

对于串口 2 ,当一个字符接收完毕,移位寄存器 中 的 数 据 字 节装入 串 行 接 收 数 据缓冲器S2BUF 中,其第 9 位则装入 S2CON寄存器的S2RB8 位。如果 S2SM2 使得已接收的数据无效,则 S2RB8 位和 S2BUF缓冲器中的内容不变。

无论对于串口 1还是串口 2 ,发送缓冲器只能写入,不能读出;接收缓冲器只能读出,不能写入。因此,串口 1 的两个缓冲器共用一个地址号( 99H ),串口 2 的两个缓冲器共用一个地址号( 9BH )。

Page 73: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2473/367

( 8 )串口 1 的中继广播方式设置CLK_DIV寄存器中的 Tx_Rx 位用于串口 1 的中继广播方式设置。

0 :串口 1 为正常工作方式1 :串口 1 为中继广播方式,即将 RxD端口输入的电平状态实时输出在 TxD 外部管脚上。

Page 74: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2474/367

2 、串行接口的工作方式STC15F2K60S2 单片机的串行口 1有 4种工作方式,通过设置 SCON寄存器的 SM0和 SM1进行选择 。现分别加以介绍。

方式 0 :移位寄存器方式方式 1: 8 位可变波特率方式方式 2: 9 位固定波特率方式方式 3: 9 位可变波特率方式

Page 75: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2475/367

( 1 )方式 0 :移位寄存器方式方式 0 为半双工方式,又称为同步移位寄存器输出方式。在这种方式下, TXD引脚输出同步移位时钟,RXD 用于发送和接收串行数据。串行口输出端可直接与移位寄存器相连,也可用作扩展 I/O口或外接同步输入输出设备。该方式下的数据帧为 8 位,低位在先,高位在后,没有起始位和停止位。

Page 76: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2476/367

发送过程当 CPU将数据写入到发送缓冲区 SBUF 时,串行口即把 8 位二进制数以 SYSclk/12 或 SYSclk/2 (由UART_M0x6确定是 12 分频还是 2 分频)的波特率由 RXD引脚输出( SYSclk 为系统工作时钟),同时由 TXD引脚输出同步移位脉冲。字符发送完毕,置中断标志 TI为 1 。当写 SBUF 信号有效后,相隔一个时钟,发送控制端有效,允许 RxD 发送数据,同时允许 TxD 输出同步移位脉冲。一帧数据( 8 位)发送完毕时,各控制端均恢复原状态,只有 TI保持高电平,呈中断申请状态。在再次发送数据前,必须用软件将 TI清0 。

Page 77: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2477/367

接收过程控制字除方式 0 外,还应置允许接收控制位REN=1 ,并清除 RI 中断标志。接收过程启动后, RXD 为数据输入端, TXD 为同步信号输出端。 串 行 接 收 的 波 特 率 为 SYSclk/12 或SYSclk/2 (由 UART_M0x6 确定是 12 分频还是 2 分频)。接收完 8 位数据后重新置 RI=1 。当再次接收时,必须通过软件将 RI清 0 。

Page 78: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2478/367

工作于方式 0 使用时需注意必须使 SCON控制字的 SM2 位为 0 ,从而不影响 TB8和 RB8 位。在该方式下,波特率仅取决于系统时钟,无需使用定时器控制。以中断方式传送数据时, CPU响应中断并不会自动清除 TI、 RI 标志,在中断服务程序中必须由指令清零。如 CLR TI及 CLR RI 。

Page 79: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2479/367

内部总线

SBUF

0检测器

SD Q

CL

START

TX CLOCK

SHIFTTX控制器

TI SEND

RX CLOCK

START SHIFT

RECEIVERI

RX控制器1 1 11 11 1 0

输入移位寄存器

SBUF

内部总线

移位时钟

装载SBUF

读SBUF

UART_M0x6

SYSclk/12

SYSclk/2

0

1串行口中断

RENRI

写数据到SBUF

SHIFT

移位控制

RxD输出功能

TxD输出功能

RxD输入功能

≥ 1

&

EN

≥ 1

&

&

1

( a )串行口 1 方式 0功能结构图

Page 80: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2480/367

D0 D1 D2 D3 D4 D5 D6 D7

D0 D1 D2 D3 D4 D5 D6 D7

发送

接收

写数据到SBUF

SEND

移位

RXD(数据输出)

TXD(移位时钟)

TI

写控制字到SCON(清RI )

RI

接收

RXD(数据输入)

TXD(移位时钟)

移位

( b )串行口 1 方式 0 时序图

Page 81: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2481/367

( 1 )串口 1的 UART 方式①方式 1: 8 位可变波特率方式

方式 1提供异步全双工通信,适合于点到点的通信。每个数据帧长度为 10 位: 1 个起始位(低电平)、 8 个数据位和 1 个停止位(高电平)。传输的数据位首先是起始位,然后是 8 位数据(低位在前),最后一位是停止位。起始位和停止位是在发送时自动插入的。接收时,停止位进入 SCON的 RB8 位。

Page 82: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2482/367

内部总线

SBUF

0检测器

SD Q

CL

START

TX CLOCK

SHIFTTX控制器

TI SEND

RX CLOCK

START SHIFT

LOAD SBUFRI

RX控制器

输入移位寄存器(9 位)

SBUF

下降沿传输检测器

装载SBUF

读SBUF

串行口中断

写数据到SBUF

移位控制

移位控制

TxD

DATA

1FFH

÷16

÷2

÷16

位检测器

内部总线

T1工作于方式2时的溢出

SMOD=0 SMOD=1

TB8

采样

RxD

T1的溢出

÷4

T2的溢出

T1工作于方式0时的溢出

&

≥ 1

1

≥ 1

( a )串行口 1 方式 1功能结构图

Page 83: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2483/367

发送过程发送数据时,数据由串行发送端 TxD 输出。当单片机执行一条写 SBUF 的指令时,就启动串行通信的发送,写 SBUF 信号还把 1装入发送移位寄存器的第 9 位,并通知 TX控制器开始发送。发送各位的定时时间由16 分频计数器同步。移位寄存器将数据不断右移送 TxD端口发送,在数据的左边不断移入 0 作补充。当数据的最高位移到移位寄存器的输出位置,紧跟其后的是第 9 位“ 1” ,在它的左边各位全为“ 0” ,这个状态条件,使 TX控制器作最后一次移位输出,然后使允许发送信号“ SEND”失效,完成一帧信息的发送,并置位中断请求位 TI ,即 TI=1 ,向 CPU请求中断处理。

Page 84: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2484/367

接收过程当软件置位接收允许标志位 REN ,即 REN=1时,接收器便以选定波特率的 16 分频的速率采样串行接收端口 RxD ,当检测到 RxD端口从1→0 的负跳变时就启动接收器准备接收数据,并立即复位 16 分频计数器,将 1FFH值装入移位寄存器。复位 16 分频计数器的目的是使它与输入位时间同步。

Page 85: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2485/367

16 分频计数器的 16 个状态是将每位的接收时间均为 16 等份,在每位时间的 7、 8、 9 状态由检测器对 RxD 端口进行采样,经“三中取二”后的值作为本次所接收的值,即 3 次采样至少 2 次相同的值,以此消除干扰影响,提高可靠性。在起始位,如果接收到的值不为 0(低电平),则起始位无效,复位接收电路,并重新检测 1→0 的跳变。如果接收到的起始位有效,则将它输入移位寄存器,并接收本帧的其余信息。

Page 86: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2486/367

接收的数据从接收移位寄存器的右边移入,已装入的1FFH向左边移出,当起始位 0移到移位寄存器的最左边时,使 RX控制器作最后一次移位,完成一帧的接收。若同时满足以下两个条件:

– RI=0 ;– SM2=0 或接收到的停止位为 1 。

则接收到的数据有效,数据载入 SBUF ,停止位进入RB8 ,置位 RI ,向 CPU请求中断,若上述两条件不能同时满足,则接收到的数据作废并丢失,无论条件满足与否,接收器重新检测 RxD端口上的 1→0 的跳变,继续下一帧的接收。接收有效,在响应中断后,必须由软件将 RI清 0 。通常情况下,串行口工作于方式 1 时, SM2 设置为 0 。

Page 87: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2487/367

串行通信方式 1 的波特率是可变的,波特率由定时器 1 或定时器 2 的溢出率决定。

定时 / 计数器的溢出率定义为: 单位时间(秒)内定时器 / 计数器溢出的次数

串行口 1 用定时器 1 作为波特率发生器且定时器 1 工作于模式 0( 16 位自动重装模式)时,波特率 =( 定时器 1 的溢出率 )/4 。

注意:此时波特率与 SMOD无关。

Page 88: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2488/367

当定时器 1 工作于模式 0 ( 16 位自动重装模式)且 T1x12 = 0 时

定时器 1 的溢出率 = SYSclk/12/( 65536 -[RL_TH1,RL_TL1]) ;

此时,串口 1 的波特率 = SYSclk/12/( 65536 - [RL_TH1,RL_TL1])/4

Page 89: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2489/367

当串行口 1 用定时器 1 作为波特率发生器且定时器 1 工作于模式 2( 8 位自动重装模式)时

波特率 =×( 定时器 1 的溢出率 )

当定时器 1 工作于模式 2 ( 8 位自动重装模式)且T1x12 = 0 时

定时器 1 的溢出率 = SYSclk/12/( 256 - TH1) ;

此时,串口 1 的波特率 =× SYSclk/12/( 256 - TH1)

Page 90: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2490/367

当定时器 1 工作于模式 2且 T1x12 = 1 时 定时器 1 的溢出率 = SYSclk / ( 256 - TH1)此时,串口 1 的波特率 =× SYSclk/ ( 256 - TH1)

当 T2x12=0 时定时器 2 的溢出率 =SYSclk/12/(65536- [RL_TH2,RL_TL2] )

此时,串口 1 的波特率 = SYSclk/12/( 65536 - [RL_TH2,RL_TL2])/4

当 T2x12 = 1 时 , 定 时 器 2 的 溢 出 率 =SYSclk/(65536- [RL_TH2,RL_TL2] ) 。

此时,串口 1 的波特率 = SYSclk/ ( 65536 - [RL_TH2,RL_TL2])/4 。

其中, RL_TH2是 TH2 的自动重装寄存器, RL_TL2是 TL2 的自动重装寄存器。

Page 91: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2491/367

定时器 1 工作于模式 0( 16 位自动重装模式)且T1x12 = 1 时

定时器 1 的溢出率 = SYSclk / (65536 - [RL_TH1,RL_TL1]) 。

此时 , 串 口 1 的 波 特 率 = SYSclk/ ( 65536 - [RL_TH1,RL_TL1])/4 。

其中, RL_TH1是 TH1 的自动重装载寄存器, RL_TL1是 TL1 的自动重装载寄存器。

Page 92: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2492/367

方式 1 的发送、接收工作波形图如图所示。

SBUF写入

数据

TI

移位TXD

发送

发送

↓起始位 D0 D1 D2 D3 D4 D5 D6 D7

停止位

TX时钟

D0 D1 D2 D3 D4 D5 D6 D7↓起始位

停止位

RI

移位

位检测器采样时间

RX时钟

接收

RXD

( b )串行口 1 方式 1 时序图

Page 93: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2493/367

②串口方式 2: 9 位固定波特率方式方式 2提供异步全双工通信,适合于固定波特率的多机通信。每个数据字节长度为 11 位: 1 个起始位、 8 个数据位(低位在前)、 1 个可编程的第 9 位( TB8/RB8 )和 1 个停止位。与方式 1 相比,每帧增加了一个第 9 位。发送时,第 9 位数据由 TB8确定,可以置位也可以清 0 。接收时,第 9 位进入 RB8 位。

Page 94: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2494/367

方式 2 的波特率为:串行通信方式 2 波特率 =

SYSclk 为系统工作时钟频率

PCON寄存器中的 SMOD 为波特率加倍位当 SMOD=1 时,波特率为 SYSclk/32 ;当 SMOD=0 时,波特率为 SYSclk/64 。

SYSclk64

2SMOD

Page 95: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2495/367

内部总线

SBUF

0检测器

SD Q

CL

START

TX CLOCK

SHIFTTX控制器

TI SEND

RX CLOCK

START SHIFT

LOAD SBUFRI

RX控制器

输入移位寄存器(9 位)

SBUF

下降沿传输检测器

装载SBUF

读SBUF

串行口中断

写数据到SBUF

移位控制

TxD

DATA

1FFH

÷16

÷2

÷16

位检测器

内部总线

SMOD=0

SMOD=1

TB8

采样

SYSclk/2

RxD

STOP BIT

&

1

≥ 1

≥ 1

( a )串行通信方式 2 的功能结构示意图

Page 96: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2496/367

D0 D1 D2 D3 D4 D5 D6 TB8

发送

接收

写入SBUF

SEND

移位

起始位

TXD

TI

RXD

RI

移位

数据

TX时钟

D0 D1 D2 D3 D4 D5 D6 RB8

RX时钟

位检测器采样时间

停止位

停止位

起始位

D7

D7

( b )串行通信方式 2 的接收 / 发送时序图

Page 97: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2497/367

2 )串口 2 的工作方式 0串行数据通过 RXD2/P1.2 ( RXD2/P4.2 )接收和发送, TXD2/P1.3( TXD2/P4.3 )输出同步移位时钟,发送接收的是 8 位数据,低位在先,波特率固定在 Fosc/12 。串口 2 的模式 0操作和串口 1 的模式 0操作方式相同。

Page 98: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2498/367

当接收器接收完一帧信息后必须同时满足下列条件:

• RI=0

• SM2=0 或者 SM2=1 ,并且接收到的第 9 数据位RB8=1

当上述两条件同时满足时,才将接收到的移位寄存器的数据装入 SBUF和 RB8 中,并置位 RI ,向 CPU请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无效而丢失,也不置位 RI 。无论上述条件满足与否,接收器又重新开始检测 RxD 输入端口的跳变信息,接收下一帧的输入信息。

Page 99: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:2499/367

在方式 2 中,接收到的停止位与 SBUF、 RB8和 RI无关。通过软件对 SCON 中的 SM2、 TB8 的设置以及通信协议的约定,为多机通信提供了方便。

Page 100: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24100/367

③串口方式 3: 9 位可变波特率方式该方式也适合于多机通信。方式 3 的每个数据字节长度为 11 位: 1 个起始位、 8 个数据位(低位在前)、 1 个可编程的第 9 位( TB8/RB8 )和 1 个停止位。发送时,第 9 位数据由 TB8确定,可以置位也可以清 0 。接收时,第 9 位数据进入 RB8 位。方式 3 和方式 1 一样,其波特率可通过软件对定时器 / 计数器 1 或定时器 2 的设置进行波特率的选择,是可变的。

Page 101: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24101/367

内部总线

SBUF

0检测器

SD Q

CL

START

TX CLOCK

SHIFTTX控制器

TI SEND

RX CLOCK

START SHIFT

LOAD SBUFRI

RX控制器

输入移位寄存器(9 位)

SBUF

下降沿传输检测器

装载SBUF

读SBUF

串行口中断

写数据到SBUF

移位控制

TxD

DATA

1FFH

÷16

÷16

位检测器

内部总线

SMOD=1

TB8

采样

RxD

STOP BIT

÷2

SMOD=0

T1的溢出

÷4

T2的溢出

T1工作于方式0时的溢出

T1工作于方式2时的溢出

&

1

≥ 1

≥ 1

( a )工作方式 3 的功能结构

Page 102: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24102/367

D0 D1 D2 D3 D4 D5 D6 TB8

发送

接收

写入SBUF

SEND

移位

起始位

TXD

TI

RXD

RI

移位

数据

TX时钟

D0 D1 D2 D3 D4 D5 D6 RB8

RX时钟

位检测器采样时间

停止位

停止位

起始位

D7

D7

( b )工作方式 3 的数据接收 / 发送时序图

Page 103: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24103/367

发送过程CPU执行数据写入发送缓冲区 SBUF 的指令即可启动发送(如 MOV SBUF,A )。串行口自动将发送缓冲区中的内容送入发送移位寄存器。发送移位寄存器先发送一个起始位,接着按程序设定每个字符的代码,先低位后高位。数据字加上奇偶校验位或可控位(方式 2、 3 中即为程序设定的 TB8 位的值),再发送停止位,从而完成一帧的发送。串行数据均由 TXD端输出,发送完毕,将发送中断标志位 TI置 1 ,以供查询及向 CPU申请中断之用。 CPU 的响应中断后必须在中断服务程序中使TI清 0 。

Page 104: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24104/367

接收过程接收数据由 RXD 输入,串行口以所选定波特率的 16倍速率采样 RXD端状态。当 RXD端电平由 1到 0跳变时,就启动接收器。串行口按程序规定的格式接收一帧代码,并把此码的数据位拼成并行码送入接收缓冲寄存器中(在方式 1时,把停止位送入 RB8 ;在方式 2、 3 时,把程控的第 9 位数据送入 RB8 ),等待 CPU取走。为保证可靠无误,对每一数据位进行连续 3 次采样,取 3 次采样中至少两次相同的值。接收完毕,置接收中断标志 RI=1。 CPU 的响应中断后必须在中断服务程序中使 RI清 0 。

Page 105: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24105/367

当接收器接收完一帧信息后必须同时满足下列条件:RI=0

SM2=0 或者 SM2=1 , 并 且 接 收到的第 9 数 据 位RB8=1 。

当上述两条件同时满足时,才将接收到的移位寄存器的数据装入 SBUF和 RB8 中,并置位 RI ,向 CPU请求中断处理。如果上述条件有一个不满足,则刚接收到移位寄存器中的数据无效而丢失,也不置位 RI。无论上述条件满足与否,接收器又重新开始检测RxD 输入端口的跳变信息,接收下一帧的输入信息。

Page 106: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24106/367

在方式 3 中,接收到的停止位与 SBUF、 RB8和 RI无关。通过软件对 SCON 中的 SM2、 TB8 的设置以及通信协议的约定,为多机通信提供了方便。

Page 107: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24107/367

几种常用的典型帧格式。

ASCIIÖÕ¶ËÉ豸¸ñʽ£º

Ë«»úͨÐÅÖ¡¸ñʽ£º

¶à»úͨÐÅÖ¡¸ñʽ£º

ÆðʼλD0 D1 D2 D3 D4 D5 D6 D7 Ææżֹͣ

ÆðʼλD0 D1 D2 D3 D4 D5 D6 D7 D8 Í£Ö¹

ADDRESS/DATAÆðʼλD0 D1 D2 D3 D4 D5 D6 D7 Í£Ö¹

图 8-13 串行通信典型帧格式

Page 108: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24108/367

总结 在实际应用中,应根据实际需要选择串行口的工作方式。由于方式 1 和方式 3 的波特率可以通过定时器 1控制,通信波特率的设定比较灵活,因此,方式 1 和方式 3 使用较多,其中,方式 1 常用于点对点通信的情况;而方式 3 常用语多机通信的情况。

Page 109: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24109/367

串行口工作方式一览表。

Page 110: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24110/367

方式 1 与方式 2、 3 的区别方式 1 中,数据字是 8 位异步通信接口,串行口 发 送 / 接 收共 10 位 信 息 ,第 0 位 为 起 始位, 1~ 8 位是数据位,最后是停止位;方式2、 3 中,数据字为 9 位的异步通信接口, 1位 起 始 位 , 8 位 数 据 位 ,第 9 位 是 可程控位“ 1” 或“ 0” ,最后是停止位,共有 11 位信息。方式 1、 3 的波特率是可变的,其波特率取决于定时器 1 的溢出率或 BRT 的溢出率和特殊功能寄存器 PCON 中的 SMOD 位的值。

Page 111: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24111/367

方式 1、 3 的波特率 =2SMOD× (定时器 1 的溢出率或 BRT 的溢出率) /32

方式 2 的波特率 =2SMOD× (振荡器频率) /64

由上述公式可以看出, PCON 寄存器中的SMOD 是“ 1”还是“ 0”决定波特率是否加倍。

Page 112: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24112/367

在方式 2 和方式 3 中还可通过控制 TB8 位的方法,使其传送中附加的第 9 位数据可以作为多机通信中的地址 / 数据标志位,或作为数据的奇偶校验位。若以 TB8 位作为奇偶校验位,在数据写入 SBUF 之前,先将数据的奇偶位写入TB8 。

Page 113: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24113/367

可以使用下面的代码实现通信的偶校验(假设要发送的数据保存在 R2 中):

MOV A,R2 ;取数据

MOV C,P

MOV TB8,C

MOV SBUF,A ; 数据写入到发送缓冲器,启动发送器

Page 114: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24114/367

编写接收程序时,均应使 REN=1 ,允许串行接

收。只有在最后的移位脉冲产生并同时满足下列条件时,接收数据才会装入 SBUF和 RB8 并置位 RI :

①对于方式 1: SM2=0 或接收到的停止位 =1

②对方式 2、 3: SM2=0 或接收到的第九个数据 =1

Page 115: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24115/367

2 )串口 2的 UART 方式①方式 0

10 位数据通过 TXD2/P1.0(TXD2/P46) 发送,通过 TxD2/P1.1( TxD2_2/P4.7 )发送。一帧数据包含一个起始位 (0), 8 个数据位和一个停止位 (1) 。接收时,停止位进入特殊功能寄存器 S2CON的 S2RB8 位。波特率由独立波特率发生器 BRT 的溢出率决定。

Page 116: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24116/367

当 T2 工作在 1T模式( T2x12=1 )时T2 的溢出率 =SYSclk/(65536-[RL_TH2, RL_TL2] ) ;此时 , 串 行 口 2 的 波 特 率 =SYSclk / ( 65536 - [RL_TH2, RL_TL2]) / 4

当 T2 工作在 12T模式( T2x12=0 )时T2 的溢出率 =SYSclk/12/(65536-[RL_TH2, RL_TL2]) ;

此时 , 串 行 口 2 的 波 特 率 =SYSclk /12/( 65536 - [RL_TH2, RL_TL2]) / 4

其中, RL_TH2是 T2H 的重装载寄存器, RL_TL2是 T2L 的重装载寄存器。

Page 117: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24117/367

②方式 111 位数据通过 TxD2/P1.1(TxD2_2/P4.7) 发送,通过 RxD2/P1.0(RxD2_2/P4.6) 接收。一帧数据包含一个起始位 (0), 8 个数据位,一个可编程的第 9 位和一个停止位 (1) 。发送时,第 9 位数据由特殊功能寄存器 S2CON的 S2TB8 位确定;接收时,第 9 位数据进入特殊功能寄存器 S2CON的 S2RB8 位。波特率的计算方法与方式 0 相同,在此略。

Page 118: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24118/367

3 、多处理机通信以使用串口 1 为例,说明多机通信的过程。串行口控制寄存器 SCON 中的 SM2 位为方式 2 和方式 3 工作时进行多机通信的控制位。这种多机通信方式一般为“一台主机,多台从机”系统,主机发送的信息可被各从机接收,而从机只能对主机发送信息,从机间互相不能直接通信。

Page 119: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24119/367

典型的多机通信结构图如图所示。

TXDRXD

主机 TXD#0�单片机

TXD TXD RXDRXDRXD#1单片机 #2单片机

图 8-14 多机通信系统示意图

Page 120: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24120/367

多机系统设置需注意多机系统中,从机串行口必须在方式 2 或方式3下工作。应使 SM2及 REN控制位置“ 1” 。从而使从机先处于只能接收地址帧信息(第 9 数据位为1 )的状态,当从机接收到主机发出的地址帧信息后,串行口可向 CPU申请中断。

Page 121: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24121/367

多机系统通信过程当主机和某一从机通信时,主机应先发出一帧包含某从机地址的信息给各从机( TB8=1 )。当各从机接收到主机发出的地址帧信息后,自动将第 9 数据位状态“ 1” 送到 SCON控制寄存器的 RB8 位,并将中断标志 RI置 1 ,产生中断。 各 CPU响应中断后均进入中断服务程序,在服务程序中把主机送来的地址号与本从机的地址号相比较。

Page 122: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24122/367

若地址相等,则使本机的 SM2置“ 0” ,为接收主机接着发送来的数据帧(第 9 数据位为0 )作准备。而地址号不符的其他从机仍然维持 SM2=1 的状态,对主机以后发出的数据帧信息不予理睬,不产生中断标志 RI ,直到与主机发出的地址信息相符后,才可接收以后的数据信息,从而实现了主从一对一通信。主机在发送完呼叫地址帧后( TB8=1 ),接着发送一连串的数据帧( TB8=0 )。

Page 123: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24123/367

当主机要和另一个从机通信时,则再发呼叫地址帧( TB8=1 ),呼叫其他从机,原先被寻址的从机经分析得知主机在呼叫其他从机时,恢复其 SM2=1 ,对其后主机发送的数据帧不予理睬。

使用串行口 2 进行多机通信的方法与此类似,仅把 SCON 中的 SM2、 REN、 TB8和 RB8换 成 对 应 的 S2CON 中 的S2SM2、 S2REN、 S2TB8和 S2RB8即可。

Page 124: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24124/367

4 、波特率的设定( 1 )串行口 1 的波特率设定

方式 0 的波特率当 UART_M0x6=0 时 , 波 特 率 为 SYSclk/12 ; 当UART_M0x6=1 时,波特率为 SYSclk/2 。

方式 2 的波特率当 SMOD=0 时,波特率为 SYSclk/64 ;当 SMOD=1时,为 SYSclk/32 。

方式 1和 3的波特率 串行口 1 工作于方式 1和 3 时,波特率是可变的,可以通过编程改变定时器 1 的溢出率或者定时器 2 的溢出率来确定波特率。

Page 125: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24125/367

编程时应注意当定时器作为波特率发生器使用时,应禁止定时器产生中断( ET1=0 或者 ET2=0 )。典型用法是定时器 1 工作在自动再装入时间常数的定时方式 2 。设置完成后,启动定时器 1( TR1=1或 T2R=1 )。STC15F2K60S2 单片机是“一个时钟周期”的8051 单片机,选用定时器 1 作为波特率发生器时,应注意时钟分频的设置与波特率之间的关系, 1T模式下的波特率时相同条件下 12T模式的 12 倍。

Page 126: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24126/367

总结波特率的计算方法:串行口 1 用定时器 1 作为波特率发生器时,且定时器 1工作于模式 0( 16 位自动重装模式)作为波特率发生器时波特率 =( 定时器 1 的溢出率 )/4= SYSclk/12n/( 65536 - [RL_TH1,RL_TL1])/4 。

其 中 , 12T 模式 时 , T1x12=0 , n=1 ; 1T 模式时, T1x12=1, n=0 (下同)。RL_TH1是 TH1 的自动重装载寄存器, RL_TL1是TL1 的自动重装载寄存器。注意:此时波特率与 SMOD无关。

Page 127: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24127/367

当串行口 1 用定时器 1 作为波特率发生器且定时器 1 工作于模式 2( 8 位自动重装模式)时

波特率 = ×( 定时器 1 的溢出率 )

= × SYSclk/12n/( 256 - TH1)

32

2SMOD

32

2SMOD

Page 128: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24128/367

定时器 2只有一种工作方式,即 16 位自动重装方式,因此使用定时器 2 作为波特率发生器时,串口 1 的波特率为:串 口 1 的 波 特 率 = SYSclk/12n/( 65536 - [RL_TH2,RL_TL2])/4 。

其 中 , RL_TH2 是 TH2 的 自动重装寄存器, RL_TL2是 TL2 的自动重装寄存器。在实际应用中,一般选用串行方式 1 或串行方式 3 。此时,波特率的设置,关键在于定时器 / 计数器 1 和定时器 2 的溢出率的计算。

Page 129: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24129/367

( 2 )串行口 2 波特率的设定对于串行口 2 ,只能通过编程改变定时器 2 的溢出率来确定波特率。串行口 2只有两种工作方式: S2SM0=0 为方式 0

(的 8 位数据位的 UART 工作方式); S2SM0=1

为方式 1( 9 位数据位的 UART 工作方式),它们的波特率计算方法相同,都是如下公式所示:

串行口 2 的波特率 = SYSclk/12n/( 65536 - [RL_TH2,RL_TL2])/4

Page 130: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24130/367

常用的串行口波特率、系统时钟以及定时器 1(工作于方式 2 时)重装时间常数之间的关系如表 8-4 所示。可以直接从表中查得所需设置的时间常数。定时器 1 工作于方式 0 时以及使用定时器 T2作为波特率发生器时的重装时间常数,可根据计算公式自行计算。

Page 131: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24131/367

5 、串行接口通信应用举例下面分别说明 STC15F2K60S2 单片机使用串口 1 和串口 2 的串行通信程序编程要点。在编程应用中,虽然可以采用查询方式进行通信,但是,为了有效进行实时任务处理,一般采用中断方式进行串行通信。 ( 1 )串口 1 的编程要点 1 )设置串口的工作模式

设置 SCON 寄存器的内容。若要串口接收,需将其中的 REN 位置 1 。

Page 132: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24132/367

2 )设置正确的波特率 ①使用定时器 1 作为波特率发生器时,需要设置定 时 器 1 的 工 作 方 式 和 时 间 常 数 ( 设 定TMOD和 TH1、 TL1寄存器的内容);启动定时器 1 (置位 TR1 )。

②使用定时器 2 作为波特率发生器时,需要设置定时器 2寄存器和相应的位,包括:定时器2 自动重装寄存器 T2H 和 T2L , T2_C/ 位, T2x12 位, SMOD 位。启动 T2 (置位T2R ), T2 开始计数。

T

Page 133: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24133/367

3 )设置串口的中断优先级(设置 PS寄存器的内容,也可以不设置,取默认值),设置相应的中断控制位( ES和 EA )。

4 )如要串口 1 发送,将数据送入 SBUF 。5 )编制串行中断服务程序,在中断服务程序中

要有清除中断标志指令(将 TI和 RI清 0 )。

Page 134: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24134/367

( 2 )串口 2 的编程要点 1 )设置串口 2 的工作模式 设置 S2CON寄存器中的 S2SM0 位。如要串口 2 接收,将 S2REN置 1 。

2 )设置串口 2 的波特率相应的寄存器和位。 包括: T2H和 T2L, T2_C/ 位, T2x12 位。启动 T2 (置位 T2R ), T2 开始计数。

T

Page 135: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24135/367

3 ) 设置串 口 2 的 中断优 先级( 设置 PS2 和PS2H ,也可以不设置,取默认值),设置打开相应的中断控制位( ES2和 EA )。

4 )如要串口 2 发送,将数据送入 S2BUF 。5 )编制串行中断服务程序,在中断服务程序中

要设置清除中断标志指令(分别是接收完成标志 S2RI 和发送完成标志 S2TI )。

Page 136: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24136/367

下面举例说明 12T 模式下, STC15F2K60S2单片机串行通信程序的编制方法。【例 8-1 】 设有甲、乙两台单片机,编写程序,

使两台单片机间实现如下串行通信功能。(假设系统时钟为 11.0592MHz 。)甲机(发送机):将首址为 ADDRT的 128 字节外部 RAM 数据块顺序向乙机发送;乙机(接收机):将接收的数据,顺序存放在以首址为 ADDRR 的外部 RAM 中。

Page 137: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24137/367

硬件电路连接进行双机通信时,二者的 TxD和 RxD 信号线应交叉连接,即甲机的 TxD 连接乙机的 RxD ;甲机的 RxD 连接乙机的 TxD 。并且,电源地线要连接到一起。

Page 138: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24138/367

解:甲机发送数据的程序流程如图所示。

ÇåÖжϱêÖ¾

ÐÞ¸ÄÖ¸Õë

Êý¾Ý¿é·¢ËÍÍê·ñ£¿

È¡·¢ËÍÊý¾Ý

Æô¶¯´®Ðз¢ËÍ

ÖжϷµ»Ø

¹Ø´®ÐпÚÖжÏ

N

Y

b)中断服务程序流程图

´®Ðпڳõʼ»¯

¶¨Ê±Æ÷1³õʼ»¯

ËÍ9600bpsµÄʱ¼ä³£Êý

Æô¶¯¶¨Ê±Æ÷1

¿ªÖжÏ

ÖóõÖµ

È¡Ê×Ö·Êý¾Ý

Æô¶¯´®Ðз¢ËÍ

µÈ´ýÖжÏ

a)主程序流程图

图 8-15 甲机发送程序流程图

Page 139: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24139/367

甲机(发送机)汇编语言程序: $INCLUDE (STC15.INC) ; 包含单片机寄存器定义文件 ORG 0000H LJMP MAINT ;主程序入口 ORG 0023H LJMP INTSE1 ; 串口 1 中断服务程序入口 ORG 0100HMAINT: MOV SP,#60H ; 设置堆栈指针 MOV SCON,#01000000B ;置串行口工作方式 1

MOV AUXR,#00H ;选择定时器 1 作为波特率发生器 MOV TMOD,#20H ; 定时器 1 为工作方式 2 MOV TH1,#0FDH ;9600bps 的时间常数 MOV TL1,#0FDH SETB TR1 ;启动定时器 1 SETB ES ; 串行口开中断 SETB EA ; 开中断 MOV DPTR,#ADDRT ;ADDRT 是首址,可以使用 EQU

定义 MOV R0,#00H ; 传送字节数初值 MOVX A,@DPTR ;取第一个发送字节 MOV SBUF,A ;启动串行口发送 SJMP $ ; 等待中断

Page 140: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24140/367

; 中断服务程序INTSE1: CLR TI ;将中断标志清零 CJNE R0,#7FH,LOOPT ;判断 128B 是否发送完 ,若没完 , 则转 CLR ES ;全部发送完毕,禁止串行口中断 LJMP ENDT ;转中断返回LOOPT: INC R0 ;修改计数值

INC DPTR ;修改地址指针MOVX A,@DPTR ;取发送数据MOV SBUF,A ;启动串行口

ENDT: RETI ; 中断返回END

Page 141: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24141/367

甲机的 C语言程序:#include “stc15.h” // 包含单片机寄存器定义文件unsigned char xdata ADDRT[128]; // 在外部 RAM区定义 128 个单元unsigned char num=0; //声明计数变量unsigned char *psend; // 指向发送数据区的指针void main (void) //主程序{

SCON=0x40; //置串行口工作方式 1AUXR=0x0; //选择定时器 1 作为波特率发生器TMOD=0x20; // 定时器 1 为工作方式 2TH1=0xfd; //产生 9600bps 的时间常数TL1=0xfd;TR1=1; //启动定时器 1ES=1; // 串行口开中断EA=1; // 开中断psend=ADDRT; // 设置发送数据缓冲区指针SBUF=*psend; // 发送第一个数据while(1); // 等待中断

}

Page 142: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24142/367

void UART_ISR(void) interrupt 4 // 中断号 4 是串口 1 中断{

TI = 0; //清发送中断标志num++; //修改计数变量值if(num==0x7F) ES=0; //判断是否发送完,若已完,则关中断else //否则,修改指针,发送下一个数据{

psend++;SBUF=*psend;

}}

Page 143: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24143/367

乙机接收数据的程序流程如图所示。´®Ðпڳõʼ»¯

¶¨Ê±Æ÷1³õʼ»¯

ËÍ9600bpsµÄʱ¼ä³£Êý

Æô¶¯¶¨Ê±Æ÷1

¿ªÖжÏ

ÖóõÖµ

µÈ´ýÖжÏ

ÇåÖжϱêÖ¾

È¡½ÓÊÕÊý¾Ý

Êý¾Ý¿é½ÓÊÕÍê·ñ£¿

ÐÞ¸ÄÖ¸Õë

Êý¾ÝËÍÏàÓ¦»º³åÇø

ÖжϷµ»Ø

¹Ø±Õ´®ÐÐÖжÏN

Y

a)Ö÷³ÌÐòÁ÷³Ìͼ b)ÖжϷþÎñ³ÌÐòÁ÷³Ìͼ

图 8-16 乙机接收数据流程图

Page 144: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24144/367

注意,接收方的波特率必须和发送方的波特率相同。乙机接收汇编语言程序:$INCLUDE (STC15.INC) ; 包含单片机寄存器定义文件 ORG 0000H LJMP MAINR ;转主程序 ORG 0023H LJMP INTSE2 ; 串口 1 中断服务程序入口 ORG 0100HMAINR:MOV SP,#60H ; 设置堆栈指针 MOV SCON,#01010000B ;置串行口工作方式 1 ,允许接

收 MOV AUXR,#00H ;选择定时器 1 作为波特率发生器 MOV TMOD,#20H ; 定时器 1 为工作方式 2

MOV TH1,#0FDH ;产生 9600bps 的时间常数 MOV TL1,#0FDH SETB TR1 ;启动定时器 1 SETB ES ; 串行口开中断

SETB EA ; 开中断 MOV DPTR,#ADDRR ; 数据缓冲区首址送 DPTR MOV R0,#00H ;置传送字节数初值 SJMP $ ; 等待中断

Page 145: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24145/367

; 中断服务程序INTSE2:CLR RI ;清接收中断标志

MOV A,SBUF ;取接收的数据 MOVX @DPTR,A ; 接收的数据送缓冲区

CJNE R0,#7FH,LOOPR ;判别接收完没有;若没有,转 LOOPR继续接收

CLR ES ;若接收完,则关串行口中断

LJMP ENDRLOOPR:INC R0 ;修改计数值

INC DPTR ;修改地址指针ENDR: RETI ; 中断返回

END乙机对应的 C语言程序请读者参照主机的 C语言程序自行编写。

Page 146: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24146/367

【例 8-2 】 设有甲、乙两台单片机,以工作方式 2 进行串行通信。每帧为 11 位,可程控的第 9 位数据为奇偶校验用的补偶位。编程实现如下所述的应答通信功能:甲机取一数据,进行奇偶校验后发送。乙机对收到的数据进行奇偶校验,若补偶正确则乙机向甲机发出应答信息“ 00H” ,代表“数据发送正确”,甲机接收到此信息后再发送下一个字节。若奇偶校验错误,则乙机向甲机发出应答信息“ 0FFH” ,代表“数据不正确”,要求甲机再次发送原数据,直至数据发送正确。甲机发送 128 字节数据后停止发送。乙机接收 128 字节数据。

Page 147: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24147/367

解:甲机与乙机串行通信的流程如图所示。

≥01H?数据N

¼×»úÖжϷþÎñ³ÌÐòÈë¿Ú£¨0023H£©

Çå·¢ËÍÖжϱêÖ¾´®Ðпڳõʼ»¯

Ö÷³ÌÐò

È¡·¢ËÍÊý¾Ý

ÊǽÓÊÕÖжÏÂð£¿

½ÓÊÕÊý¾Ý

¿ªÖжÏ

ÖóõÖµ

²¹Å¼²Ù×÷

Æô¶¯´®Ðпڷ¢ËÍ

µÈ´ýÖжÏ

Y

È¡Ô ·¢ËÍÊý¾Ý

²¹Å¼²Ù×÷

Æô¶¯´®Ðпڷ¢ËÍ

N

Y

ÖжϷµ»Ø

Y¹Ø´®ÐÐÖжÏ

ȡз¢ËÍÊý¾Ý

ÐÞ¸ÄÖ¸Õë

Êý¾Ý¿é·¢ËÍÍê·ñ£¿

²¹Å¼²Ù×÷

N

( a )甲机发送数据流程图

Page 148: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24148/367

ÆæżУÑéÕýÈ·?N

Y

Y

ÒÒ»úÖжϷþÎñ³ÌÐòÈë¿Ú£¨0023H£©

¹Ø´®ÐÐÖжÏ

Êý¾ÝËÍÊý¾Ý»º³åÇø

ÐÞ¸ÄÖ¸Õë

Çå·¢ËÍÖжϱêÖ¾

Êý¾Ý¿é½ÓÊÕÍê·ñ£¿

´®Ðпڳõʼ»¯

Ö÷³ÌÐò

ÊǽÓÊÕÖжÏÂð£¿

½ÓÊÕÊý¾Ý

¿ªÖжÏ

ÖüÆÊý³õÖµ

µÈ´ýÖжÏ

·¢ËÍÓ¦´ðÐÅÏ¢00H

N

Y

N

ÖжϷµ»Ø

·¢ËÍÓ¦´ðÐÅÏ¢0FFH

( b )乙机接收数据流程图

Page 149: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24149/367

甲机汇编源程序:$INCLUDE (STC15.INC) ; 包含 STC15F2K60S2 单片机寄存器定义文件 ADDRT EQU 0000H ORG 0000H LJMP MAINT ;跳至主程序入口地址 ORG 0023H ; 串口 1 中断服务程序入口 LJMP INTSET ORG 0100HMAINT: MOV SP,#60H

MOV PCON,#80H ; 波特率加倍MOV SCON,#10010000B;置工作方式 2 ,并允许接收MOV DPTR,#ADDRT ; 设置数据块首址 ADDRT 的地址指针MOV R0,#00H ; 设置发送字节初值

SETB ES ;允许串行口中断SETB EA ;CPU 开中断

MOVX A, @DPTR ;取第一个发送数据 MOV C,P ; 数据补偶 MOV TB8,C MOV SBUF,A ;启动串行口 , 发送数据 SJMP $

Page 150: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24150/367

; 中断服务程序INTSET: JB RI,LOOPT1; 接收中断?若 RI=1 ,则转接收乙机发送的应答信息 CLR TI ;因 RI=0 ,则必有 TI=1 ,表明是甲机发送数据的中断请求 LJMP ENDT ;甲机发送一数据完毕跳至中断返回程序LOOPT1: CLR RI ;清接收中断标志

MOV A,SBUF ;取乙机的应答数据 SUBB A,#01H ;判断乙机应答信息是否为“ 00H”

JC LOOPT2 ; 数据传送正确,则转 LOOPT2 MOVX A,@DPTR ; 数据传送不正确时,要求重新发送

MOV C,P MOV TB8,C MOV SBUF,A ;启动串行口,重发一次数据 LJMP ENDT ;跳至中断返回程序

LOOPT2:INCDPTR ;修改地址指针,发送下一个数据 INC R0 ;修改发送字节数计数值 MOVX A,@DPTR;下一个数据补偶 MOV C,P MOV TB8,C ; 不能直接使用 MOV TB8,P MOV SBUF,A ;启动串行口,发送新的数据

CJNE R0,#80H,ENDT ; 数据发送完?若没有发送完,则中断返回 CLR ES ;全部发送完毕,禁止串行口中断ENDT: RETI ; 中断返回

END

Page 151: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24151/367

甲机的 C语言程序:#include “stc15.h” // 包含 STC15F2K60S2 单片机寄存器定义文件unsigned char xdata ADDRT[128];unsigned char num=0,retval;unsigned char *mypdata;void main (void){

PCON=0x80;SCON=0x90;

ES=1; EA=1; mypdata=ADDRT; ACC=*mypdata; //将要发送的数据送到 ACC 中,以反映奇偶性 TB8=P; // 数据补偶,在汇编语言中不能这样用,但在 C语言中可以 SBUF=ACC; while(1);}

Page 152: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24152/367

void Serial_ISR(void) interrupt 4 { if(RI) //若 RI=1 ,说明是接收中断 {

RI=0; //将中断标志清零retval = SBUF; //将串行口缓冲器中的内容读到 retval

中 if(retval!=0) // 如果 retval 不等于 0 ,重新发送原数

据 {

ACC=*mypdata; TB8 = P; SBUF = ACC; }

else {

mypdata++; ACC=*mypdata;

TB8=P; SBUF=ACC; if(num++ == 0x7F) ES=0; }

} else TI = 0;}

Page 153: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24153/367

乙机汇编语言程序:$INCLUDE (STC15.INC) ; 包含 STC15F2K60S2 单片机寄存器定义文件 ADDRR EQU 0000H ORG 0000H

LJMP MAINR ;主程序入口 ORG 0023H ; 串行中断入口地址 LJMP INTSER ;转至串行口中断服务程序 ORG 0100H

MAINR:MOV SP,#60H MOV PCON,#80H ; 波特率加倍

MOV SCON,#10010000B ;置串行口为工作方式 2 ,允许接收 MOV DPTR,#ADDRR ; 数据指针首址 MOV R0,#00H ; 接收数据字节数初值 SETB ES ; 串行口开中断 SETB EA ;CPU 开中断 SJMP $ ; 等待中断

Page 154: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24154/367

; 串行口中断服务程序INTSER: JB RI,LOOPR1 ;若 RI= 1 ,则转接收程序入口 CLR TI ;若 RI=0 ,必有 TI=1 ,是发送中断,故应清零

LJMP ENDR ;跳至中断返回程序LOOPR1:CLR RI ;清接收中断标志

MOV A,SBUF ;读取接收的数据 MOV C,P ; 奇偶校验

JC LOOPR2 ;如 8 位数为奇,则转 LOOPR2再检测 RB8 位 ORL C,RB8

JC LOOPR3 ; 奇偶校验错误时,转 LOOPR3 LJMP LOOPR4 ;补偶正确,转 LOOPR4

LOOPR2:ANL C,RB8 ;8 位数为奇,再检测 RB8 位 JC LOOPR4 ;RB8=1,补偶正确,转 LOOPR4

LOOPR3:MOV A,#0FFH ; 发出应答信息“ 0FFH”给甲机 , 表明数据不正确 MOV SBUF,A LJMP ENDR ;跳至中断返回程序

LOOPR4:MOVX @DPTR,A ;将接收的正确数据送数据缓冲区 MOV A,#00H ; 数据传送正确,发出应答信息“ 00H”给甲机 MOV SBUF,A INC R0 ;修改指针 INC DPTR

CJNE R0,#80H,ENDR ;若数据没有接收完毕,则跳至中断返回 CLR ES ; 接收完毕,关串行口中断

ENDR: RETI ; 中断返回 END

Page 155: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24155/367

乙机的 C语言程序:#include “stc15.h” // 包含 STC15F2K60S2 单片机寄存器定义文件unsigned char xdata ADDRR[128];unsigned char num=0;unsigned char *mypdata;void main (void){

PCON=0x80;SCON=0x90;mypdata=ADDRR;

ES=1; EA=1;

while(1);}

Page 156: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24156/367

void Serial_ISR(void) interrupt 4 { if(RI) {

RI=0; ACC = SBUF; if(P==RB8) //P=RB8 时,奇偶校验正确 {

*mypdata = ACC; //保存数据SBUF=0x00; // 发出信息“ 0x00”mypdata++;if (num++ == 0x80) ES = 0;

} else

SBUF = 0xff; // 奇偶校验错误,发出信息“ 0xFF” } else

TI = 0;}

Page 157: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24157/367

【例 8-3 】 多机通信编程举例。现用简单实例说明多机串行通信中从机的基本工作过程。而实际应用中还需要考虑通信的规范协议。有些协议很复杂,在此不加以考虑。并且,一般情况下,最好使用 RS485 接口进行多机通信。假设系统晶振频率为 11.0592MHz 。

Page 158: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24158/367

设多机单工通信示意图如图所示。编程实现如下功能:主机:先向从机发送一帧地址信息,然后再向从机发送 10 个数据信息。从机:接收主机发来的地址帧信息,并与本机的地址号相比较,若不符合,

仍保持 SM2=1 不变;若相等, 则使 SM2清零,准备接收后 续的数据信息,直至接收完 10 个数据信息。

TXD

Vss

RXD

RXD

Vss

VssÖ÷»ú

1#´Ó»ú

2#´Ó»ú

图 8-18 多机单工通讯连线图

Page 159: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24159/367

解:主机和从机的程序流程如图所示。

N

´®ÐпÚÖжϷþÎñ³ÌÐòÈë¿Ú

¹Ø´®ÐпÚÖжÏ

ÐÞ¸ÄÖ¸Õë

Çå·¢ËÍÖжϱêÖ¾

³õʼ»¯

Ö÷³ÌÐò

ÅжÏÈ«²¿Êý¾Ý·¢ËÍÍꣿ

¿ªÖжÏ

ÉèÖÃÖ¸Õë

ÖÃTB8=1£¬·¢Ë͵ØÖ·Ö¡ÐÅÏ¢

µÈ´ýÖжÏ

Æô¶¯·¢ËÍ

ÇåTB8λ²¢×¼±¸·¢ËͺóÐøÊý¾ÝÐÅÏ¢

Y

ÖжϷµ»Ø

a)Ö÷»ú³ÌÐòÁ÷³Ìͼ

N

´®ÐпÚÖжϷþÎñ³ÌÐòÈë¿Ú

ÐÞ¸ÄÖ¸Õë

Çå½ÓÊÕÖжϱêÖ¾

³õʼ»¯SM2=1

Ö÷³ÌÐò

ÅжÏRB8Ϊ1£¿

¿ªÖжÏ

ÉèÖÃÖ¸Õë

µÈ´ýÖжÏÈ¡Êý¾Ýµ½

Êý¾Ý»º³åÇø

´Ó´®ÐпÚÈ¡Êý¾Ý

Y

ÖжϷµ»Ø

b) ´Ó»ú³ÌÐòÁ÷³Ìͼ

ÅжÏÈ«²¿Êý¾Ý½ÓÊÕÍꣿ

Óë±¾´Ó»úµØÖ·Ïà±È½ÏÊÇ·ñÏà·û£¿

ÇåSM2λ

ÖÃSM2=1

N

N

Y

Y

图 8-19 多机单工通信流程图

Page 160: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24160/367

主机汇编语言程序:$INCLUDE (STC15.INC) ; 包含 STC15F2K60S2 单片机寄存器定义文件 ADDRT EQU 0000H SLAVE EQU 5 ;从机地址号 ORG 0000H

LJMP MAINT ;主程序入口地址 ORG 0023H LJMP INTST ; 串口 1 中断入口地址 ORG 0100H

MAINT:MOV SP,#60H MOV SCON,#0C0H ; 串行口方式 3

MOV AUXR,#00H ;选择定时器 1 作为波特率发生器 MOV TMOD,#20H ;置 T1 工作方式 2 MOV TH1,#0FAH ;置 4800 波特率 MOV TL1,#0FAH ; 相应的时间常数 MOV DPTR,#ADDRT ;置数据地址指针 MOV R0,#00H ; 发送数据字节计数清 0 MOV R2,#SLAVE ;从机地址号→ R2 SETB TR1 ;启动 T1 SETB ES 串行口开中断 SETB EA ;CPU 开中断 SETB TB8 ;置位 TB8 ,作为地址帧信息特征 MOV A,R2 ; 发送地址帧信息 MOV SBUF,A SJMP $ ; 等待中断

Page 161: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24161/367

; 串行口中断服务程序 :INTST:CLR TI ;清发送中断标志

CLR TB8 ;清 TB8 位,为发送数据帧信息做准备 MOVX A,@DPTR ; 发送一个数据字节 MOV SBUF,A INC DPTR ;修改指针 INC R0 CJNE R0,#0AH,LOOPT ;判数据字节是否发送完 CLR ES

LOOPT:RETIEND

Page 162: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24162/367

主机的 C语言程序:#include “stc15.h” // 包含 STC15F2K60S2 单片机寄存器定义文件unsigned char xdata ADDRT[10]; //保存数据的外部 RAM 单元unsigned char SLAVE; //保存从机地址号的变量unsigned char num=0, *mypdata;void main (void){ SCON=0xC0;

AUXR=0x0;TMOD=0x20;

TH1=0xfa; TL1=0xfa;

mypdata=ADDRT; SLAVE=5; // 定义从机地址,在此假设从机地址为 5

TR1=1;ES=1;

EA=1;TB8=1;

SBUF=SLAVE; // 发送从机地址 while(1); // 等待中断}

Page 163: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24163/367

void Serial_ISR(void) interrupt 4

{

TI=0;

TB8=0;

SBUF=*mypdata; // 发送数据mypdata++; //修改指针num++;

if(num==0x0a) ES=0;

}

Page 164: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24164/367

从机汇编语言程序:$INCLUDE (STC15.INC) ; 包含 STC15F2K60S2 单片机寄存器定义文件 ADDRR EQU 0000H SLAVE EQU 5 ;从机地址号 ORG 0000H

LJMPMAINR ;从机主程序入口地址 ORG 0023H LJMP INTSR ; 串口 1 中断入口地址 ORG 0100H

MAINR:MOV SP,#60H MOV SCON,#0F0H ; 串行口方式 3, SM2=1,REN=1, 接收状态 MOV AUXR,#00H ;选择定时器 1 作为波特率发生器 MOV TMOD,#20H ;置 T1 为工作方式 2 MOV TH1,#0FAH ;置 4800 波特率 MOV TL1,#0FAH ; 相应的时间常数 MOV DPTR,#ADDRR ;置数据地址指针 MOV R0,#0AH ;置接收数据字节数指针 SETB TR1 ;启动 T1 SETB ES ; 串行口开中断 SETB EA ;CPU 开中断 SJMP $ ; 等待中断

Page 165: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24165/367

INTSR: CLR RI ;清接收中断标志 MOV A,SBUF ;取接收信息

MOV C,RB8 ;取 RB8 (信息特征位)→ C JNC LOOPR1 ;RB8=0 为数据帧信息,转 LOOPR1 XRL A,#SLAVE ;RB8=1 为地址帧信息,与本机地址号 SLAVE比较 JZLOOPR2 ; 地址相等,则转 LOOPR2 LJMP ENDR ; 地址不相等,则转中断返回 ENDR

LOOPR2:CLR SM2 ;清 SM2 ,为后面接收数据帧信息做准备 LJMP ENDR ; 中断返回

LOOPR1:MOVX @DPTR,A ; 接收的数据→数据缓冲区 INC DPTR ;修改地址指针 DJNZ R0,ENDR

; 数据字节没全部接收完,则转 LOOPR2 SETB SM2 ;全部接收完,置 SM2=1

ENDR: RETI ; 中断返回 END

Page 166: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24166/367

对应的 C语言程序:#include “stc15.h” // 包含 STC15F2K60S2 单片机寄存器定义文件unsigned char xdata ADDRR[10];unsigned char SLAVE,num=0x0a,rdata,*mypdata;void main (void){

SCON=0xf0;AUXR=0x0;TMOD=0x20;TH1=0xfa;TL1=0xfa;mypdata=ADDRR;

SLAVE=5; // 设定从机地址TR1=1;

ES=1; EA=1;

while(1); // 等待中断}

Page 167: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24167/367

void Serial_ISR(void) interrupt 4 {

RI=0;rdata=SBUF; //将接收缓冲区的数据保存到 rdata 变量中if(RB8) //RB8=1说明收到的信息是地址

{ if(rdata==SLAVE) // 如果地址相等,则 SM2=0

SM2=0;}

else // 接收到的信息是数据 {

*mypdata=rdata;mypdata++;num--;if(num==0x00) // 所有数据接收完毕 SM2=1; //令 SM2=1 ,为下一次接收地址信息做准

备 }}

Page 168: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24168/367

进行多机通信时应注意,只有在从机启动以后,处于接收状态,主机才能开始发送信息。

【例 8-4】串口 1 使用独立波特率发生器作串行通信的实例。

#include “stc15.h” // 包含 STC15F2K60S2寄存器定义文件

#include “intrins.h”#define RELOAD_COUNT 0xfb //Fosc=18.432MHz,12T,SMOD=0,9600bpsunsigned char array[9]={0,2,4,6,8,10,12,14,16};void UART_send(unsigned char i);void delay(void);

Page 169: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24169/367

void main(void){

unsigned char i; // 串口初始化

SCON = 0x50; //0101,0000 8 位可变波特率,无奇偶校验位T2H = 0;

T2L = RELOAD_COUNT;AUXR = 0x19; // T2R = 1 ,启动定时器 2

// T2_C/ =0 ,定时器方式 //S1ST2 = 1 ,选择定时器 2 作为波特率发生

器ES = 1; //允许串口中断EA = 1; // 开总中断UART_send(0x34); // 串口发送数据表示单片机串口正常工作UART_send(0xa7); // 串口发送数据表示单片机串口正常工作for(i = 0;i<9;i++)

UART_send(array[i]);while(1);

}

T

Page 170: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24170/367

void UART_send(unsigned char i)

{

ES = 0; // 关串口中断TI = 0; //清零串口发送完成中断请求标志SBUF = i;

while(TI ==0); // 等待发送完成TI = 0; //清零串口发送完成中断请求标志ES = 1; //允许串口中断

}

Page 171: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24171/367

void UART_Receive(void) interrupt 4{

unsigned char k;if(RI==1)

{RI=0;k=SBUF;UART_send(k+1);

} else

TI=0;}

Page 172: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24172/367

【例 8-5】串行口 2 的使用实例。利用串行口 2 发送一组数据。假设晶振频率SYSclk=18.432MHz ,波特率为 115200bps 。发送数据以 0 作为结束标志。

Page 173: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24173/367

解:假设使用 1T 方式,汇编语言程序如下:$INCLUDE (STC15.INC) ; 包含 STC15F2K60S2 单片机寄存器定义文件; 定义奇偶校验模式NONE_PARITY EQU 0 ;无校验ODD_PARITY EQU 1 ; 奇校验EVEN_PARITY EQU 2 ; 偶校验MARK_PARITY EQU 3 ;Mark 校验SPACE_PARITY EQU 4 ; 空检验PARITYBIT EQU EVEN_PARITY ;测试偶校验S2RI EQU 01H S2TI EQU 02H S2RB8 EQU 04H S2TB8 EQU 08H BUSY BIT 20H.0 ; 传输忙标志

Page 174: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24174/367

ORG 0000H LJMP MAIN ORG 0043H LJMP UART2_ISR ORG 0100HMAIN:CLR BUSY CLR EA MOV SP, #7FHIF PARITYBIT==NONE_PARITY MOV S2CON, #50H ;8位 UARTELSEIF (PARITYBIT==ODD_PARITY)||(PARITYBIT==EVEN_PARITY) ||

(PARITYBIT==MARK_PARITY) MOV S2CON, #0DAH ;9位 UART, 校验位初始值设为 1ELSEIF PARITYBIT==SPACE_PARITY MOV S2CON, #0D2H ;9位 UART, 校验位初始值设为 0ENDIF

Page 175: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24175/367

MOV AUXR, #05H ;T2 工作于 1T模式 ,T2 作为波特率发生器

MOV T2L, #0D8H ; 设置波特率发生器自动重装常数低节

MOV T2H, #0FFH ; 设置波特率发生器自动重装常数高字

ORL AUXR, #10HORL IE2, #01H ;允许 UART2 中断SETB EAMOV DPTR, #TESTSTR ; 数字串首址送 DPTRLCALL SENDSTRING ; 调用发送子程序SJMP $TESTSTR:;测试数字串DB "STC15F Uart2 Test!",0DH,0AH,0

Page 176: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24176/367

;UART2 中断服务子程序UART2_ISR:

PUSH ACCPUSH PSWMOV A, S2CON ;读取 UART2控制寄存器JNB ACC.0, CHECKTI ;检查 S2RI 位ANL S2CON, #NOT S2RI ;将 S2RI 位清 0MOV P0, S2BUF ;在 P0 口上显示接收到的数据ANL A, #S2RB8 ;获得 S2RB8MOV P2, A ;在 P2.2 上显示奇偶校验位LJMP ISR_EXIT

CHECKTI:JNB ACC.1, ISR_EXIT ;检查 S2TI 位ANL S2CON, #NOT S2TI ;将 S2TI 位清 0CLR BUSY ;将传输忙标志清 0

ISR_EXIT:POP PSWPOP ACC

RETI

Page 177: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24177/367

; 发送一个字节子程序(发送字节存放在 ACC 中)SENDDATA:

JB BUSY, $ ; 等待前一个数据发送结束JNB P, EVEN1INACC ; 根据 P 标志设置奇偶校验位

ODD1INACC:IF PARITYBIT==ODD_PARITY

ANL S2CON, #NOT S2TB8 ; 设置奇偶校验位为 0ELSEIF PARITYBIT==EVEN_PARITY

ORL S2CON, #S2TB8 ; 设置奇偶校验位为 1ENDIF

SJMP PARITYBITOKEVEN1INACC:IF PARITYBIT==ODD_PARITY

ORL S2CON, #S2TB8 ; 设置奇偶校验位为 1ELSEIF PARITYBIT==EVEN_PARITY

ANL S2CON, #NOT S2TB8 ; 设置奇偶校验位为 0ENDIFPARITYBITOK: ; 奇偶校验位设置完毕

SETB BUSYMOV S2BUF, A ;写数据到 UART2缓冲器

RET

Page 178: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24178/367

; 发送数字串子程序( DPTR 是数字串的首地址)SENDSTRING:

CLR AMOVCA, @A+DPTR ;读取当前数据JZ STRINGEND ;检查数字串是否发送完毕(以 0 作为标志)INC DPTR ;修改地址指针LCALL SENDDATA ; 调用发送字节子程序发送当前字符SJMP SENDSTRING ; 发送下一个字符

STRINGEND:RET

END

Page 179: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24179/367

对应的 C语言程序如下:#include "stc15.h"#include "intrins.h"typedef unsigned char BYTE;typedef unsigned int WORD;// 定义奇偶校验模式#define NONE_PARITY 0 //无校验#define ODD_PARITY 1 // 奇校验#define EVEN_PARITY 2 // 偶校验#define MARK_PARITY 3 //Mark 校验#define SPACE_PARITY 4 // 空检验#define PARITYBIT EVEN_PARITY //测试偶校验#define S2RI 0x01#define S2TI 0x02#define S2RB8 0x04#define S2TB8 0x08bit busy;void SendData(BYTE dat);void SendString(char *s);

Page 180: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24180/367

void main(void){#if (PARITYBIT == NONE_PARITY) S2CON = 0x50; //8 位可变波特率 UART#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) ||

(PARITYBIT == MARK_PARITY) S2CON = 0xda; //9 位波特率可变 UART, 奇偶校验位设置初值为 1#elif (PARITYBIT == SPACE_PARITY) S2CON = 0xd2; //9 位波特率可变 UART, 奇偶校验位设置初值为 0#endif AUXR = 0x05; //T2 工作于 1T模式

T2L=0xD8; // 设置波特率发生器自动重装常数低字节T2H=0xFF; // 设置波特率发生器自动重装常数高字节AUXR|=0x10;IE2 = 0x01; //允许 UART2 中断EA = 1; SendString("STC15F\r\nUart2 Test !\r\n");while(1);

}

Page 181: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24181/367

//UART2 中断服务程序void Uart2(void) interrupt 8 using 1{ if (S2CON & S2RI) { S2CON &= ~S2RI; // 接收中断标志清 0 P0 = S2BUF; //在 P0 口上显示接收到的数据 P2 = (S2CON & S2RB8); //在 P2.2 上显示奇偶校验位 } if (S2CON & S2TI) { S2CON &= ~S2TI; // 发送中断标志清 0 busy = 0; // 发送忙标志清 0 }}

Page 182: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24182/367

// 发送一个字节子程序void SendData(BYTE dat){

while (busy); // 等待前一个数据发送完毕ACC = dat; //检测 P 标志位 (PSW.0) if (P) // 根据 P 标志设置奇偶校验位{#if (PARITYBIT == ODD_PARITY)

S2CON &= ~S2TB8; // 设置奇偶校验位为 0#elif (PARITYBIT == EVEN_PARITY)

S2CON |= S2TB8; // 设置奇偶校验位为 1#endif}else{#if (PARITYBIT == ODD_PARITY)

S2CON |= S2TB8; // 设置奇偶校验位为 1#elif (PARITYBIT == EVEN_PARITY)

S2CON &= ~S2TB8; // 设置奇偶校验位为 0#endif}busy = 1;S2BUF = ACC; //将数据写入 UART2缓冲器

}

Page 183: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24183/367

// 发送字符串子函数void SendString(char *s)

{

while (*s) //检查字符串结束标志 {

SendData(*s++); // 发送当前字符并修改字符串指针 }

}

Page 184: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24184/367

二、 RS232 串行通信接口 在以计算机为中心的数据采集与自动控制系统中,通常需要用单片机采集数据,然后将数据用异步串行通信方式传给计算机;要完成的控制命令由计算机通过串行通信方式传给单片机,由单片机进行控制。 计算机和单片机之间的串行通信一般采用 RS-

232或 RS-485 总线标准接口。这里介绍 RS-232

接口串行通信的设计方法。

Page 185: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24185/367

RS-232是早期为公用电话网络数据通信而制定的标准。其逻辑电平与 TTL/CMOS 电平完全不同。逻辑“ 0” 规定为 +5~+15V 之间,逻辑“ 1” 规定为 -5~-15V 之间。由于 RS-232 发送和接收之间有公共地,传输采用非平衡模式,因此共模噪声会耦合到信号系统中,标准中建议的最大通信距离为 15米。

下面通过一个实例,介绍计算机与单片机进行RS232 通信的硬件接口设计和软件设计。

Page 186: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24186/367

【例 8-6 】 计算机向单片机发送一个数据,单片机接收到数据后,将接收到的数据按位取反后回发给计算机。 假设单片机的系统时钟为 11.0592MHz ,通信参数为“ 9600, n, 8, 1” (这是常见的通信参

数表示方法,即波特率为 9600bit/s, 8 个数据位,1 个停止位,没有奇偶校验)。在计算机上显示从单片机发送过来的数据。在这种方式中,计算机通常称为上位机。

Page 187: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24187/367

1 、硬件接口设计从硬件上讲,计算机的串行口是 RS-232 电平的,而单片机的串口是 TTL 电平的。因此,必须通过电路实现 TTL 电平和 RS-232 电平的转换。常用的电平转换集成电路是 MAX232 或者与它兼容转换芯片。该芯片采用单电源 ( + 5V )供电, RS232 电平由内部电荷泵产生。

Page 188: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24188/367

单片机与计算机进行串行通信的硬件连接如图所示。

16

2

7

3

84

95

DB9

1

3

4

5

13R1IN

C1+

C1-

14

GND

VCC

TxD/P3.1

RxD/P3.012

11

2

6

15

连接计算机串行口

C2+

C2-

T1OUT

V+

V-

R1OUT

T1IN

16

10μ F 0. 1μ F

0. 1μ F 0. 1μ F

0. 1μ F

VCC

分别连接单片机的P3.0和P3.1引脚

MAX232,MAX3232,SP232或SP3232

PC-TxDPC-RxD

图 8-20 单片机与计算机进行串行通信的硬件连接

Page 189: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24189/367

目前,较新的个人计算机都没有了 DB9 串行口,特别是笔记本电脑,而 USB 接口较多。在这种情况下,我们可以使用 USB转串口的芯片进行转换,常见的 USB转串口芯片有 CH340T、 CP2010 等。

Page 190: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24190/367

CH340T 与单片机的接口电路如图所示。

USBD-USBD+

VbusD-D+

GND

J1

USB-JACK

Vbus

C122p

C222p

Vbus

USBD-USBD+

MCU-RxDMCU-TxDC3

0.01uF

Y1

12M

C40.1uF

NOS#20

CKO1

ACT#2

V35

UD+6

UD-7

GND8

TXD3

NC.17

RXD4

RTS#16

DTR#15

RI#13

DSR#12

CTS#11

XO10 XI9

VCC19

R23218

DCD#14

CH340T

图 8-21 CH340T 与单片机的接口电路

Page 191: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24191/367

USB 转串口电路只是实现 USB 传输协议和UART 传输协议之间的转换,对于用户而言,程序设计上没有本质的改变,相当于一个串口使用。唯一需要注意的是,在计算机上编程选择串口的时候,串口号的选择要正确。

Page 192: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24192/367

2 、软件设计软件设计往往因应用系统要求的不同而不同。软件设计分为上位机程序设计和单片机程序设计两部分。如果仅仅为了测试串口的电路连接以及单片机通信程序设计正确与否,上位机程序可以直接使用现成的串口调试助手软件。当然,也可以使用 Visual C++ 等可视化程序开发环境自行设计。串口调试助手软件可以从 www.mcu001.com中下载。

Page 193: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24193/367

下面的单片机程序设计中,利用 STC15F2K60S2单片机的串口 2 和上位计算机通信。如果采用串行口 1 进行通信,则可以选择定时器 1 作为波特率发生器,也可以选择定时器 2作为波特率发生器,程序设计方法与此类似,请读者自行实验。

Page 194: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24194/367

汇编语言程序如下(假设系统晶振为 11.0592MHz ,波特率为 9600bit/s ):$INCLUDE (STC15.INC) ; 包含 STC15F2K60S2 单片机寄存器定义文件BITTEST DATA 20HS2TIbit BIT 01HS2RIbit BIT 00H ORG 0000H

LJMP MAINORG 0043HLJMP UART2_ISRORG 0100H

MAIN: MOV SP,#60H ; 设置堆栈MOV S2CON,#50H ;8 位可变波特率,无奇偶校验位 ,允许接收MOV T2L,#0FDH

MOV T2H, #0FFHMOV AUXR,#11H ;T2R = 1(启动 T2), S1S2 = 1MOV IE2, #01H ;允许串口 2 中断 ,ES2=1SETB EASJMP $

Page 195: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24195/367

UART2_ISR:

MOV BITTEST,S2CON;将 S2CON保存到 20H 单元以便位寻址JBC S2RIbit,RDATA;若是接收中断,则将 S2RI清零CLR S2TIbit ;否则就是发送中断,将 S2TI清零LJMP RETURN

RDATA: MOV A,S2BUF ;读取收到的数据 CPL A

MOV S2BUF ,A ;将收到的数据发送回去RETURN: MOV S2CON,BITTEST

;该语句可以起到中断标志清零的作用 RETI

END

Page 196: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24196/367

对应的 C语言程序如下:#include “stc15.h” // 包含 STC15F2K60S2 单片机寄存器定义文件char bdata bittest; // 为了保存中断标志sbit TIbit= bittest^1; //第 1 位sbit RIbit= bittest^0; //第 0 位void main(void){

S2CON=0x50;T2L=0xFD;T2H-0xFF;AUXR=0x11;IE2=0x01;

EA=1;while(1);

}

Page 197: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24197/367

void UART2_ISR(void) interrupt 8{

unsigned char tmpdata;bittest=S2CON;if (RIbit){

RIbit = 0;tmpdata=S2BUF;S2BUF=~tmpdata;

}else

TIbit=0; S2CON=bittest; //清 0 中断标志}

Page 198: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24198/367

三、 RS485 串行通信接口RS-485 串行数据接口是为弥补 RS-232 通信距离短、速率低等缺点而产生的。在 RS-422基础上制定的标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性。 RS-485 标准只规定了平衡发送器和接收器的电特性,而没有规定接插件、传输电缆和应用层通信协议。

Page 199: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24199/367

RS-485RS-485 数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为 A ,另一线定义为 B, A、 B 之间的正电平在 +2V~ +6 V ,表示逻辑状态“ l” ;负电平在 -2V~ -6 V ,表示逻辑状态“ 0” 。RS-485 标准的最大传输距离约为 1200米,最大传输速率为 10Mbps 。

Page 200: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24200/367

RS-485通常, RS-485 网络采用平衡双绞线作为传输介质。平衡双绞线的长度与传输速率成反比,只有在 20 kbps 速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般来说, 100米长的双绞线最大传输速率仅为 1Mbps 。如果采用光电隔离方式,则通信速率一般还会受到光电隔离器件响应速度的限制。

Page 201: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24201/367

RS-485利用 RS-485 标准,可以建立一个相对经济、具有高噪声抑制、高传输速率的通信平台,该平台同时具有传输距离远、宽共模范围、控制方便等优点。目前,在工程应用的现场网络中, RS-485 半双工异步通信总线被广泛应用在集中控制枢纽与分散控制单元之间通信的场合。

Page 202: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24202/367

一台计算机作为主机,通过 RS-485 连接现场的控制单元,系统结构如图所示。

计算机

RS232-RS485转换接口

#1机 #2机 #30机

R1 R2

RS-485接口 RS-485接口 RS-485接口

……

图 8-23 主从结构的 RS-485 网络结构图

Page 203: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24203/367

RS-485 接 口芯片 可 以 使 用半双 工 传 输 的MAX3082 (或者其他 RS485 接口芯片,如MAX487 )。MAX3082 的结构及典型的半双工通信电路图如图所示。在图中,单片机接收

数据时,应通过指令将P1.0清 0 ;单片机发送数据时,应通过指令将P1.0置 1 。

5 GND

VCC

MCU-TXD

MCU-RXD0.1uF

RO 1

DE 3RE 2

DI 4

6 A

7 B

8 VCC

RtP1.0

MAX3082

图 8-24 MAX3082 的结构及典型的半双工通信电路图

Page 204: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24204/367

连接计算机的 RS-232和 RS-485转换电路如图所示。

16

27

38

49

5

DB9

1

3

4

5

13R1IN

C1+

C1-

14

GND

VCC

485-RO

485-DI12

11

2

6

15

连接计算机串行口 C2+

C2-

T1OUT

V+

V-

R1OUT

T1IN

16

10μ F 0. 1μ F

0. 1μ F 0. 1μ F

0. 1μ F

VCC

MAX232,MAX3232,SP232或SP3232

PC-TxDPC-RxD

RO1

RE2

DE3

DI4

GND5

B6

A7

VCC8

MAX485

VCC

R1

120Ω

8R2IN

RE-DE9R2OUTPC-DTR

图 8-25 连接计算机的 RS-232和 RS-485 转换电路

Page 205: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24205/367

四、 SPI 通信接口1、 SPI 接口简介

STC15F2K60S2集成了串行外设接口 (Serial Peripheral Interface ,简称 SPI) 。SPI 接口既可以和其他微处理器通信,也可以 与具有 SPI 兼容接 口 的 器件, 如存储器、 A/D 转换器、 D/A 转换器、 LED 或LCD驱动器等进行同步通信。

Page 206: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24206/367

SPI 接口有两种操作模式:主模式和从模式。在主模式中支持高达 3Mbit/s 的速率;从模式时速度无法太快,速度在 SYSclk/8 以内较好。

此外, SPI 接口还具有传输完成标志和写冲突标志保护功能。

Page 207: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24207/367

2、 STC15F2K60S2 单片机的 SPI 接口的结构

图 8-26 STC15F2K60S2 单片机的 SPI 功能方框图

S

M

MS

S

M

MISOP1.4

MOSIP1.3

SCLKP1.5

SSP1.2

8位移位寄存器

数据缓冲区

时钟分频器选择时钟逻辑

SPI状态寄存器

SPI控制

CPU时钟

SPI中断请求信号 内部数据总线

SPI控制寄存器

引脚控制逻辑

SS

IG

DO

RD

MS

TR

CP

HA

CP

OL

SP

R1

SP

R0

SP

R1

SP

R0

SP

IF

WC

OL

SPI时钟(主机)

SP

EN

MSTRMSTRSPENSPEN

时钟分频器4, 16, 64, 128

Page 208: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24208/367

说明SPI 的核心是一个 8 位移位寄存器和数据缓冲器,数据可以同时发送和接收。在 SPI 数据的传输过程中,发送和接收的数据都存储在缓冲器中。对于主模式,若要发送一个字节数据,只需将这个数据写到 SPIDAT寄存器中。主模式下 /SS 信号不是必须的。在从模式下,必须在 /SS 信号变为有效并接收到合适的时钟信号后,方可进行数据的传输。在从模式下,如果一个字节传输完成后, /SS 信号变为高电平,这个字节立即被硬件逻辑标志为接收完成, SPI 接口准备接收下一个数据。

Page 209: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24209/367

3、 SPI 接口的数据通信( 1) SPI 接口的信号

MISO (与 P1.4共用)MOSI (与 P1.3共用)SCLK (与 P1.5 )/SS (与 P1.2共用)

4 根信号线构成。 SPI 接口的引脚可以切换。

Page 210: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24210/367

MOSI(Master Out Slave In ,主出从入)主器件的输出和从器件的输入,用于主器件到从器件的串行数据传输。根据 SPI 规范,多个从机共享一根 MOSI 信号线。在时钟边界的前半周期,主机将数据放在MOSI 信号线上,从机在该边界处获取该数据。

Page 211: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24211/367

MISO(Master In Slave Out ,主入从出)从器件的输出和主器件的输入。用于实现从器件到主器件的数据传输。SPI 规范中,一个主机可连接多个从机,因此,主机的 MISO 信号线会连接到多个从机上,或者说,多个从机共享一根 MISO 信号线。当主机与一个从机通信时,其他从机应将其MISO引脚驱动置为高阻状态。

Page 212: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24212/367

SCLK( SPI Clock ,串行时钟信号)串行时钟信号是主器件的输出和从器件的输入,用 于 同 步主器件和从器件之 间 在 MOSI 和MISO 线上的串行数据传输。当主器件启动一次数据传输时,自动产生 8个SCLK 时钟周期信号给从机。在 SCLK 的每个跳变处(上升沿或下降沿)移出一位数据。一次数据传输可以传输一个字节的数据。

Page 213: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24213/367

SCLK 、 MOSI 和 MISO 通常用于将两个或更多个 SPI 器件连接在一起

数 据 通 过 MOSI 由主机 传 送到从机 , 通 过MISO由从机传送到主机。SCLK 信号在主模式时为输出,在从模式时为输入。如果 SPI 接 口被禁止 ,即特殊功能寄存器SPCTL 中的 SPEN=0 (复位值),这些管脚都可作为 I/O 口使用。

Page 214: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24214/367

( Slave Select ,从机选择信号)这是一个输入信号。主器件用它来选择处于从模式的 SPI模块。在主模式下, SPI 接口只能有一个主机,不存在主机选择问题。在该模式下 /SS 不是必须的。主模式下通常将主机的 /SS引脚通过 10kΩ 的电阻上拉高电平。每一个从机的 /SS 接主机的I/O 口,由主机控制电平高低,以便主机选择从机。在从模式下,不论发送还是接收, /SS 信号必须有效。因此在一次数据传输开始之前必须将 /SS拉为低电平。 SPI主机可以使用 I/O 口选择一个 SPI 器件作为当前的从机。

SS

Page 215: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24215/367

SPI从器件通过其 /SS脚确定是否被选择。如果满足下面的条件之一,就被忽略:

如果 SPI功能被禁止,即 SPEN 位为 0 (复位值);如果 SPI配置为主机,即MSTR 位为 1 ,并且 P1.4配置为输出( P1M0.4=0、 P1M1.4=1 );如果 /SS脚被忽略,即 SSIG 位为 1 ,该脚配置用于 I/O口功能。

注:即使 SPI 被配置为主机( MSTR=1 ),仍然可以通过拉低 /SS 脚配置为从机(如果 P1.4 配置为输入且SSIG=0 )。要使能该特性,应当置位 SPIF

( SPSTAT.7 )。

Page 216: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24216/367

( 2) SPI 接口的数据通信方式STC15F2K60S2 单片机的 SPI 接口的数据通信方式有 3种:

单主机 - 单从机方式双器件方式(器件可互为主机和从机)单主机 - 多从机方式。

Page 217: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24217/367

1 )单主机 - 单从机方式单主机 - 单从机方式的连接如图所示。

MOSI MOSI

SCLK

MI SO MI SO

SS端口位

8位移位寄存器

主机 从机

8位移位寄存器

SCLKSPI时钟发生器

图 8-27 SPI 接口的单主机 - 单从机连接方式

Page 218: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24218/367

在图中,从机的 SSIG( SPCTL.7 )为 0 ,用于选择从机。 SPI主机可使用任何端口位(包括 P1.4/ )来控制从机的 脚。

MOSI MOSI

SCLK

MI SO MI SO

SS端口位

8位移位寄存器

主机 从机

8位移位寄存器

SCLKSPI时钟发生器

SSSS

图 8-27 SPI 接口的单主机 - 单从机连接方式

Page 219: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24219/367

主机 SPI 与从机 SPI的 8 位移位寄存器连接成一个循环的 16 位移位寄存器。当主机程序向 SPDAT写入一个字节时,立即启动一个连续的 8 位移位通信过程:主机的 SCLK引脚向从机的 SCLK引脚发出一串脉冲,在这串脉冲的驱动下,主机 SPI的 8 位移位寄存器中的数据移到了从机 SPI的 8 位移位寄存器中。与此同时,从机 SPI的 8 位移位寄存器中的数据移到了主机 SPI的 8 位移位寄存器中。由此,主机既可向从机发送数据,又可读从机中的数据。

MOSI MOSI

SCLK

MI SO MI SO

SS端口位

8位移位寄存器

主机 从机

8位移位寄存器

SCLKSPI时钟发生器

Page 220: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24220/367

2 )双器件方式双器件方式也称为互为主从方式,其连接方式如图所示。

MOSI MOSI

SCLK

MISO MISO

SS

8位移位寄存器

主机或从机 主机或从机

8位移位寄存器

SCLKSPI时钟发生器 SPI时钟发生器

SS

图 8-28 SPI 接口的双器件连接方式

Page 221: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24221/367

在图中,两个器件可以互为主从。当没有发生 SPI操作时,两个器件都可配置为主机( MSTR=1 ),将SSIG清零并将 P1.4( )配置为准双向模式。当其中一个器件启动传输时,可将 P1.4配置为输出并驱动为低电平,这样就强制另一个器件变为从机。

MOSI MOSI

SCLK

MISO MISO

SS

8位移位寄存器

主机或从机 主机或从机

8位移位寄存器

SCLKSPI时钟发生器 SPI时钟发生器

SS

SS

Page 222: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24222/367

双方初始化时将自己设置成忽略 /SS脚的 SPI从模式。当一方要主动发送数据时,先检测 /SS脚的电平,如果 /SS脚是高电平,就将自己设置成忽略 /SS脚的主模式。通信双方平时将 SPI置成没有被选中的从模式。在该模式下, MISO、 MOSI、 SCLK 均为输入,当多个MCU的 SPI 接口以此模式并联时不会发生总线冲突。这种特性在互为主从、一主多从等应用中很有用。注意,互为主从模式时,双方的 SPI 速率必须相同。如果使用外部晶体振荡器,双方的晶体频率也要相同。

Page 223: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24223/367

3 )单主机 - 多从机方式单主机 - 多从机方式的连接如图所示。

MOSI MOSI

SCLK

MISO MISO

SS

8位移位寄存器

主机 1从机

8位移位寄存器

SCLKSPI时钟发生器

MOSI

MISO

SS

n从机

8位移位寄存器

SCLK

端口位

端口位

图 8-29 SPI 接口的单主机 - 多从机连接方式

Page 224: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24224/367

在图中,从机的 SSIG( SPCTL.7 )为 0 ,从机通过对应的 /SS 信号被选中。 SPI主机可使用任何端口位(包括 P1.4 )来控制从机的 /SS 。

MOSI MOSI

SCLK

MISO MISO

SS

8位移位寄存器

主机 1从机

8位移位寄存器

SCLKSPI时钟发生器

MOSI

MISO

SS

n从机

8位移位寄存器

SCLK

端口位

端口位

Page 225: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24225/367

STC15F2K60S2 单片机进行 SPI 通信时,主机和从机的选择由 SPEN、 SSIG 、引脚( P1.2 )和 MSTR联合控制。主机和从机的选择如表所示。

SPEN SSIG P1.2 MSTR 主或从模式 MISOP1.4

MOSIP1.3

SCLKP1.5

备注

0 X P1.2 X SPI功能禁止

P1.4 P1.3 P1.5 SPI禁止。 P1.4/P1.5/P1.6/P1.7作为普通 I/O口使用

1 0 0 0 从机模式 输出 输入 输入 选择作为从机

1 0 1 0从机模式未被选中

高阻 输入 输入 未被选中。 MISO 为高阻状态,以避免总线冲突

1 0 0 1→0从机模式 输出 输入 输入 处于输入模式时,如被驱动为低电平且

SSIG=0,MSTR 位自动清零。

1 0 1 1

主 ( 空闲 ) 输入 高阻 高阻 当主机空闲时 MOSI和 SCLK 为高阻态以避免总线冲突。用户必须将 SCLK 上拉或下拉(根据 CPOL 的取值)以避免 SCLK出现悬浮状态。

主 (激活 ) 输出 输出 作为主机激活时, MOSI 和 SCLK 为推挽输出

1 1 P1.20 从 输出 输入 输入

1 主 输入 输出 输出

表 8-5 主机和从机的选择

Page 226: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24226/367

( 3) SPI 接口的数据通信过程作 为从机 时 ,若 CPHA=0 , SSIG 必 须 为0, /SS引脚必须取反并且在每个连续的串行字节之间重新设置为高电平。如果 SPDAT寄存器在 /SS 有效(低电平)时执行写操作 ,那么将导致一 个写冲突错误 , WCOL 标 志 被 置 1 。 CPHA=0 且SSIG=0 时的操作未定义。当 CPHA=1 时, SSIG 可以为 1 或 0 。如果SSIG=0, /SS引脚可在连续传输之间保持有效(即一直为低电平)。当系统中只有一个 SPI主机和一个 SPI从机时,这是首选配置。

Page 227: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24227/367

在 SPI 通信中,数据传输总是由主机启动的。如果 SPI 使能( SPEN=1 ),主机对 SPI 数据寄存器的写操作将启动 SPI 时钟发生器和数据的传输。在数据写入 SPDAT 之后的半个到一个 SPI 位时间后,数据将出现在 MOSI引脚。需要注意的是,主机可以通过将对应器件的 /SS引脚驱动为低电平实现与之通信。写入主机SPDAT 寄存器的数据从 MOSI 引脚移出发送到从机的 MOSI引脚。同时,从机 SPDAT寄存器的数据从 MISO 引脚移出发送到主机的MISO引脚。

Page 228: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24228/367

传输完一个字节后, SPI 时钟发生器停止,传输完成 标 志 ( SPIF )置位 并产生一 个 中断(如果 SPI 中断使能)。主机和从机 CPU 的两个移位寄存器可以看作是一个 16 位循环移位寄存器。当数据从主机移位传送到从机的同时,数据也以相反的方向移入。这意味着在一个移位周期中,主机和从机的数据相互交换。

Page 229: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24229/367

( 4 )通过 /SS 改变模式如果 SPEN=1 , SSIG=0 且 MSTR=1 , SPI使能为主机模式。 /SS引脚可配置为输入或准双向模式。这种情况下,另外一个主机可将该引脚驱动为低电平,从而将该器件选择为 SPI从机并向其发送数据。

Page 230: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24230/367

为了避免争夺总线, SPI 系统执行以下动作:MSTR 清 0 并且 CPU 变成从机。这样 SPI 就变成从机。 MOSI和 SCLK强制变为输入模式,而MISO 则变为输出模式。SPSTAT 的 SPIF 标志位置位。如果 SPI 中断已被使能,则产生 SPI 中断。

用户程序必须一直对 MSTR 位进行检测,如果该位被一个从机选择清零而用户想继续将SPI 作为主机,就必须重新置位 MSTR ,否则将进入从机模式。

Page 231: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24231/367

( 5) SPI 中断如果允许 SPI 中断,发生 SPI 中断时, CPU就会跳转到中断服务程序的入口地址 004BH处执行中断服务程序。注意,在中断服务程序中,必须把 SPI 中断请求标志清 0 。

Page 232: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24232/367

( 6 )写冲突SPI 在发送时为单缓冲,在接收时为双缓冲。这样在前一次发送尚未完成之前,不能将新的数据写入移位寄存器。当 发 送 过程中 对 数 据寄存器 进 行写操作时, WCOL 位将置位以指示数据冲突。在这种情况下,当前发送的数据继续发送,而新写入的数据将丢失。

Page 233: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24233/367

当对主机或从机进行写冲突检测时,主机发生写冲突的情况是很罕见的,因为主机拥有数据传输的完全控制权。但从机有可能发生写冲突,因为当主机启动传输时,从机无法进行控制。接收数据时,接收到的数据传送到一个并行读数据缓冲区,这样将释放移位寄存器以进行下一个数据的接收。但必须在下个字符完全移入之前从数据寄存器中读出接收到的数据,否则,前一个接收数据将丢失。WCOL 可通过软件向其写入“ 1”清 0 。

Page 234: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24234/367

( 7 )数据格式时钟相位控制位 CPHA 用于设置采样和改变数据的时钟边沿。时钟极性控制位 CPOL 用于设置时钟极性。

Page 235: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24235/367

不同的 CPHA ,主机和从机对应的数据格式如图所示。

SCLK(CPOL=0)

SCLK(CPOL=1)

MOSI(输入) DORD=0DORD=1

DORD=0DORD=1

MISO(输出)

(如果SSIG位=0)

1 2 3 4 5 6 7 8

未定义

MSBLSB

6 5 4 3 2 1 LSB1 2 3 4 5 6

MSB 6 5 4 3 2 1LSB 1 2 3 4 5 6

MSB

LSBMSB

时钟周期

SS

图 8-30 CPHA=0时 SPI 从机传输格式

Page 236: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24236/367

CPHA=1时 SPI从机传输格式

SCLK(CPOL=0)

SCLK(CPOL=1)

MOSI(输入) DORD=0DORD=1

DORD=0

DORD=1MISO(输出)

(如果SSIG位=0)

1 2 3 4 5 6 7 8

1)未定义

MSBLSB

6 5 4 3 2 1 LSB1 2 3 4 5 6

MSB 6 5 4 3 2 1LSB 1 2 3 4 5 6

MSB

LSBMSB

时钟周期

1)

SS

图 8-31 CPHA=1时 SPI 从机传输格式

Page 237: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24237/367

CPHA=0时 SPI主机传输格式

SCLK(CPOL=0)

SCLK(CPOL=1)

MOSI(输入) DORD=0DORD=1

DORD=0DORD=1MISO(输出)

SS(如果SSIG位=0)

1 2 3 4 5 6 7 8

MSBLSB

6 5 4 3 2 1 LSB1 2 3 4 5 6

MSB 6 5 4 3 2 1LSB 1 2 3 4 5 6

MSB

LSBMSB

时钟周期

图 8-32 CPHA=0时 SPI 主机传输格式

Page 238: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24238/367

CPHA=1时 SPI主机传输格式

SCLK(CPOL=0)

SCLK(CPOL=1)

MOSI(输入)DORD=0DORD=1

DORD=0DORD=1MISO(输出)

(如果SSIG位=0)

1 2 3 4 5 6 7 8

MSBLSB

6 5 4 3 2 1 LSB1 2 3 4 5 6

MSB 6 5 4 3 2 1LSB 1 2 3 4 5 6

MSB

LSBMSB

时钟周期

SS

图 8-33 CPHA=1时 SPI 主机传输格式

Page 239: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24239/367

( 8) SPI 时钟预分频器选择SPI 时钟预分频器选择是通过 SPCTL寄存器中的 SPR1-SPR0 位实现的。详见特殊功能寄存器 SPCTL 的介绍。

Page 240: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24240/367

四、 SPI 接口的应用举例( 1) SPI 相关的特殊功能寄存器 1) SPI控制寄存器( SPCTL )

SPICTL (地址为 CEH ,复位值为 00H )各位的定义如下:

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0

Page 241: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24241/367

①位 7: SSIG ,引脚忽略控制位。 1 :由MSTR 位确定器件为主机还是从机。 0 :由 /SS 脚用 于确定 器件为主机还是从

机。 /SS脚可作为 I/O 口使用。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0

Page 242: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24242/367

②位 6: SPEN, SPI 使能位。 1: SPI 使能。 0: SPI被禁止,所有 SPI管脚都作为 I/O 口

使用。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0

Page 243: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24243/367

③位 5: DORD ,设定数据发送和接收的位顺序。

1 :数据字的最低位( LSB )最先传送; 0 :数据字的最高位( MSB )最先传送。④位 4:MSTR, SPI主 /从模式选择位。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0

Page 244: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24244/367

⑤位 3: CPOL, SPI 时钟极性。 1: SPI 空闲时 SCK=1。 SCK 的前时钟沿为下降沿而后沿为上升沿。

0: SPI 空闲时 SCK=0。 SCK 的前时钟沿为上升沿而后沿为下降沿。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0

Page 245: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24245/367

⑥位 2: CPHA, SPI 时钟相位选择控制。 1 : 数 据 在 SCK 的 前 时 钟沿驱动到 SPI 口

线, SPI模块在后时钟沿采样。 0 :数据在 /SS 为低( SSIG=0 )时驱动到 SPI 口

线,在 SCK 的后时钟沿被改变,并在前时钟沿被采样。(注: SSIG=1 时的操作未定义)

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0

Page 246: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24246/367

⑦位 1: SPR1 ,与 SPR0联合构成 SPI 时钟速率选择控制位。⑧位 0: SPR0 ,与 SPR1联合构成 SPI 时钟速

率选择控制位。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0

Page 247: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24247/367

SPI 时钟选择如表 8-6 所示。

SPR1 SPR0 时钟( SCLK )

0 0 tCLK/4

0 1 tCLK/16

1 0 tCLK/64

1 1 tCLK/128

表 8-6 SPI 时钟频率的选择

Page 248: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24248/367

2) SPI 状态寄存器( SPSTAT )SPSTAT ( 地 址 为 CDH , 复 位 值 为00XXXXXXB )各位的定义如下:

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SPIF WCOL - - - - - -

Page 249: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24249/367

①位 7: SPIF, SPI 传输完成标志。 当一次传输完成时, SPIF被置位。此时,如果

SPI 中 断 被 打 开 ( 即ESPI(IE2.1)=1, EA(IE.7)=1 ),将产生中断。当 SPI处于主模式且 SSIG=0 时,如果为输入并被驱动为低电平, SPIF也将置位,表示“模式改变”。

SPIF 标志通过软件向其写入 1 而清 0 。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SPIF WCOL - - - - - -

Page 250: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24250/367

②位 6:WCOL, SPI写冲突标志。 当一个数据还在传输时,又向数据寄存器

SPDAT写入数据, WCOL将被置位。 WCOL 标志通过软件向其写入 1 而清 0 。③位 5-位 0 :保留。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SPIF WCOL - - - - - -

Page 251: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24251/367

3) SPI 数据寄存器( SPDAT )SPDAT (地址为 CFH ,复位值为 00H )各位的定义如下:

位 7-位 0 :保存 SPI 通信数据字节。其中, MSB 为最高位, LSB 为最低位。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 MSB LSB

Page 252: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24252/367

( 2 )编程实例SPI 接口的使用包括 SPI 接口的初始化和SPI 中断服务程序的编写。SPI 接口的初始化包括以下几个方面:① 通过 SPI控制寄存器 SPCTL 设置: /SS引脚

的控制、 SPI 使能、数据传送的位顺序、设置为主机或从机、 SPI 时钟极性、 SPI 时钟相位、 SPI 时钟选择。具体内容请参见 SPI控制寄存器 SPCTL介绍。

Page 253: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24253/367

② 清 0 寄存器 SPSTAT 中 的 标 志 位 SPIF 和WCOL (向这两个标志位写 1即可清零)。

③ 开放 SPI 中断( IE2 中的 ESPI=1 , IE2 寄存器不能位寻址,可以使用“或”指令)。

④ 开放总中断( IE 中的 EA=1 )。SPI 中断服务程序根据实际需要进行编写。唯一需要注意的是,在中断服务程序中首先需要将标志位 SPIF 和 WCOL 清 0 。因为SPI 中断标志不会自动清除。

Page 254: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24254/367

【例 8-7 】 单主机 - 多从机通信方式应用举例。计算机向主单片机发送一串数据,主单片机的RS-232 串口每收到一个字节就立刻将收到的字节通过 SPI 口发送到从单片机中,与此同时主单片机收到从单片机发回的一个字节,主单片机把收到的这个字节通过 RS-232 口发送到计算机。可以使用串口助手观察结果。从单片机的 SPI 口收到数据后,把收到的数据放到自己的 SPDAT寄存器中,当下一次主单片机发送一个字节时把数据发回到主单片机。

Page 255: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24255/367

硬件连接如图所示。

MOSI MOSI

SCLK

MISO MISO

主单片机 从单片机

计算机

SCLK

RS 232转换电路RXDTXDGND

图 8-34 单主机 - 单从机 SPI 通信实验电路图

Page 256: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24256/367

晶振频率 SYSclk=18.432MHz ,计算机RS232 串口波特率设置为 57600bps 。

解 : 经 计 算 , 当SYSclk=18.432MHz, PCON.7=0 (波特率不加倍),波特率为 57600bps 时的重装时间常数为 F6H 。在主机的主程序中,使用查询的方法查询 UART 口是否接收到数据。

Page 257: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24257/367

汇编语言程序如下:$INCLUDE (STC15.INC) ; 包含 STC15F2K60S2寄存器定义文件; 定义常量 , 根据 MASTER_SLAVE 的值 ,选择下载不同的程序MASTER_SLAVE EQU 0 ;汇编后的程序代码下载到主单片机中;MASTER_SLAVE EQU 1 ;汇编后的程序代码下载到从单片机 #1 中;MASTER_SLAVE EQU 2 ;汇编后的程序代码下载到从单片机 #2 中; 定义变量Flags EQU 20HSPI_Receive EQU Flags.0 ;SPI 端口收到数据标志位 T0_10MS EQU 30H ;该变量用于保存 10 毫秒计数 (T0 中断次数 ) SPI_buffer EQU 31H ;该变量用于保存 SPI 端口收到的数据

Page 258: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24258/367

ORG 0000HLJMP MAINORG 000BH ; 定时器 0 中断服务程序入口 LJMP T0_ISRORG 004BH ;SPI 中断服务程序入口LJMP SPI_ISRORG 0060H

MAIN:MOV SP, #70H ; 设置堆栈指针;------------ 初始化串口和定时器 0------------------------------MOV SCON, #50H ;0101,0000 8 位可变波特率 , 无奇偶校验MOV TMOD, #21H ;T1 为自动重装模式, T0为 16 位定时器模式MOV TH0, #0C4HMOV TL0, #00H ;重装数 = 65536-15360 = 50176 = C400H

;晶振频率 =18.432MHz 时,每 10mS 中断 1 次MOV TH1, #0F6HMOV TL1, #0F6HMOV AUXR, #01000000B ;T1 以 1T 的速度计数,是普通 8051的 12 倍;即波特率 = 4800*12=57600SETB TR1 ;启动定时器 1 开始计数 SETB TR0 ;启动 T0SETB ET0 ;开 T0 中断

Page 259: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24259/367

;----------------初始化 SPI-------------------------------- IF MASTER_SLAVE == 0 ;主机 SPI控制字设置

MOV SPCTL,#11110000B ;0FCH, 忽略脚 , 设为主机 ;SSIG=1: 忽略脚 ;SPEN=1 :允许 SPI 工作 ;DORD=1 :先传低位 LSB;MSTR=1 :设为主机 ;CPOL=0: SPI 空闲时 SCLK=0 ,前跳变沿是上升沿,后跳变沿是下降沿。 ;CPHA=0 :数据由 SCLK 后跳变沿驱动到 SPI 口线, SPI模块在前跳变沿采

样 ;SPR1, SPR0=00 :主模式时 SPI 时钟源选择为 Fosc/4ELSE ;从机 SPI控制字设置

MOV SPCTL,#01100000B ;6CH, 设为从机 , 由脚决定是否已被选中 ;SSIG=0: 由脚决定主模式或从模式 ;SPEN=1 :允许 SPI 工作 ;DORD=1 :先传低位 LSB;MSTR=0 :设为从机 ;CPOL=0: SPI 空闲时 SCLK=0 ,前跳变沿是上升沿,后跳变沿是下降沿。 ;CPHA=0 :数据由 SCLK 后跳变沿驱动到 SPI 口线, SPI模块在前跳变沿采

样 ;SPR1, SPR0 = 00 :主模式时 SPI 时钟源选择为 Fosc/4 ENDIF

Page 260: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24260/367

MOV SPSTAT,#11000000B ;清零标志位 SPIF和WCOLORL IE2, #00000010B ;令 ESPI(IE2.1)=1,允许 SPIF产生中断MOV Flags, #0 ;清标志字SETB EA ; 开总中断MOV T0_10MS,#200 ;T0 中断计数( 10ms×200=2 秒)

IF MASTER_SLAVE == 0CLR Slave1_SS ;选择从单片机 #1 为当前的从单片机

Check_RS232: JNB RI, Check_SPI ;判断 RS232 串口中收到数据否MOV A, SBUF ;取 RS232 串口中收到的数据累加器 ACLR RI

Page 261: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24261/367

;主单片机将累加器 A 中的数据发送到从机 SPIANL IE2,#0FDH ; 令 ESPI(IE2.1)=0,禁止 SPIF产生中断MOV SPDAT, A ;SPI 发送数据

SPI_Wait:MOV A, SPSTAT ; 等待 SPIF=1, 即等待 SPI 发送完毕ANL A, #80H JZ SPI_WaitORL IE2, #00000010B ;令 ESPI(IE2.1)=1,允许 SPIF产生中断LJMP Check_RS232

Check_SPI:JNB SPI_Receive, Check_RS232 ;判是否收到从机 SPI 发回数据

Page 262: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24262/367

;主单片机 SPI端口收到新的数据MOV A, SPI_buffer ;将 "从机 SPI 发回的数据 " 送到累加器ACLR SPI_Receive ;清零主单片机 SPI端口收到数据标志位;将累加器 A 中的数据发送到计算机CLR TI ;清零串口发送中断标志 MOV SBUF, A

RS232_Wait:JNB TI, RS232_Wait ; 等待发送完毕CLR TI ;清零串口发送中断标志 LJMP Check_RS232

ELSESlave_Check_SPI:

JNB SPI_Receive, Slave_Check_SPI ;判收到主 SPI 发回的数据否

Page 263: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24263/367

;从单片机 SPI端口收到新的数据MOV A, SPI_buffer ;取 "主单片机 SPI 端口发的数据 "CLR SPI_Receive ;清零从单片机 SPI 端口收到数据标志位

IF MASTER_SLAVE == 2 ADD A, #1 ; 如果是从单片机 #2 ,就把收到的数据加 1ENDIF

MOV SPDAT, A ;将收到数据送 SPDAT,下一次通讯时发回SJMP Slave_Check_SPI

ENDIF

Page 264: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24264/367

;-------------- T0 中断服务程序 --------------------------------IF MASTER_SLAVE == 0T0_ISR:

PUSH PSW ;保存断点现场 PUSH ACCMOV TH0, #0C4H ;重装时间常数MOV TL0, #00HDJNZ T0_10MS,T0_ExitMOV T0_10MS,#200 ;恢复 T0 中断计数值CPL Slave1_SS ; 改变当前选择的从单片机 CPL Slave2_SS

T0_Exit: POP ACC ;恢复断点现场 POP PSW

RETI

Page 265: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24265/367

ELSE ;从机程序不需要定时器 T0T0_ISR:RETI

ENDIF;---------------- SPI 中断服务程序 -------------------------------

SPI_ISR: ;SPI 中断服务程序 MOV SPSTAT, #11000000B ;0C0H,清零标志位 SPIF和WCOLMOV A, SPDAT ;保存收到的数据 MOV SPI_buffer, A SETB SPI_Receive ; 设置 SPI 端口收到数据标志RETI

;----------------------------------------------------------- END 思考:将上述程序改编为 C语言版本。

Page 266: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24266/367

【例 8-8 】 单主机 - 多从机通信方式应用举例。主单片机用 P5.1和 P5.2选择当前选中的从单片机,每一时刻只有一个从单片机被选中。P5.1 用于选中 #1从单片机;P5.2 用于选中 #2从单片机。计算机向主单片机发送一串数据,主单片机的 RS-232串行口每收到一个字节就立刻将收到的数据字节通过SPI 口发送到当前选中的从单片机中, #1 单片机将SPI 口收到的数据再放到自己的 SPDAT寄存器中,当下一次主单片机发送一个字节时把数据发回到主单片机; #2从单片机将 SPI 口收到的数据加 1 以后再放到自己的 SPDAT寄存器中,当下一次主单片机发送一个字节时把数据发回到主单片机。#1从单片机和 #2从单片机每隔 2 秒钟轮换一次。主单片机把收到的这个字节通过 RS-232 口发送到计算机。在串行口调试助手接收区观察接收的数据。

Page 267: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24267/367

硬件连接如图 8-35 所示。

计算机

RS232转换电路RXDTXDGND

MOSI MOSI

SCLK

MISO MISO

SS

主单片机1从单片机

SCLK

MOSI

MISO

SS

2从单片机

SCLK

P5.1

P5.2

图 8-35 单主机 - 多从机 SPI 通信实验电路图

Page 268: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24268/367

晶振频率 SYSclk=18.432MHz ,计算机 RS232串行口波特率设置为 57600bps 。

解 : 经 计 算 , 当SYSclk=18.432MHz, PCON.7=0 (波特率不加倍),波特率为 57600bps 时的重装时间常数为 F6H 。在主机的主程序中,使用查询的方法查询 UART 口是否接收到数据。

Page 269: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24269/367

汇编语言程序如下:$INCLUDE (STC15.INC) ; 包含 STC15F2K60S2寄存器定义文件; 定义常量 , 根据 MASTER_SLAVE 的值 ,选择下载不同的程序MASTER_SLAVE EQU 0 ;汇编后的程序代码下载到主单片机中MASTER_SLAVE EQU 1 ;汇编后的程序代码下载到从单片机 #1 中MASTER_SLAVE EQU 2 ;汇编后的程序代码下载到从单片机 #2 中; 定义变量Slave1_SS EQU P5.1Slave2_SS EQU P5.2Flags EQU 20HSPI_Receive EQU Flags.0 ;SPI 端口收到数据标志位 T0_10MS EQU 30H ;该变量用于保存 10 毫秒计数 (T0 中断次数 ) SPI_buffer EQU 31H ;该变量用于保存 SPI 端口收到的数据

Page 270: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24270/367

ORG 0000HLJMP MAINORG 000BH ; 定时器 0 中断服务程序入口 LJMP T0_ISRORG 004BH ;SPI 中断服务程序入口LJMP SPI_ISRORG 0060H

MAIN:MOV SP, #70H ; 设置堆栈指针;--------------- 初始化串行口和定时器 0-----------------MOV SCON, #50H ;0101,0000 8 位可变波特率 , 无奇偶校验MOV TMOD, #21H ;T1 为自动重装模式, T0为 16 位定时器模式MOV TH0, #0C4HMOV TL0, #00H ;重装数 = 65536-15360 = 50176 = C400H ;晶振频率 =18.432MHz 时,每 10mS 中断 1 次MOV TH1, #0F6HMOV TL1, #0F6HMOV AUXR, #40H ;T1以 1T 速度计数,波特率 =4800*12=57600SETB TR1 ;启动定时器 1 开始计数 SETB TR0 ;启动 T0SETB ET0 ;开 T0 中断

Page 271: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24271/367

;----------------初始化 SPI-------------------- IF MASTER_SLAVE == 0 ;主机 SPI控制字设置

MOV SPCTL,#11110000BELSE ;从机 SPI控制字设置

MOV SPCTL,#01100000BENDIF

MOV SPSTAT,#11000000B ;清 0 标志位 SPIF和WCOLORL IE2, #00000010B ;令 ESPI(IE2.1)=1,允许 SPIF产生中断MOV Flags, #0 ;清标志字SETB EA ; 开总中断MOV T0_10MS,#200 ;T0 中断计数( 10ms×200=2 秒)

IF MASTER_SLAVE == 0CLR Slave1_SS ;选择从单片机 #1 为当前的从单片机Check_RS232: JNB RI, Check_SPI ;判断 RS232 串行口中收到数据否MOV A, SBUF ;取 RS232 串行口中收到的数据累加器 ACLR RI

Page 272: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24272/367

;主单片机将累加器 A 中的数据发送到从机 SPIANL IE2,#0FDH ;令 ESPI(IE2.1)=0,禁止 SPIF产生中断MOV SPDAT, A ;SPI 发送数据

SPI_Wait:MOV A, SPSTAT ; 等待 SPIF=1, 即等待 SPI 发送完毕ANL A, #80H JZ SPI_WaitORL IE2, #00000010B ;令 ESPI(IE2.1)=1,允许 SPIF产生中断LJMP Check_RS232

Check_SPI:JNB SPI_Receive, Check_RS232 ;判是否收到从机 SPI 发回数据

Page 273: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24273/367

;主单片机 SPI端口收到新的数据MOV A, SPI_buffer ;将 "从机 SPI 发回的数据 " 送到累加器 ACLR SPI_Receive ;清 0主单片机 SPI端口收到数据标志位;将累加器 A 中的数据发送到计算机CLR TI ;清 0 串行口发送中断标志 MOV SBUF, A

RS232_Wait:JNB TI, RS232_Wait ; 等待发送完毕CLR TI ;清 0 串行口发送中断标志 LJMP Check_RS232

ELSESlave_Check_SPI:

JNB SPI_Receive, Slave_Check_SPI; 收到主 SPI 发回的数据否;从单片机 SPI端口收到新的数据MOV A, SPI_buffer ;取 "主单片机 SPI 端口发的数据 "CLR SPI_Receive ;清 0从单片机 SPI 端口收到数据标志位

IF MASTER_SLAVE == 2ADD A, #1 ; 如果是从单片机 #2 ,就把收到的数据加 1

ENDIFMOV SPDAT, A ;将收到数据送 SPDAT, 准备下一次通讯时发回SJMP Slave_Check_SPI

ENDIF

Page 274: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24274/367

;-------------- T0 中断服务程序 ----------------------IF MASTER_SLAVE == 0T0_ISR:

PUSH PSW ;保存断点现场 PUSH ACCMOV TH0, #0C4H ;重装时间常数MOV TL0, #00HDJNZ T0_10MS,T0_ExitMOV T0_10MS,#200 ;恢复 T0 中断计数值CPL Slave1_SS ; 改变当前选择的从单片机 CPL Slave2_SS

T0_Exit: POP ACC ;恢复断点现场 POP PSW

RETI

Page 275: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24275/367

ELSE ;从机程序不需要定时器 T0T0_ISR:

RETIENDIF;---------------- SPI 中断服务程序 -----------------SPI_ISR: ;SPI 中断服务程序

MOV SPSTAT, #11000000B ;0C0H,清 0 标志位 SPIF和WCOLMOV A, SPDAT ;保存收到的数据 MOV SPI_buffer, A SETB SPI_Receive ; 设置 SPI 端口收到数据标志RETI

;----------------------------------------------------- END

Page 276: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24276/367

【例 8-9 】 双器件通信方式应用举例。双器件通信方式就是可以互为主机和从机的通信方式。主单片机用 P1.2和 P1.3选择当前选中的从单片机,每一时刻只有一个从单片机被选中。P1.2 用于选中 #1从单片机; P1.3 用于选中 #2从单片机。

Page 277: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24277/367

计算机向主单片机发送一串数据,主单片机的 RS-232串口每收到一个字节就立刻将收到的字节通过 SPI 口发送到当前选中的从单片机中, #1 单片机将 SPI 口收到的数据再放到自己的 SPDAT寄存器中,当下一次主单片机发送一个字节时把数据发回到主单片机;#2从单片机将 SPI 口收到的数据加 1 以后再放到自己的 SPDAT寄存器中,当下一次主单片机发送一个字节时把数据发回到主单片机。 #1从单片机和 #2从单片机每隔 2 秒钟轮换一次。主单片机把收到的这个字节通过 RS232 口发送到计算机。在串口调试助手接收区观察接收的数据。

Page 278: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24278/367

晶振频率 SYSclk=18.432MHz ,计算机 RS232串口波特率设置为 57600bps 。硬件连接如图 8-36 所示。

计算机

RS232转换电路RXDTXDGND

MOSI MOSI

SCLK

MISO MISO

SS

1单片机 2单片机

SCLK

计算机

RS232转换电路RXDTXDGND

SS

图 8-36 互为主 / 从通信方式电路图

Page 279: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24279/367

解 : 经 计 算 , 当SYSclk=18.432MHz, PCON.7=0 (波特率不加倍),波特率为 57600bps 时的重装时间常数为 F6H 。在主机 的主程序 中 , 使 用查询的 方 法查询UART 口是否接收到数据。

Page 280: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24280/367

$INCLUDE (STC15.inc) ; 包含 STC15F2K60S2寄存器定义文件SS EQU P1.2 ; 定义 SPI 的脚;---------------- 定义 SPI 模式常量 ---------------------CONFIG_MASTER EQU 11010000B ;忽略 SS 脚的主模式CONFIG_SLAVE EQU 01000000B ;SS脚用于确定器件为主机还是从机。 ;SS=1 时为未选从模式 ,没有总线冲突 ,MISO、MOSI和 SPICLK 为输

入 ;SS=0 时为从模式 ,MISO 为输出 ,MOSI和 SPICLK 为输入;------------------ 定义变量 -------------------------- Flags EQU 20H SPI_Receive EQU Flags.0 ; 收到数据标志 TimeOver EQU Flags.1 ;RS232 接收下一个字节超时 Rec_buffer EQU 21H ;缓冲区指针 Rec_Number EQU 22H ;已接收数据长度 SPI_buffer EQU 23H ;保存 SPI 接口收到的数据 Time_Over EQU 24H ;超时计数

Page 281: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24281/367

ORG 0000H LJMP MAIN ORG 000BH ; 定时器 0 中断服务程序入口 LJMP T0_ISR ORG 004BH ;SPI 中断服务程序入口 LJMP SPI_ISR ORG 0080H

MAIN: MOV SP, #70H ;-----------初始化串口 ----------------MOV SCON, #50H ;8 位可变波特率 , 无奇偶校验MOV TMOD, #21H ;T1 为自动重装模式 MOV TH1, #0F6HMOV TL1, #0F6HMOV AUXR, #40H ; 定时器 1以 1T 的速度计数; 波特率 =4800*12=57600SETB TR1

Page 282: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24282/367

;-----------初始化 SPI------------------MOV SPCTL,#CONFIG_SLAVE MOV SPSTAT,#11000000B ;清零标志位 SPIF和WCOLORL IE2,#02H ;ESPI=1,允许 SPIF产生中断;--------------------------MOV Flags, #0 ;清标志字SETB ET0 ; 开 T0 中断 SETB EA ; 开总中断

Page 283: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24283/367

;-------------------------------------------------

Check_Receive:

JB RI, RS232_GetFirstByte ;RS232 收到第一个字节 JB SPI_Receive, SPI_GetFirstByte ;SPI 收到第一个字节 LJMP Check_Receive ;循环

RS232_GetFirstByte: ;RS232 收到第一个字节 MOV Rec_buffer, #30H

MOV Rec_Number, #0B0H ; 最多接收 176 个字节,;否则会破坏栈的内容

RS232_Received: ;RS232 收到一个字节 MOV R0, Rec_buffer ;保存收到的字节 MOV @R0, SBUF

CLR RI

DJNZ Rec_Number, RS232_Rec_Next ;判断接收缓冲区是否已满 LJMP SPI_Send ; 接收缓冲区满,跳转

RS232_Rec_Next: ;准备接收下一个字节 INC Rec_buffer

MOV TH0, #0

SETB TR0 ;启动 T0

CLR TimeOver

RS232_GetNextByteWait: ; 等待 RS232 传来的下一个字节 JB TimeOver, SPI_Send ;超时 ,用 SPI 发送 RS232 收到的字节 JB RI, RS232_Received

LJMP RS232_GetNextByteWait

Page 284: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24284/367

;-----------------SPI_Send: ;用 SPI 口发送 RS232 收到的字节

MOV A, #0B0H ; 计算收到的字节数 -->R2CLR C SUBB A, Rec_Number MOV R2, A MOV R0, #30H LCALL ChangeToMast ;切换到忽略 SS 脚的主模式 JC ExitMast ;切换失败 , 跳转

SPI_Send_Loop: MOV A, @R0 LCALL SPI_Send_Byte ;将 A 中的数据发送到从 SPI INC R0 DJNZ R2, SPI_Send_Loop

ExitMast: CLR TR0 LCALL ChangeToSlave ;SPI 接口切换到未选中的从模式 LJMP Check_Receive

Page 285: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24285/367

;------------------------------------------------ SPI_GetFirstByte: ;SPI 收到第一个字节

MOV Rec_buffer, #30H MOV Rec_Number, #0B0H ; 最多接收 176 个字节

SPI_Received: ;SPI 收到一个字节 MOV R0, Rec_buffer ;保存收到的字节 MOV @R0, SPI_bufferCLR SPI_ReceiveDJNZ Rec_Number, SPI_Rec_Next ;判断接收缓冲区是否已满 LJMP RS232_Send ; 接收缓冲区满,跳转

SPI_Rec_Next: ;准备接收下一个字节 INC Rec_bufferMOV TH0, #0 SETB TR0 ;启动 T0 CLR TimeOver

SPI_GetNextByteWait: ; 等待 SPI 传来的下一个字节JB TimeOver, RS232_Send ;超时 ,用 RS232 发送 SPI 收到的字节JB SPI_Receive, SPI_ReceivedLJMP SPI_GetNextByteWait

Page 286: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24286/367

;--------------------- RS232_Send: ; 用 RS232 口发送 SPI 收到的字节

MOV A, #0B0H ; 计算收到的字节数 -->R2 CLR C SUBB A, Rec_Number MOV R2, A MOV R0, #30H

RS232_Send_Loop: MOV A, @R0 LCALL RS232_Send_Byte ;将 A 中的数据发送到计算机INC R0 DJNZ R2, RS232_Send_LoopLJMP Check_Receive

Page 287: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24287/367

;------------------------------------------------ ChangeToMast: ;切换到忽略 SS 脚的主模式

SETB SS ; 如果 SS 脚未被拉低 , 就切换 JB SS, ChangeToMast_a SETB C ;切换到主模式失败 RET

ChangeToMast_a: ANL IE2,#0FDH ;ESPI(IE2.1)=0,禁止 SPIF产生中断MOV SPCTL,#CONFIG_MASTER ;忽略 SS 脚 , 设为主机。 MOV SPSTAT,#11000000B ;清标志位 SPSTAT CLR SS ;拉低 SS 脚 , 使对方成为从模式 CLR C ; 本机切换到主模式成功 RET

Page 288: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24288/367

;------------------------------------------------ ChangeToSlave: ;SPI 接口切换到未选中的从模式

SETB SS ;释放 SS脚 MOV SPCTL,#CONFIG_SLAVE MOV SPSTAT,#11000000B ;清标志位 SPSTAT ORL IE2,#02H ;ESPI=1,允许 SPIF产生中断RET

Page 289: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24289/367

;------------ 将 A 中的数据发送到计算机 ----------------- RS232_Send_Byte:

CLR TI ;清零串口发送中断标志 MOV SBUF, A JNB TI, $ ; 等待发送完毕 , 未发送完毕跳回本行 CLR TI ;清 0 串口发送中断标志 RET

;-------------- 将 A 中的数据发送到从机 SPI --------------SPI_Send_Byte:

MOV SPDAT, A SPI_Send_Byte_Wait:

MOV A, SPSTAT ANL A, #80HJZ SPI_Send_Byte_Wait; 等待 SPIF=1 即等待 SPI 发送完毕 MOV SPSTAT,#11000000B ;清标志位 SPSTAT RET

;--------------- 定时器 0 中断服务程序 ---------------- T0_ISR:

SETB TimeOverRETI

Page 290: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24290/367

;---------------- SPI 中断服务程序 ------------------ SPI_ISR:

MOV SPI_buffer, SPDAT ;保存收到的数据 MOV SPSTAT, #11000000B ;0C0H, 清 0 标志位 SPIF 和 WCOL SETB SPI_Receive ; 设置 SPI端口收到数据标志RETI

;------------------------------------------------ END

Page 291: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24291/367

五、 I2C 通信接口1、 I2C 总线简介

I2C ( Inter-Integrated Circuit ) 总 线 是 由PHILIPS公司开发的串行总线,用于连接微控制器及其外围设备。I2C 总线产生于二十世纪 80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如,管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。

Page 292: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24292/367

2、 I2C 总线特点 I2C 总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此 I2C 总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总 线 的 长 度 可 高达 25 英尺, 并 且能够以10Kbps 的最大传输速率支持 40 个组件。

Page 293: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24293/367

I2C 总线的另一个优点是,它支持多个主器件(Multimastering ),主器件也称为主机,其中任何能够进行发送和接收的设备都可以成为主机。一个主机能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主机。I2C 总线有 3 种模式:标准模式( 100Kbits/s ) , 快 速模式 ( 400Kbits/s ) 和 高 速模式( 3.4Mbits/s ),寻址方式有 7 位和 10 位方式。

Page 294: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24294/367

3、 I2C术语I2C 的一些术语列于表 8-7 中。名称 描述

Transmitter 发送者:向总线发送数据的电路

Receiver 接收者:从总线上接收数据的电路

Master 主机:启动数据传输、产生时钟信号和结束数据传输的电路

Slave 从机:被主机寻址的电路

Multi-master 多主机结构:在不破坏信息的情况下,同一时刻有多个主机试图控制总线

Arbitration 仲裁:在有多个主机试图同时控制总线时,为了不破坏信息,在某一时刻确保只有一个主机控制总线的过程

Synchronization 同步:同步两个或更多电路时钟信号的过程

表 8-7 I2C 术语

Page 295: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24295/367

4、 I2C 总线工作原理 I2C 是一种串行总线的外设接口,采用同步方式串行接收或发送信息,两个设备在同一个时钟下工作。I2C 总线只用两根线:串行数据 SDA( Serial Data )、串行时钟 SCL( Serial Clock )。由于 I2C只有一根数据线,因此其发送信息和接收信息不能同时进行。信息的发送和接收只能分时进行。

Page 296: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24296/367

I2C 总线上的所有器件的 SDA 线并接在一起,所有器件的 SCL 线并接在一起,且 SDA 线和SCL 线必须通过上拉电阻连接到正电源。当总线空闲时,两条线都是高电平。I2C 总线的数据传输协议比 SPI 总线复杂,因为 I2C 总线器件没有片选控制线,所以 I2C 总线数据传输的开始必须由主器件产生通信的开始条件( START条件);通信结束时,由主器件产生通信的停止条件( STOP条件)。

Page 297: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24297/367

当 SCL 为高时,使用 SDA 的变化标识开始条件和停止条件。

如果 SDA由 1 变到 0 ,则产生 START条件;如果 SDA由 0 变到 1 ,则产生 STOP条件。

START条件和 STOP条件时序如图所示。

SDA

SCLS P

START条件 STOP条件

图 8-37 START 条件和 STOP 条件时序

Page 298: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24298/367

SDA 线上的数据在 SCL 高电平期间必须保持稳定,否则会被误认为开始条件或结束条件,只有在 SCL 低电平期间才能改变 SDA 线上的数据。I2C 总线的数据传输波形图如图所示。

SCL

SDA

空闲状态

启动信号 第一字节数据的D7 第n字节数据的D0

停止信号

禁止SDA改变数据有效

允许数据改变

空闲状态

图 8-38 I2C 总线的数据传输波形图

Page 299: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24299/367

数据传输的时序如图所示。

SDA

SCL

MSB

S

START条件

从机地址

A6 A0 R/W

发送到从机的数据

来自接收机的应答

1 2 7 8 9 1 2 3-8 9 PACK

ACK

STOP条件字节完成 时钟线由接收机保持为低电平

来自接收机的应答

图 8-39 数据传输的时序

Page 300: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24300/367

I2C 的确认位时序如图所示。

发送机数据输出

接收机数据输出

主机SCL

S

START条件 应答时钟脉冲

1 2 7 8 9

图 8-40 I2C 的确认位时序

Page 301: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24301/367

目前,有很多半导体集成电路上都集成了 I2C接口。带 有 I2C 接 口 的 单 片 机 有 : CYGNAL 的C8051F0XX 系列, PHILIPSP87LPC7XX 系列, MICROCHIP 的 PIC16C6XX 系列等。很多外围器件如存储器、监控芯片等也提供I2C 接 口 。 如 ATmel 的 串 行 EEPROM AT24CXX 系列。

Page 302: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24302/367

5 、总线基本操作 I2C 规程运用主 /从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟( SCL )控制总线的传输方向,并产生起始和停止条件。

Page 303: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24303/367

( 1 )控制字节 在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义, EEPROM 一般应为 1010 ),接着三位为片选,最后一位为读写位,当为 1时为读操作,为 0 时为写操作。如图所示。

R/WA0A1A201 1 0

器件类型识别码

器件地址图 8-41 控制字节配置

Page 304: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24304/367

( 2 )写操作

写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。

Page 305: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24305/367

字节写指令首先发送开始位来通知芯片开始进行指令传输然后传送设置好的器件地址字节, R/W 位应置0

接着是分开传送十六位地址的高低字节,再传送要写入的数据最后发送停止位表示本次指令结束

每次只能向芯片中的一个地址写入一个字节的数据。

Page 306: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24306/367

写入单个字节的时序图如图所示。

开始位

停止位数据器件地址

写标识

十六位地址高位字节

十六位地址低位字节

MSB

LSB

ACK

R/

W

MSB

ACK

ACK

ACK

LSB

SDA

图 8-42 写入单个字节的时序图

Page 307: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24307/367

页面写模式需要发送第一个字节的地址然后一次性发送多个字节的写入数据后再发送停止位。写入过程中其余的地址增量自己由芯片内部完成。页写入的时序图如图所示。

SDA

开始位

停止位器件地址

写标识

十六位地址高位字节

十六位地址低位字节

MSB

LSB

ACK

R/

W

ACK

ACK

ACK

(n) (n) 数据 (n) 数据 (n+x)

ACK

图 8-43 页写入的时序图

Page 308: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24308/367

注意无论那种写入方式,指令发送完成后,芯片内部开始写入,这时 SDA会被芯片拉高,直到写入完成后 SDA才会重新变的有效,在编写用户程序时可以在写入的时候不停发送伪指令并查询是否有 ACK返回,如果有 ACK返回则可以进行下一步操作 。

Page 309: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24309/367

( 3 )读操作 读操作有三种基本操作:读当前地址、读任意地址和连续读取。

1 )读当前地址这种读取模式是读取当前芯片内部的地址指针指向的数据。每次读写操作后,芯片会把最后一次操作过的地址作为当前的地址。注意:在 CPU 接收完芯片传送的数据后不必发送低电平的 ACK给芯片,直接拉高 SDA 等待一个时钟后发送停止位。

Page 310: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24310/367

读当前地址时序图如图所示。

SDA

开始位

停止位器件地址

读标识

MSB

LSB

ACK

NOACK

数据输出

R/

WDATA

图 8-44 读当前地址时序图

Page 311: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24311/367

2 )读任意地址“读当前地址”可以说是读的基本指令。读任意地址时只是在这个基本指令之前加一个“伪操作”,这个伪操作传送一个写指令,但这个写指令在地址传送完成后就要结束,这时芯片内部的地址指针指到这个地址上,再用读当前地址指令就可以读出该地址的数据。

Page 312: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24312/367

读任意地址的时序图如图所示。

开始位

停止位数据器件地址

写标识

十六位地址高低位

MSB

LSB

ACK

R/

W

ACK

ACK

NO ACK

SDA

器件地址

开始位

读标识

DATA nADDRESS n

伪操作

图 8-45 读任意地址的时序图

Page 313: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24313/367

3 )连续读取连续读取操作时只要在上面二种读取方式中芯片传送完读取数据后, CPU回应给芯片一个低电平的 ACK 应答,那么芯片地址指针自动加一 并 传 送 数 据 ,直到 CPU 不回应 ( NOACK )并停止操作。

Page 314: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24314/367

连续读取的时序图如图所示。

停止位器件地址

R/

W

ACK

ACK

NO ACK

SDA LINE

读标识

DATA nACK

ACK

DATA n+1 DATA n+2 DATA n+3

图 8-46 连续读取的时序图

Page 315: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24315/367

6 、实例下面以单片机对 X24C04 的操作为例说明 I2C接口的应用。X24C04 是 XICOR 公司的 CMOS 4096 位串行 EEPROM ,内部组织成 512×8 位, 16 字节页面写。与单片机的接口如图所示。

X24C04R1 R2

P3.2

P3.3

1

234 5

6

7

8A0A1A2Vss

SCLSDA

VccTEST

Vcc

10KΩ 10KΩ

图 8-47 X24C04 与单片机的接口

Page 316: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24316/367

下面 通 过 I2C 接 口 对X24C04 进 行 单 字 节写操作的流程图如图所示。

开始

时钟信号置低

累加器左移一位

时钟信号置高

将此位送到数据线上

一个应答信号的周期

结束

N8位完否?

Y

图 8-48 对 X24C04 进行单字节写操作的流程图

Page 317: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24317/367

源程序如下:;子名称: BYTE-WR;功能描述:写一个字节; 输入参数:累加器 A; 输出参数:无SCL EQU P3.2SDA EQU P3.3BYTE-WR:

MOV R2,#08H ;1 字节 8 位SENDA: CLR SCL

RLC A ;左移一位MOV SDA,C ;写一位SETB SCLDJNZ R2,SENDA ;写完 8 个字节?CLR SCL ; 应答信号SETB SDASETB SCLRET

Page 318: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24318/367

使用 I2C 总线时应注意以下几点:严格按照时序图的时序要求进行操作;若与口线上带内部上拉电阻的单片机接口连接,可以不外加上拉电阻;为了配合相应的传输速率,在对口线操作的指令后可用 NOP 指令加一定的延时;为了减少意外的干扰信号将 EEPROM 内的数据改写可用外部写保护引脚(如果有),或者在 EEPROM 内部没有用的空间写入标志字,每 次 上 电 时 或 复 位 时做一 次检测,判断EEPROM 是否被意外改写。

Page 319: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24319/367

§8.3 并行接口的扩展方法 在需要检测或者控制较多的开关量时,单

片机的 I/O 口可能无法满足数量上的要求。在这种情况下,应该考虑 I/O 接口的扩展。 常见的扩展方法有使用 8255 进行并行口的扩展以及使用串行输入并行输出接口芯片扩展输出控制 I/O 等方法。下面分别加以介绍。

Page 320: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24320/367

一、 8255A 接口及其应用1、 8255A 简介

8255A 是 Intel 公司生产的可编程并行 I/O 接口芯片,有 3个 8 位并行 I/O 接口,用 +5V 单电源供电,能在以下三种方式下工作:

方式 0—基本输入 /出方式;方式 1—选通输入 /出方式;方式 2— 双向选通工作方式。

8255A 8255A 内部结构分为 3 个部分:与CPU 连接部分、与外设连接部分和控制部分。

Page 321: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24321/367

8255A 的引脚图和内部结构如图所示。

D034D133D232D331D430D529D628D727

PA0 4PA1 3PA2 2PA3 1PA4 40PA5 39PA6 38PA7 37

PB0 18PB1 19PB2 20PB3 21PB4 22PB5 23PB6 24PB7 25

PC0 14PC1 15PC2 16PC3 17PC4 13PC5 12PC6 11PC7 10

RD5WR36A09A18RESET35CS6

8255

A组

端口A

A组

端口C

上半部(4)

下半部(4)

B组

端口C

B组

端口B

(8)

(8)

A组

控制

控制

B组

数据

总线

缓冲

读/写

控制

逻辑

I / O

I / O

I / O

I / ORD

WRA0

A1

RESET

CS

D7~D0

PA7~PA0

PC7~PC4

PC3~PC0

PB7~PB0

VCC26GND7

a)8255A的引脚图 b)8255A的内部结构

图 8-49 8255A 的引脚图和内部结构

Page 322: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24322/367

( 1) A 口、 B 口和 C 口A 口、 B 口和 C 口均为 8位 I/O 数据口,但结构上略有差别。三个端口都可以和外设相连,分别传送外设的输入 / 输出数据或控制信息。各个端口用于输入和输出时,均具有锁存功能;用于输出时,均具有缓冲功能。

Page 323: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24323/367

PA 口的各个口线通过编程可以分别设置成单向输出、单向输入或者分时输入输出。PB 口的各个口线通过编程可以分别设置成单向输出和单向输入。PC 端口可以分为高 4 位 PC7 ~ 4 和低 4 位PC3~ 0 两个独立部分。 PC端口可否独立控制取决于 PA端口和 PB端口的工作方式。

Page 324: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24324/367

PA 口某个口线的输出锁存和缓冲、输入锁存结构如图所示。

内部锁存器 缓冲器

PAiD

CPQ

锁存器

Q D

CP

图 8-50 PA 口某个口线的输出锁存和缓冲、输入锁存结构

Page 325: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24325/367

PB 口某个口线的输出锁存和缓冲、输入缓冲结构如图所示。

内部锁存器 缓冲器

PBiD

CPQ

图 8-51 PB 口某个口线的输出锁存和缓冲、输入缓冲结构

Page 326: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24326/367

( 2) A、 B 组控制电路 这是两组根据 CPU 的命令字控制 8255A 工作方式的电路。 A 组控制 A 口及 C 口的高 4 位, B 组控制 B 口及 C 口的低 4 位。( 3 )数据缓冲器 这是一个双向三态 8 位的驱动口,用于和单片机的数据总线相连,传送数据或控制信息。( 4 )读 /写控制逻辑 这部分电路接收单片机送来的读 /写命令和选口地址,用于控制对 8255A 的读 /写。

Page 327: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24327/367

( 5 )数据线( 8条) D0~D7 为数据总线,用于传送 CPU和 8255A

之间的数据、命令和状态字。( 6 )控制线和寻址线( 6条) RESET :复位信号,输入,高电平有效。一般和单片机的复位相连,复位后, 8255A 所有内部寄存器清 0 ,所有口都为输入方式。 和 :读 /写信号线,输入,低电平有效。

WR RD

Page 328: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24328/367

( 7 ) 片选线,输入,低电平有效。( 8) A0、 A1 :地址输入线。 当芯片被选中( =0 )时,这两位的 4种组合00、 01、 10、 11 分别用于选择 A、 B、 C

口和控制寄存器。

CS

Page 329: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24329/367

( 9) I/O 口线( 24条) PA0~PA7 、 PB0~PB7 、 PC0~PC7 为 24 条

双向三态 I/O 总线,分别与 A、 B、 C 口相对应,

用于 8255A 和外设之间传送数据。( 10 )电源线( 2条) VCC为 +5 V, GND 为地线。

Page 330: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24330/367

对 8255A操作的真值表如表所示

10000

1111

0000

X0101

X0011

X1111

X0000

0000

0101

0011

CS RD WR A1 A0 D7~D0 功能说明

高祖状态输出数据

输入数据

随机数据

输入命令

输出数据输出数据

输入数据输入数据

数据写入 PA 端口数据写入 PB 端口数据写入 PC 端口命令写入控制端口

8255A与系统隔离读取PA端口数据读取PB端口数据读取PC端口数据非法读取!

表 8-8 对 8255A 操作的真值表

Page 331: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24331/367

2、 8255A控制字8255A 的三个端口具体工作在什么方式下,是通过 CPU 对控制口的写入控制字来决定的8255A 有两个控制字:方式选择控制字和 C 口置 / 复位控制字。用户通过程序把这两个控制字送到 8255A 的控制寄存器( A0A1=11 )中,这两个控制字以 D7 来作为区别标志。

Page 332: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24332/367

方式选择控制字和 C 口置 / 复位控制字分别如图 a和 b 所示。

B组

C口低4位

B口

方式选择

0:输出1:输入

0:输出1:输入

0:模式0 1:模式1

A组

C口高4位

A口

方式选择

0:输出

0:输出

1:输入

1:输入

01:模式1

00:模式0

1*:模式2

1:方式标志

0:复位1:置位

000001

010

PC0

位选择

011100101110111

PC1

PC2PC3PC4PC5PC6PC7

0:PC口操作字标志

D7 D6 D5 D4 D3 D2 D1 D0

D7 × × × D3 D2 D1 D0

(a)8255A控制字 (b)8255A的C口按位置位/复位控制字

图 8-52 8255A 控制字和 C 口按位置位 / 复位控制字

Page 333: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24333/367

注意 C 口具有位操作功能,把一个置 / 复位控制字

送入 8255A 的控制寄存器,就能将 C 口的某一位置 1 或清 0 而不影响其它位的状态。

Page 334: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24334/367

三个端口的数据传送模式PA端口具有 3种传送模式可供选用。 PB端口具有 2种传送模式可供选用。PC端口的传送模式取决于 PA端口和 PB端口的传送模式。

Page 335: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24335/367

( 1 )传送模式 0模式 0 的功能特点:

是直接控制输入或输出传送。不需要查询和中断控制。PA、 PB和 PC端口都可以编程设置为模式 0 传送。PA、 PB、 PC7~ PC4、 PC3~ PC0这 4 个端口最多有 16种输入输出组合。模式 0 传送在计算机系统中很多有实际应用的例子。例如在个人计算机系统中, 8255A 并行接口电路的 PA端口被设置成模式 0 输入,接收键盘输入的按键扫描码。又如,在半导体数码管显示控制电路中,通常设置8255A 并行接口电路的 PA和 PB端口为模式 0 输出,分别进行位控制和段控制。

Page 336: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24336/367

③INTR 是中断请求信号,输出到主机电路,要求 CPU 读取 PA 端口数据。 INTR 信号也可以作为查询信号使用。④INTR 信号能否激活,受 8255A 内部的中断允许触发器 INTE 的控制。 INTE=1 ,允许激活INTR 信号。 INTE=0 ,禁止激活 INTR 信号。

Page 337: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24337/367

( 2 )传送模式 1

模式 1 的功能特点:采用查询或者中断控制的输入或输出传送。PA端口编程为模式 1 传送后,要占用 PC端口的部分资源。PB端口编程为模式 1 传送后,也要占用 PC端口的部分资源。PC端口的剩余资源仍然可以独立操作。

Page 338: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24338/367

PA端口模式 1 输入传送的逻辑结构,如图所示。

8255APA口

D7~D0

INTR(PC3)

PA7~PA0

STB(PC4)

IBF(PC5)

外设电路

图 8-53 PA 端口模式 1 输入传送的逻辑结构

Page 339: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24339/367

功能说明: ① 是选通输入信号,来自外设电路,低有效,

表示数据已经打入 PA端口锁存器。 ②IBF 是输入缓冲器满信号,由 8255A 输出,

高有效,表示 PA端口数据尚未被 CPU读取,不能再接收新数据。当 IBF 为低电平时,表示输入缓冲器空,可以接收新数据。 IBF 信号由

选通信号激活,随 CPU 的读控制信号 的撤消而失效。

STB

STB RD

Page 340: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24340/367

单片机中扩展的 I/O 口采用与外部数据存储器相同的寻址方法,所有扩展的 I/O 口,以及通过扩展 I/O 口连接的外设都与外部 RAM统一编址因此,对片外 I/O 口的输入 / 输出指令就是访问外部 RAM 的指令。可以使用下面的代码对中断允许触发器 INTE置位(假设命令端口地址为 0E003H )

Page 341: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24341/367

MOV DPTR, #0E003H ; 指向 8255命令端口MOV A, #00001001B;PC4置 1 ,允许激活 PA端口的 INTR

信号MOVX @DPTR, A ;写入 PC端口操作字MOV A, #00000101B;PC2置 1 ,允许激活 PB端口的 INTR

信号MOVX @DPTR, A ;写入 PC端口操作字

⑤PB端口设置为模式 1 输入时,分别占用 PC0( INTR )、 PC1( IBF )和 PC2 ( )。⑥PC 端口剩余的 PC7 和 PC6 ,可以编程为两

位输入或者输出,也可以单独进行位操作。

STB

Page 342: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24342/367

PA端口模式 1 输出传送的逻辑结构如图所示。

D7~D0

INTR(PC3)

PA7~PA0

ACK(PC6)

OBF(PC7)

外设电路

8255APA口

图 8-54 PA 端口模式 1 输出传送的逻辑结构

Page 343: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24343/367

功能说明:① 是输出缓冲器满信号,由 8255A 输出,低

有效,表示 PA端口数据已经准备就绪,可供外设电路读取。② 是输入响应信号,来自外设电路,低有效,

表示外设电路已经读取 PA端口的数据。 信号由 信号激活。当 信号生效后,

信号返回高电平撤销。当 CPU把数据写入PA端口后,随着写控制信号 的撤销,

信号再次自动激活。

OBF

ACK

ACK OBF ACK

OBFWR

OBF

Page 344: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24344/367

③INTR 是中断请求信号,输出到主机,表示PA 端口已经空 闲 , 要求 CPU 再次写入 数据。 INTR 信号也可以作为查询信号使用。④INTR 信号能否激活,受 8255A 内部的中断允许触发器 INTE 的控制。但是,改用 PC6 来控制是否激活 INTR 信号。

Page 345: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24345/367

中断允许触发器 INTE 的置位控制代码如下(假设命令端口地址为 0E003H ):

MOV DPTR, #0E003H ; 指向 8255命令端口 MOV A, #00001101B;PC6置 1 ,允许激活 PA端口的 INTR

信号 MOVX @DPTR, A ;写入 PC端口操作字 MOV A, #00000101B;PC2置 1 ,允许激活 PB端口的 INTR

信号 MOVX @DPTR, A ;写入 PC端口操作字。

Page 346: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24346/367

⑤PB端口设置为模式 1 输出时,分别占用 PC0( INTR )、 PC1 ( )和 PC2 ( )。

⑥PC 端口剩余的 PC5 和 PC4 ,可以编程为两位输入或者输出,也可以单独进行位操作。

OBF ACK

Page 347: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24347/367

( 3 )传送模式 2

只有 PA端口可以编程设置为模式 2 传送。这是采用中断或者查询控制的分时输入和输出的双向传送方式。模式 2 的逻辑结构如图所示。

8255APA口

D7~D0

INTR(PC3)

PA7~PA0

ACK(PC6)

OBF(PC7)

IBF(PC5)

STB(PC4)

外设电路

Page 348: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24348/367

3 、单片机与 8255A 的接口设计可以使用 8255A 进行并行 I/O 口的扩展。8255A 和单片机连接时,可以为外设提供三个8 位的 I/O端口: A 口、 B 口和 C 口,三个端口的功能完全由编程来决定。

Page 349: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24349/367

8255A 与 STC15F2K60S2 单片机的接口电路如图 8-56 所示。

STC15F2K60S2

8255

RST RESET

ALE ALERD RDWR WR

P0 AD0~AD7

CSA1P2. 1

P2. 7

Vcc

PA

PB

PC8

A0P2. 0

图 8-56 8255A与 STC15F2K60S2 单片机的接口电路

Page 350: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24350/367

8255A 的命令口地址为 7FF3H , PA 口地址为 7FF0H, PB 口地址为 7FF1H, PC 口地址为 7FF2H 。

STC15F2K60S2

8255

RST RESET

ALE ALERD RDWR WR

P0 AD0~AD7

CSA1P2. 1

P2. 7

Vcc

PA

PB

PC8

A0P2. 0

Page 351: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24351/367

4、 8255A 并行接口的编程操作8255A 并行接口的编程操作分为:写入 8255A命令字,用于设置 8255A 电路的工作模式与传送方向。写入 PC端口操作字,用于设置 PC端口的位输入或输出状态。

Page 352: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24352/367

8255A 接口电路编程操作示例代码如下: MOV DPTR,#7FF3H ; 指向 8255命令端口   MOV A,#80H ;命令字: PA、 PB和 PC端口直接输出   MOVX @DPTR,A ;写入命令   MOV DPTR,#7FF0H ; 指向 PA端口   MOVX @DPTR,A ; 数据写入 PA端口   MOV DPTR,#7FF3H ; 指向 8255命令端口   MOV A,#9H ;PC端口操作字   MOVX @DPTR,A ;PC4 输出高电平

Page 353: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24353/367

二、 74HC595 接口及其应用 74HC595 是为 Motorola的 SPI 总线开发的一款串行-并行转换芯片。 由于 74HC595 的输入输出电平兼容 TTL 、NMOS和 CMOS 电平,且具有较强的输出负载能

力,因此被广泛地运用于 MCU (微控制器)和MPU (微处理器)的 I/O 口扩展。

Page 354: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24354/367

74HC595在 5V供电的时候能够达到 30MHz的 时 钟 速 度 , 每 个 并 行 输出端口均能承受20mA 的灌电流和拉电流。这个特点保证了不用增加额外的扩流电路即可轻松的驱动 LED 。它的输入端允许 500nS 的上升(下降)时间,对严重畸形的时钟脉冲仍能检测。这样就可以容纳较大的传输线对地电容,使系统的抗干扰能力增强。

Page 355: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24355/367

74HC595管脚功能描述如下:QA~QH :锁存器输出,三态GND :电源地QH’ :串行输出,用于级联。无三态输出功能。

74HC595

/SCLR

VCC

SCK

SIRCK

/G

QH’

GND

QA

QB

QC

QD

QE

QF

QG

QH

151234567

10161114121398

图 8-57 74HC595 的逻辑图

Page 356: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24356/367

/SCLR :低电平有效,当此管脚上出现低电平时,将复位内部的移位寄存器(清 0 ),但不影响 8 位锁存器的值。通常可接 Vcc 。SCK : 上升沿时 ,将数 据寄存器 的 数 据移位。 QA→QB→QC→... →QH ;下降沿移位寄存器数据不变。(脉冲宽度: 5V 时,大于几十纳秒即可。) 74HC595

/SCLR

VCC

SCK

SIRCK

/G

QH’

GND

QA

QB

QC

QD

QE

QF

QG

QH

151234567

10161114121398

Page 357: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24357/367

RCK :锁存时钟输入,上升沿时,移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变,通常将 RCK置为低电平。当移位结束后,在 RCK端产生一个正脉冲( 5V供电时,大于几十纳秒即可),更新输出数据。/G :低电平有效,将锁存器的输出映射到输出并行口( QA-QH )上。当输入高电平时,高阻态,同时本芯片的串行输出无效。 SI :串行数据输入,数据从这个管脚移进内部的 8 位串行移位寄存器。VCC :电源正,一般接 5VDC 。

Page 358: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24358/367

74HC595真值表如表 8-9 所示。

输入输出管脚

SI SCK /SCLR RCK /G

× × × × H QA-QH输出高阻态× × × × L QA-QH输出有效值× × L × × 移位寄存器清 0

L ↑ H × × 移位寄存器存储 L

H ↑ H × × 移位寄存器存储 H

× ↓ H × × 移位寄存器状态保持× × × ↑ × 输出存储器锁存移位寄存器中的状态值× × × ↓ × 输出存储器状态保持

表 8-9 74HC595 真值表

Page 359: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24359/367

74HC595 与 STC15F2K60S2 单片机的接口电路如图所示。

STC15F2K60S2

P1. 0

P1. 1

P1. 2

/SCLR10

QA15

VCC16

QB1

SCK11

QC2

SI14

QD3

RCK12

QE4

/G13

QF5

QG6

GND8

QH7

74HC595VCC

GND

510Ω ×8VD1

VCC

VD2

VD3

VD4

VD5

VD6

VD7VD8

图 8-58 74HC595与 STC15F2K60S2 单片机的接口电路

Page 360: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24360/367

应用演示程序:;================== 输出锁存器输出数据子程序 =================SDATA_595 EQU P1.0 ; 串行数据输入SCLK_595 EQU P1.1 ;移位时钟脉冲RCK_595 EQU P1.2 ; 输出锁存器控制脉冲 ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV SP,#60H MOV R0,#0FEHMAIN1: LCALL OUT_595 LCALL DELAY MOV A,R0 RL A MOV R0,A LJMP MAIN1

Page 361: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24361/367

;----------------- 输出锁存器输出数据子程序 -----------------OUT_595:LCALL WR_595 CLR RCK_595 NOP NOP SETB RCK_595 ; 上升沿将数据送到输出锁存器 NOP NOP NOP CLR RCK_595 RET

Page 362: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24362/367

;----------------- 移位寄存器接收数据子程序 ------------------

WR_595: MOV R4,#08H

MOV A,R0

WR_LOOP:RLC A

MOV SDATA_595,C

SETB SCLK_595 ; 上升沿发生移位 NOP

NOP

CLR SCLK_595

DJNZ R4,WR_LOOP

RET

Page 363: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24363/367

;------------------------ 延时子程序 ---------------------

DELAY:MOV R5,#03H

DEL0:MOV R6,#0FFH

DEL1:MOV R7,#0FFH

DJNZ R7,$

DJNZ R6,DEL1

DJNZ R5,DEL0

RET

;=================================================

END

Page 364: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24364/367

对应的 C语言程序如下:/****** 74HC595 走马灯演示程序 ***********************/#include “reg51.h” //51芯片管脚定义头文件#include “intrins.h” // 内部包含延时函数 _nop_()#define uchar unsigned char#define uint unsigned intuchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};sbit SDATA_595=P1^0; // 串行数据输入sbit SCLK_595 =P1^1; //移位时钟脉冲sbit RCK_595 =P1^2; // 输出锁存器控制脉冲uchar bdata temp;sbit mybit=temp^7;/*********************延时子程序 *********************/void delay(int ms){ int k; while(ms--) { for(k=0;k<250;k++) { _nop_(); _nop_(); _nop_(); _nop_(); } }}

Page 365: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24365/367

/***********将显示数据送入 74HC595 内部移位寄存器 **********/void WR_595(void){ uchar j; for(j=0;j<8;j++) { temp=temp<<1; SDATA_595=mybit; SCLK_595=1; // 上升沿发生移位 _nop_(); _nop_(); SCLK_595=0; }}

Page 366: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24366/367

/******将移位寄存器内的数据锁存到输出寄存器并显示 ******/void OUT_595(void){ RCK_595=0; _nop_(); _nop_(); RCK_595=1; // 上升沿将数据送到输出锁存器 _nop_(); _nop_(); _nop_(); RCK_595=0;}

Page 367: 第八章 数据通信 本章学习目标 了解通信的有关概念 掌握串行通信和并行通信的原理 掌握常见串行接口 (RS232/RS485/SPI/I 2 C) 的原理及应用方法

17:18:24367/367

/*******************主程序 ******************************/void main(void){ SCLK_595=0; RCK_595=1; while(1) { uchar i; for(i=0;i<8;i++) { temp=DAT[i]; //取显示数据 WR_595(); OUT_595(); delay(100); } }}