单片机原理及应用 (C语言版) 第8章 单片机系统扩展

Slides:



Advertisements
Similar presentations
现代电子技术实验 ——综合实验之单片机部分
Advertisements

《单片机原理及应用》 《微型计算机原理及接口技术 》 授课专业:测控13级 授课学时: 78 学时 理论教学:52学 实验教学:26学时
教员信息 姓 名:仲崇权 单 位:电子与信息工程学院 电 话: 办公室:创新院大厦720房间 :
第8章 单片机系统的抗干扰技术 本章学习目标: 熟悉单片机系统的各种干扰来源及形式 学会供电系统及过程通道的抗干扰措施
第7章 AT89S51单片机的 串行口 1.
第三章 计算机系统 的组成与工作原理 本章学习目标 理解模型机的结构及工作过程 掌握单片机的结构 掌握单片机I/O口的使用
半导体存储器 第四章 半导体存储器.
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
單晶片原理與應用 魏兆煌 整理 南台科技大學 電機系 Sep
任务1: 点亮你的LED----初识单片机.
第七章 单片机存储器的扩展.
第四章 指令系统及汇编语言程序设计.
本章分为四节,主要介绍: 4.1 程序编制的方法和技巧 4.2 源程序的编辑和汇编 4.3 基本程序结构 4.4 常用程序举例.
项目2 2个LED发光二极管控制 知识与能力目标 熟悉单片机的I/O口功能与特性。
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
本章小结 C51单片机指令系统概述 C51单片机寻址方式 C51单片机指令系统
单片机原理与应用.
第9章 串行扩展技术 (课时:6学时).
第7章 单片机系统的串行扩展 西安思源学院 电子信息工程学院 1.
第8章 AT89S52单片机外部 存储器的扩展 1.
第9章 数模转换器与模数转换器 本章学习目标 了解数模转换器的工作原理及性能指标 掌握模数转换器的应用 掌握数模转换器的应用.
第2章 MCS-51单片机指令系统与汇编语言程序设计
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
第8章 模拟接口 8.1 模拟接口概述 8.2 DAC及其接口 8.3 ADC及其接口.
第二部分 微机原理 第3章 MCS-51的 指令系统 主讲教师:喻红.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第14章 单片机应用系统抗干扰 与可靠性设计 1.
第六章 存贮器 6.1 存储器概述 6.2 随机存取存储器(RAM) 6.3 只读存储器(ROM) 6.4 CPU与存储器的连接.
第6章 MCS - 51单片机内部定时器/ 计数器 及串行接口 6.1 定时器/计数器的结构及工作原理 6.2 方式和控制寄存器
YM100开发实验板 演讲人:熊小燕 2009年月12月16日
第七章 MCS-51系统扩展 一、程序存储器扩展
第十一章 复位、时钟和省电方式控制.
第3章 AT89C51指令系统 3.1基本概念内部结构和引脚功能 指令、指令系统、机器代码
单片机原理及应用 MCS-51系列单片机的基本硬件结构 MCS-51指令系统 MCS-51单片机的系统扩展与应用.
第八章 数据通信.
Block diagram BB —逻辑 —音频 —电源管理 HW interface. Block diagram BB —逻辑 —音频 —电源管理 HW interface.
第5章 智能汽车设计基础—微控制器.
三星S3C2440微处理器.
第七章 MCS-51并行口的扩展 MCS51单片机内部有4个并行口,当内部并行口不够用时可以外扩并行口芯片。可外扩的并行口芯片很多,分成2类:不可编程的并行口芯片(74LS3734和74LS245)和可编程的并行口芯片(8255)。 7.1 不可编程并行口芯片的扩展 7.2 可编程并行口芯片的扩展.
单片机原理及应用 ——基于Proteus与Keil C 哈工大出版社
第2章 单片机的结构原理与 简单应用 (课时:10学时).
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
单片机原理 单 片 机 单片机接口技术 单片机应用技术.
第十章 人机交互接口 本章学习目标 掌握键盘接口技术 掌握数码、液晶显示技术 了解数码管显示驱动和键盘扫描控制专用芯片.
第10章 综合实训 课题一 水温控制系统设计 一、实训目的 二、课题要求 熟悉常用温度传感器AD590的特性及接口电路的设计方法;
第8章 MCS-51串行口 8.1 串行口及其通信方式 8.2 IBM-PC系列机与 单片机 的通信技术.
第2章 单片机系统组成原理 2.1 MCS-51单片机组成原理 2.2 单片机复位电路设计 2.3 MCS-51存储器配置
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
本 章 重 点 单片机的结构特点 单片机的存储器特点 I/O端口的特点 CPU时序 课时安排:3个课时.
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第4章 中断技术 一个完整的微机系统是由硬件和软件共同构成的。微机系统的硬件有CPU、存储器和I/O口,外设组成。CPU与存储器之间的信息交换比较简单,而CPU与外设之间进行信息交换之前必须确定外设是否准备好,即选择I/O传送方式。I/O传送方式有4种:无条件、查询、中断和DMA。本章学习中断传送方式的有关内容。
项目四 基于SPI串行总线接口DA芯片TLC5615的使用
微机原理与接口技术 西安邮电大学计算机学院 王忠民.
本章内容 MCS-51单片机指令系统的格式 MCS-51单片机寻址方式 指令系统的分析
单片机原理与应用 主讲人:张荣刚 福建师范大学福清分校.
第6章 存储器接口 6.1 存储器概述 6.2 半导体存储器 6.3 MCS-51单片机存储器扩展.
键盘 LCD显示器 触摸屏技术 串行总线数据通信 PTR2000无线数据传输
什么是单片机 单片微型计算机(Single Chip Microcomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(Central Processing Unit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。单片机内部基本结构如图1.7所示。由于它的结构与指令功能都是按照工业控制要求设计的,故又称为微控制器(Micro-Controller.
第三章 计算机系统的组成与工作原理.
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
2. MCS-51单片机的组成及结构分析 2.1 MCS-51单片机的内部结构及结构特点
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
简单芯片扩展I/O接口 8155可编程接口芯片及其使用 键盘及显示器接口设计 A/D和D/A转换接口技术
单片机应用技术 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计
第三章 半导体存储器及其接口 第一节 概述 第二节 半导体存储器 第三节 半导体存储器与CPU接口 一、存储器的分类
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第2章 80C51单片机的硬件结构 教学基本要求: (1)、熟悉单片机的定义、名称、分类方法;
第1章 微型计算机基础.
Presentation transcript:

单片机原理及应用 (C语言版) 第8章 单片机系统扩展 主 编:周国运 本章制作:赵天翔 中国水利水电出版社

第8章 单片机系统扩展 目 录 8.1 扩展并行三总线 8.2 扩展简单并行输入/输出口 8.3 扩展并行数据存储器 第8章 单片机系统扩展 目 录 8.1 扩展并行三总线 8.2 扩展简单并行输入/输出口 8.3 扩展并行数据存储器 8.4 串行扩展总线接口技术

第8章 单片机系统扩展 本章主要介绍了MCS-51单片机系统扩展的方法。通过扩展并行三总线来进行并行总线接口扩展;通过UART或I/O口模拟几种串行通信的特点来进行串行总线接口扩展。

8.1 扩展并行三总线 主要内容 8.1.1 片外三总线结构 8.1.2 MCS-51系统扩展的实现 8.1.3 总线驱动

8.1.1 片外三总线结构 通常,微机的CPU外部都有单独的并行地址总线、数据总线、控制总线。 8.1.1 片外三总线结构 通常,微机的CPU外部都有单独的并行地址总线、数据总线、控制总线。 MCS-51单片机由于引脚的限制,数据总线和地址总线是复用的。 地址需要锁存:为了能把复用的数据总线和地址总线分离出来以便同外部的芯片正确的连接,需要在单片机的外部增加地址锁存器,从而构成与一般CPU相类似的三总线结构,如图8-1所示。

图8-1 89C52扩展的三总线 A8~A15 P2 地址总线 ALE 地址 A0~A7 锁存器 P0 D0~D7 数据总线 89C52 8.1.1 片外三总线结构 A8~A15 P2 地址总线 ALE 地址 锁存器 A0~A7 P0 D0~D7 数据总线 89C52 PSEN 控制总线 WR RD 图8-1 89C52扩展的三总线

地址锁存器74HC573与单片机P0口连接,扩展地址总线,如图8-2所示。 8.1.1 片外三总线结构 地址锁存器74HC573与单片机P0口连接,扩展地址总线,如图8-2所示。 ALE P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 LE OE 8D 8Q 7D 7Q 6D 6Q 5D 5Q 4D 4Q 3D 3Q 2D 2Q 1D 1Q A7 A6 A5 A4 A3 A2 A1 A0 89C52 74HC573 图8-2 地址总线扩展电路

74HC573是有输出三态门的电平允许8位锁存器。引脚信号如下: OE:输出允许端,为0时芯片有效。 8.1.1 片外三总线结构 74HC573简介 74HC573是有输出三态门的电平允许8位锁存器。引脚信号如下: OE:输出允许端,为0时芯片有效。 LE:锁存控制端,高电平时,锁存器的数据输出端Q的状态,与数据输入端D相同,即锁存器是透明的;当LE端从高电平返回到低电平时(下降沿后),输入端的数据就被锁存在锁存器中,数据输入端D的变化不再影响Q端。

地址总线(Address Bus,AB)用于传送单片机送出的地址信号,以便进行存储器单元和I/O端口的选择。 8.1.1 片外三总线结构 一、地址总线 地址总线(Address Bus,AB)用于传送单片机送出的地址信号,以便进行存储器单元和I/O端口的选择。 地址总线是单向的,只能由单片机向外发送信息。 地址总线的数目决定了可直接访问的存储单元的数目。

三、控制总线 二、数据总线 数据总线(Data Bus,DB)用于单片机与存储器或I/O端口之间的数据传送。 8.1.1 片外三总线结构 二、数据总线 数据总线(Data Bus,DB)用于单片机与存储器或I/O端口之间的数据传送。 一般数据总线的位数与CPU的字长一致,MCS-51单片机的数据总线是8位的。 数据总线是双向的,可以进行两个方向的数据传送。 三、控制总线 控制总线(Control Bus,CB)是单片机发出的以控制片外ROM、RAM和I/O口读/写操作的一组控制线。

8.1.2 MCS-51系统扩展的实现 一、以P0口作低8位地址及8位数据的复用总线 复用,即一段时间内作两种或两种以上用途。 在这里指P0口在每个CPU周期的前半个周期输出低8位地址,由地址锁存器锁存,然后由地址锁存器代替P0口输出低8位地址。后半个周期进行8位数据的输入输出。

二、以P2口作为高8位的地址总线 P0口的低8位地址加上P2的高8位地址就可以形成16位的地址总线,达到64KB的寻址能力。 8.1.2 MCS-51系统扩展的实现 二、以P2口作为高8位的地址总线 P0口的低8位地址加上P2的高8位地址就可以形成16位的地址总线,达到64KB的寻址能力。 实际应用中,往往不需要扩展那么多地址,扩展多少用多少口线,剩余的口线仍可作一般I/O口来使用。

三、控制信号线 ALE:地址锁存信号,用以实现对低8位地址的锁存。 PSEN:片外程序存储器读选通信号。 8.1.2 MCS-51系统扩展的实现 三、控制信号线 ALE:地址锁存信号,用以实现对低8位地址的锁存。 PSEN:片外程序存储器读选通信号。 EA:程序存储器选择信号。为低电平时,访问外部程序存储器;为高电平时,访问内部程序存储器。 WR:片外数据存储器写选通信号。 RD:片外数据存储器读选通信号。

8.1.3 总线驱动 总线驱动的原因:在单片机应用系统中,扩展的三总线上挂接很多负载,如存储器、并行接口、A/D接口、显示接口等,但总线接口的负载能力有限,因此常常需要通过连接总线驱动器进行总线驱动。

总线驱动器的作用:对于单片机的I/O口只相当于增加了一个TTL负载,因此驱动器除了对后级电路驱动外,还能对负载的波动变化起隔离作用。 8.1.3 总线驱动 总线驱动器的作用:对于单片机的I/O口只相当于增加了一个TTL负载,因此驱动器除了对后级电路驱动外,还能对负载的波动变化起隔离作用。 在对TTL负载驱动时,只需考虑驱动电流的大小。 在对MOS负载驱动时,MOS负载的输入电流很小,更多地要考虑对分布电容的电流驱动。

系统总线中地址总线是单向的,因此驱动器可以选用单向的,如74LS244,还带有三态控制,能实现总线缓冲和隔离。 8.1.3 总线驱动 总线驱动器的选择: 系统总线中地址总线是单向的,因此驱动器可以选用单向的,如74LS244,还带有三态控制,能实现总线缓冲和隔离。 数据总线是双向的,其驱动器也要选用双向的,如74LS245。74LS245也是三态的,有一个方向控制端DIR。DIR=1时输出(An→Bn),DIR=0时输入(An←Bn)。

8.2 扩展简单并行输入/输出口 89C52有P0~P3四组I/O口,但是在某些特定的场合,可能会出现I/O口不够用的情况。这时就需要通过扩展来增加I/O口的数量以满足使用的需要。 在很多应用系统中,采用74系列TTL电路或4000系列MOS电路芯片,扩展并行数据输入输出。

8.2 扩展简单并行输入/输出口 例1 在图8-4中,当P2.0=0,WR=1,RD=0时,通过74HC244(扩展输入)读入按键状态,当P2.0=0,WR=0,RD=1时,通过74HC573(扩展输出)根据按键状态驱动发光二极管发光。 74HC244、74HC573的操作地址设为0xfeff。

图8-4 简单I/O接口扩展 +5V 74HC573 74HC244 + + 8.2 扩展简单并行输入/输出口 P0.0 D0 Q0 8.2 扩展简单并行输入/输出口 74HC573 +5V P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 89C52 WR P2.0 RD D0 Q0 D1 Q1 D2 Q2 D3 Q3 D4 Q4 D5 Q5 D6 Q6 D7 Q7 LE VCC 74HC244 Q0 D0 Q1 D1 Q2 D2 Q3 D3 Q4 D4 Q5 D5 Q6 D6 Q7 D7 G + + 图8-4 简单I/O接口扩展

C语言程序清单: #include <reg52.h> void main() { unsigned char data tmp1, tmp2=0; unsigned char xdata *pt1; pt1=0xfeff; //给指针赋地址值0xfeff while(1) //循环 { tmp1=*pt1; //从74HC244输入数据 if (tmp1!=tmp2) //判断输入改变时, { *pt1 =tmp1; //从74HC573输出数据 tmp2=tmp1; } } }

汇编语言程序清单: MOV 30H,#00H ;设一初值 MOV DPTR,#0FEFFH ;设端口地址 LOOP: 8.2 扩展简单并行输入/输出口 汇编语言程序清单: MOV 30H,#00H ;设一初值 MOV DPTR,#0FEFFH ;设端口地址 LOOP: MOVX A,@DPTR ;从244读键盘新值 CJNE A, 30H, NEXT ;与上次值比较 SJMP LOOP ;相等再读键盘值 NEXT: MOV 30H,A ;保存新键盘值 MOVX @DPTR,A ;从573输出键盘值 SJMP LOOP ;继续读取键盘值

8.3 扩展并行数据存储器 主要内容 8.3.1 扩展存储器概述 8.3.2 数据存储器的扩展

数据存储器即随机存取存储器(Random Access Memory,RAM),用于存放可随时修改的数据信息。 8.3 扩展并行数据存储器 数据存储器即随机存取存储器(Random Access Memory,RAM),用于存放可随时修改的数据信息。 单片机使用的主要是静态RAM。 MCS-51系列单片机片外数据存储器的空间可达64KB,而片内数据存储器的空间只有128B或256B。如果片内的数据存储器不够用时,则需进行数据存储器的扩展。

8.3.1 扩展存储器概述 存储器扩展的核心问题是存储器的编址问题。所谓编址就是给存储单元分配地址。 8.3.1 扩展存储器概述 存储器扩展的核心问题是存储器的编址问题。所谓编址就是给存储单元分配地址。 由于存储器通常由多个芯片组成,为此存储器的编址分为两个层次: 即存储器芯片的选择和存储器芯片内部存储单元的选择。

8.3.1 扩展存储器概述 一、地址线的译码 存储器芯片的选择有两种方法:线选法和译码法。 1、线选法。所谓线选法,就是直接以系统的地址线作为存储器芯片的片选信号,为此只需把用到的地址线与存储器芯片的片选端直接相连即可。 2、译码法。所谓译码法,就是使用地址译码器对系统的片外地址进行译码,以其译码输出作为存储器芯片的片选信号。译码法又分为完全译码和部分译码两种。

(1)完全译码。地址译码器使用了全部地址线,地址与存储单元一一对应,也就是1个存储单元只占用1个唯一的地址。 8.3.1 扩展存储器概述 (1)完全译码。地址译码器使用了全部地址线,地址与存储单元一一对应,也就是1个存储单元只占用1个唯一的地址。 (2)部分译码。地址译码器仅使用了部分地址线,地址与存储单元不是一一对应,而是1个存储单元占用了几个地址。

8.3.1 扩展存储器概述 芯片译码地址:在设计地址译码器电路时,常采用地址译码关系图。所谓地址译码关系图,就是一种用简单的符号来表示全部地址译码关系的示意图,如图8-5所示。 译码地址线 与存储器连接的地址线 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 1 × 图8-5 地址译码关系图

二、扩展存储器所需芯片数目的确定 若所选存储器芯片字长与单片机字长一致,则只需扩展容量。所需芯片数目按下式确定: 芯片数目= 系统扩展容量 8.3.1 扩展存储器概述 二、扩展存储器所需芯片数目的确定 若所选存储器芯片字长与单片机字长一致,则只需扩展容量。所需芯片数目按下式确定: 芯片数目= 系统扩展容量 存储器芯片容量 若所选存储器芯片字长与单片机字长不一致,则不仅需扩展容量,还需字扩展。所需芯片数目按下式确定: 芯片数目= × 系统扩展容量 存储器芯片容量 系统字长 存储器芯片字长

三、3—8译码器74LS138 3—8译码器74LS138为一种常用的地址译码器芯片。 8.3.1 扩展存储器概述 三、3—8译码器74LS138 3—8译码器74LS138为一种常用的地址译码器芯片。 其中,G1、G2A、G2B为控制端。只有当G1为“1”,且G2A、G2B均为“0”时,译码器才能进行译码输出。否则译码器的8个输出端全为高阻状态。 译码输入端与输出端之间的译码关系如表8-1所示。

8.3.1 扩展存储器概述 表8-1 74LS138的译码关系 CBA编码 000 001 010 011 100 101 110 111 输出有效位

8.3.2 数据存储器的扩展 一、常用静态RAM芯片 二、扩展数据存储器举例 8.3.2 数据存储器的扩展 一、常用静态RAM芯片 常见的静态RAM芯片有6264(8K×8位)、62256(32K×8位)、628128(128K×8位)等。 二、扩展数据存储器举例 例8-2 采用6264芯片在89C52片外扩展24KB数据存储器,如图8-8所示。

解:根据公式可得 芯片数目= =3片 图8-8 6264扩展24KB数据存储器 24KB 8KB A8~A12 D0~D7 A0~A7 8.3.2 数据存储器的扩展 A8~A12 P2.0~P2.4 P0 ALE P2.5 P2.6 P2.7 WE RD D0~D7 74HC573 D Q LE A0~A7 A0~A12 6264 CE WE OE A0~A12 6264 CE WE OE A0~A12 6264 CE WE OE 74LS138 A Y0 B Y1 C Y2 图8-8 6264扩展24KB数据存储器 解:根据公式可得 芯片数目= =3片 24KB 8KB

8.4 串行扩展总线接口技术 主要内容 8.4.1 常用的串行总线接口简介 8.4.2 I2C总线 8.4.3 SPI串行外设接口总线

串行扩展总线技术是新一代单片机技术发展的一个显著特点。 8.4 串行扩展总线接口技术 串行扩展总线技术是新一代单片机技术发展的一个显著特点。 相对于并行总线接口,串行总线接口有着占用I/O口线少(一般3~4根),编程相对简单,易于实现用户系统软硬件的模块化、标准化等优点。 随着串行总线接口技术(SPI、I2C等)和各种串行接口芯片的发展,串行总线接口技术越来越受到人们的推崇。

一、I2C(Inter Integrated Circuit) 8.4.1 常用的串行总线接口简介 一、I2C(Inter Integrated Circuit) I2C总线是Philips公司推出的芯片间串行传输总线。 I2C总线是二线制,采用器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。

二、SPI 三、Microware SPI总线是Motorola公司提出的一种同步串行外设接口。 8.4.1 常用的串行总线接口简介 二、SPI SPI总线是Motorola公司提出的一种同步串行外设接口。 SPI总线是三线制,可直接与多种标准外围器件直接接口。 三、Microware Microware总线是NS公司提出的串行同步双工通信接口。 Microware总线是三线制,由一根数据输出(SO)线、一根数据输入(SI)线和一根时钟(SK)线组成。

四、单总线(1-wire) 单总线及应用: 1-wire总线是Dallas公司研制开发的一种协议,主要用于便携式仪表和现场监控系统。 8.4.1 常用的串行总线接口简介 四、单总线(1-wire) 单总线及应用: 1-wire总线是Dallas公司研制开发的一种协议,主要用于便携式仪表和现场监控系统。 单总线结构:是利用一根线实现双向通信,由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对从芯片进行数据的读取。

8.4.1 常用的串行总线接口简介 五、USB(Universal Serial Bus) USB总线及应用:USB总线是Compaq、Intel、Microsoft、NEC等公司联合制定的一种计算机串行通信协议。 USB总线的主要优点:比较于其他传统接口的一个优势是即插即用的实现,即插即用(Plug-and-Play)也称为热插拔(Hot Plugging)

CAN总线的主要优点:在由CAN总线构成的单一网络中,理论上可以挂接无数个节点。 8.4.1 常用的串行总线接口简介 六、CAN(Controller Area Network) CAN总线及应用: CAN总线是德国Bosch公司最先提出的多主机局域网总线,是国际上应用最广泛的现场总线之一。 CAN总线的主要优点:在由CAN总线构成的单一网络中,理论上可以挂接无数个节点。

8.4.2 I2C总线 一、I2C总线的特点 I2C总线最主要的优点是其简单性和有效性。 I2C总线的其它优点:它支持多主控(Multimastering),其中任何能够进行发送和接收的设备(节点)都可以成为主控器。

I2C总线的主控器:一个主控器能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控器。如图8-9所示。 单片机A A/D、D/A 转换器 专用集成 电路 静态RAM 或ROM LCD 显示器 单片机B SDA SCL 图8-9 典型I2C总线系统示意图

多主方式:通过硬件和软件的仲裁,主控器取得总线控制权。 8.4.2 I2C总线 I2C总线支持多主和主从两种工作模式 多主方式:通过硬件和软件的仲裁,主控器取得总线控制权。 主从方式:从器件地址包括器件编号地址和引脚地址两部分,器件编号地址由I2C总线委员会分配,引脚地址由外界电平的高低决定。 器件内部子地址:当器件内部有连续的子地址空间时,对这些空间进行连续读写,子地址会自动加1。

CPU发出的控制信号:分为地址码和控制量两部分。 地址码:用来选址,即接通需要控制的电路,确定控制的种类。 8.4.2 I2C总线 CPU发出的控制信号:分为地址码和控制量两部分。 地址码:用来选址,即接通需要控制的电路,确定控制的种类。 控制量:决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。

二、I2C总线的时序 I2C总线的信号:I2C总线在传送数据过程中共有三种类型信号,分别是:开始信号、结束信号和应答信号。 I2C总线 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。

如图8-10所示,为I2C总线的一般时序。即起始信号、结束信号、允许数据线改变的条件等。 SDA SCL 开始信号允许数据变化 允许数据变化 允许数据变化 结束信号 图8-10 I2C总线的时序

三、I2C总线的数据传输过程 数据传输时,主机先发送启动信号和时钟信号,随后发送寻址字节来寻址被控器件,并规定数据传送方向。 寻址字节由7位从机地址(D7~D1)和1位方向位(D0,读0/写1)组成。 从机地址包括器件编号地址和引脚地址两部分。

I2C总线器件的7位从器件(机)地址: 8.4.2 I2C总线 DA3 DA2 DA1 DA0 A2 A1 A0 器件识别码 如:RTC 1101 允许在公用的I2C总线 EEPROM 1010 上同时接8个同类器件 R/

对从接收器:在寻址字节之后,主控发送器通过SDA线向从接收器发送数据,数据发送完毕后发送终止信号,以结束传送过程。 8.4.2 I2C总线 从机对地址的响应:当主机发送寻址字节时,总线上所有器件都将其中的高7位地址与自己的比较,若相同,则该器件根据读/写位确定是从发送器还是从接收器。 对从接收器:在寻址字节之后,主控发送器通过SDA线向从接收器发送数据,数据发送完毕后发送终止信号,以结束传送过程。 对从发送器:在寻址字节之后,主控接收器通过SDA线接收被控发送器的发送数据。

每传输一位数据,都有一个时钟脉冲相对应。时钟脉冲不必是周期性的,它的时钟间隔可以不同。 8.4.2 I2C总线 每传输一位数据,都有一个时钟脉冲相对应。时钟脉冲不必是周期性的,它的时钟间隔可以不同。 I2C总线的备用状态(“非忙”状态):SDA和SCL都为“1”;只有当总线处于“非忙”状态时,数据传输才能被初始化。 I2C总线的关闭状态:SCL箝位在低电平。 I2C总线上传输的数据和地址字节均为8位,且高位在前,低位在后。

SCL的“线与”特性:任一器件的SCL为低电平时,便时时钟线SCL变低,SDA上数据就被停止传送。 8.4.2 I2C总线 数据线SDA上的一般情况:I2C总线以开始信号为启动信号;接着传输的是地址和数据字节,数据字节是没有限制的;每个字节后必须跟随一个应答位(0);全部数据传输完毕后,以结束信号结尾。 SCL的“线与”特性:任一器件的SCL为低电平时,便时时钟线SCL变低,SDA上数据就被停止传送。

8.4.2 I2C总线 接收器的应答:正常应答位为0;当接收器接收到一个字节后无法立即接收下一个字节时,便向SCL线输出低电平而箝住SCL(SCL=0),迫使SDA线处于等待状态。 被控器箝住SCL线为低电平,使主控发送器处于等待状态的情况:如图8-11中的A处,当接收器在A点接收完主控器发来的一个字节时,需要处理接收中断而无法继续接收,则被控器便可箝住SCL线为低电平,使主控发送器处于等待状态,直到被控器处理完接收中断后,再释放SCL线。

图8-11 I2C总线的数据传送字节格式 8.4.2 I2C总线 SDA 方向位 发送器等待 MSB 从地址 数据 R/W 来自接收器 响应信号 来自接收器 响应信号 SCL ACK A ACK P/S S 若传送多个字节则重复 停止信号 开始信号 重复开始信号 图8-11 I2C总线的数据传送字节格式

(1)应答信号的发送时刻:数据传输时,发送器每发完一个字节,都要求接收方发回一个应答信号(0)。 8.4.2 I2C总线 关于应答信号: (1)应答信号的发送时刻:数据传输时,发送器每发完一个字节,都要求接收方发回一个应答信号(0)。 (2)应答信号的过程:发送时钟仍由主控器在SCL上产生。主控发送器必须在被控接收器发送应答信号前,预先释放对SDA线的控制(SDA=1),以便主控器对SDA线上应答信号的检测。

正常应答:主控器发送时,被控器接收完每个字节需发回应答信号“0”,主控器据此进行下一字节的发送。 8.4.2 I2C总线 正常应答:主控器发送时,被控器接收完每个字节需发回应答信号“0”,主控器据此进行下一字节的发送。 异常应答:如果被控器由于某种原因无法继续接收SDA上数据时,可向SDA输出一个非应答信号(1),主控器据此便产生一个Stop来终止SDA线上的数据传输。 主控器接收时也应给被控器发应答信号。 主控器接收时的结束应答:当主控器要结束传输时,必须给被控器发一个非应答信号“1”,令被控器释放SDA线,以便主控器发送Stop信号来结束数据的传输,如图8-12所示。

图8-12 I2C总线的应答信号 8.4.2 I2C总线 发送器 数据输出 接收器 数据输入 主控器 时钟线 起始信号 释放总线保持高电平 不应答 A 应答 A 应答时钟脉冲 S MSB 2 8 9 1 图8-12 I2C总线的应答信号

8.4.2 I2C总线 四、I2C的数据格式 1、主控器写数据 主机写数据过程:整个过程均为主机发送,从机接收,数据的方向位R/W=0。应答位ACK由从机发送,当主机产生结束信号后,数据传输停止。格式如下:

S为开始信号,P为结束信号,A为应答信号, 为非应答信号, 8.4.2 I2C总线 S A Data 1 Data 2 … Data n-1 Data n P SLA A/ S为开始信号,P为结束信号,A为应答信号, 为非应答信号, SLA 为寻址字节(写),Data 1~Data n为被传送的n个数据。 为主控器发送,被控器接收。 为被控器发送,主控器接收。

8.4.2 I2C总线 2、主控器读数据 主机读数据过程:寻址字节为主机发送、从机接收,方向位R/W=1,n个数据字节均为从机发送、主机接收。主机接收完全部数据后发非应答位(1),表明读操作结束。格式如下: S SLA R A Data 1 Data 2 … Data n-1 Data n P SLA R为寻址字节读。

8.4.2 I2C总线 3、主控器读/写数据 改变传送方向的数据传输过程:由于读/写方向有变化,开始信号和寻址字节都会重复一次,但读/写方向(R/W)相反。格式如下: S SLA R A Data 1 Data 2 … Data n Sr DATA 1 DATA2 DATA n-1 DATA n P SLA A/ Sr为重复开始信号,Data 1~Data n为主控器的读数据,DATA 1~DATA n为主控器的写数据。

8.4.2 I2C总线 三、I2C总线的应用 带有I2C接口的单片机:Cygnal的 C8051 F0XX系列,Philips的P87LPC7XX系列,Microchip的PIC16C6XX系列等。很多外围器件如存储器、监控芯片等也提供I2C接口。 图8-13为I2C总线外围扩展示意图。

图8-13 I2C总线外围扩展示意图 8.4.2 I2C总线 LED 显示器 LED驱动 控制器 SDA SCL LCD 显示器 LCD驱动 键盘 I/O SDA SCL 打印机 I/O SDA SCL VCC MCU SDA SCL SCL SDA SRAM SCL SDA E2PROM SCL SDA ADC/DAC SCL SDA RTC SCL SDA DTMF 图8-13 I2C总线外围扩展示意图

RTC实时时钟,DTMF双音多频编码解码器。 8.4.2 I2C总线 RTC实时时钟,DTMF双音多频编码解码器。 例8-3 89C52模拟I2C。如图8-14所示。 VCC 89C52 P1.0 P1.1 I2C器件 SCL SDA 10KΩ×2 图8-14 89C51模拟I2C

#include <reg52.h> #include <intrins.h> //有位操作、空操作等 8.4.2 I2C总线 C语言程序清单: #include <reg52.h> #include <intrins.h> //有位操作、空操作等 sbit scl=0x90; //P1.0的地址 sbit sda=0x91; //P1.1的地址 void start(void) //发送开始信号 { sda=1; scl=1; _nop_(); //延时 _nop_(); sda=0; _nop_(); _nop_(); scl=0; }

void stop(void) //发送结束信号 { sda=0; scl=1; _nop_(); //延时 _nop_(); sda=1; 8.4.2 I2C总线 void stop(void) //发送结束信号 { sda=0; scl=1; _nop_(); //延时 _nop_(); sda=1; scl=0; }

if(sda!=0) //判断是否有应答 return sda; //若非应答返回"sda" scl=0; 8.4.2 I2C总线 bit tack(void) //检查应答 { sda=1; //准备接收 scl=1; _nop_(); if(sda!=0) //判断是否有应答 return sda; //若非应答返回"sda" scl=0; }

void txbyt(unsigned char txdat) //字节发送 { unsigned int i; 8.4.2 I2C总线 void txbyt(unsigned char txdat) //字节发送 { unsigned int i; for(i=0;i<8;i++) //一个字节8次按位循环发送 { if(txdat&0x80) sda=1; //取最高位,是1发送1 else sda=0; //是0发送0 scl=1; //保持数据有效 _nop_(); scl=0; //准备改变数据 sda=0; txdat=txdat<<1; //左移准备取次高位 }

unsigned char rxbyt(void) //字节接收 8.4.2 I2C总线 unsigned char rxbyt(void) //字节接收 { unsigned char rxdat=0; //接收数据存于rxdat unsigned int i; for(i=0;i<8;i++) { sda=1; //开始接收 scl=1; if(sda&1) rxdat+=1; else rxdat+=0; rxdat=rxdat<<1; scl=0; //应答 } return rxdat; //返回接收到的数据

NOP ;NOP的数目由时钟频率确定 NOP ;此处用NOP来延时 CLR SDA NOP CLR SCL RET 8.4.2 I2C总线 汇编语言程序清单: SCL EQU P1.0 SDA EQU P1.1 ;发送开始信号 START: SETB SDA SETB SCL NOP ;NOP的数目由时钟频率确定 NOP ;此处用NOP来延时 CLR SDA NOP CLR SCL RET

;结束信号 STOP: CLR SDA SETB SCL NOP NOP SETB SDA NOP CLR SDA CLR SCL RET 8.4.2 I2C总线 ;结束信号 STOP: CLR SDA SETB SCL NOP NOP SETB SDA NOP CLR SDA CLR SCL RET

;应答位检查 TACK: SETB SDA SETB SCL NOP NOP CLR 30H ;正常标志 MOV C,SDA 8.4.2 I2C总线 ;应答位检查 TACK: SETB SDA SETB SCL NOP NOP CLR 30H ;正常标志 MOV C,SDA JNC TEND ; 正常应答转移 SETB 30H TEND: CLR SCL RET

;发送子程序 TXBYT: MOV R4,#08H ;数据长度为8位 TX0: RLC A ; 发送位送入CY 8.4.2 I2C总线 ;发送子程序 TXBYT: MOV R4,#08H ;数据长度为8位 TX0: RLC A ; 发送位送入CY JC TX1 ;CY位为1转到TX1 CLR SDA ;置为低电平,发送0 SETB SCL NOP CLR SCL ; 高电平保持数据稳定 DJNZ R4,TX0 RET

TX1: SETB SDA SETB SCL NOP CLR SCL ; 脉冲变为低电平改变数据 CLR SDA DJNZ R4,TX0 8.4.2 I2C总线 TX1: SETB SDA SETB SCL NOP CLR SCL ; 脉冲变为低电平改变数据 CLR SDA DJNZ R4,TX0 RET

;字节接收子程序 RXBYT: MOV R4,#08H RX0: SETB SDA SETB SCL 8.4.2 I2C总线 ;字节接收子程序 RXBYT: MOV R4,#08H RX0: SETB SDA SETB SCL MOV C,SDA ;读入SDA引脚状态 MOV A,R5 ;数据位储存在R5 RLC A MOV R5,A CLR SCL DJNZ R4,RX0 RET

8.4.3 SPI串行外设接口总线 SPI(Serial Peripheral Interface,串行外围设备接口):是Motorola公司推出的一种同步串行通信方式,是一种三线同步总线。 SPI的特点:因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。图8-15为SPI总线典型结构。

图8-15 SPI总线系统典型结构示意图 8.4.3 SPI串行外设接口总线 SCK MOSI MISO MCU(主) I/O SCK CS SCK MOSI MISO 外围器件 CS SCK MOSI MISO 外围器件 CS SCK MOSI MISO 外围器件 CS 图8-15 SPI总线系统典型结构示意图

一、用一般I/O口线模拟扩展SPI外设接口 串行时钟线(SCK,同步脉冲) 主机输入/从机输出数据线(MISO,高位在前) 主机输出/从机输入数据线(MOSI,高位在前) 从机选择线 一、用一般I/O口线模拟扩展SPI外设接口 用P1.0模拟MCU的数据输出端(MOSI) 用P1.1模拟SPI的SCK输出端(SCK) 用P1.2模拟SPI的从机选择端(CS) 用P1.3模拟SPI的数据输入端(MISO)

MCU输出1位SCK时钟的低电平,使接口芯片串行左移,1位数据输入至89C52的P1.3; 8.4.3 SPI串行外设接口总线 单片机模拟1位数据输入/输出的过程如下: MCU输出1位SCK时钟的低电平,使接口芯片串行左移,1位数据输入至89C52的P1.3; 再置P1.1为1,使89C52从P1.0输出1位数据至串行接口芯片…… 依次循环8次,完成1次通过SPI传输1个字节的操作。 在一个CLK中,下降沿输出,上升沿输入,或反之。

例8-4 如图8-16所示,MCU串行输入子程序SPIIN,从2814 (E2PROM)的SPISO线上接收1字节数据并放入寄存器R7中。 3 7 4 MCM2814 VCC 图8-16 89C52与MCM2814的硬件连接图

C语言程序清单: #inclued <reg52.h> #include <intrins.h> 8.4.3 SPI串行外设接口总线 C语言程序清单: #inclued <reg52.h> #include <intrins.h> sbit sck=0x91; //P1.1的地址 sbit ss=0x92; //P1.2的地址 sbit miso=0x93; //P1.3的地址 sbit mosi=0x90; //P1.0的地址 unsigned char spiin(void) //接收子程序 { unsigned int i; unsigned char tmp=0; //接收到数据暂存于tmp sck=1; //准备开始 ss=0; //置片选信号

else tmp+=0; tmp=tmp<<1; sck=1; } return tmp; //接收完,返回数据 8.4.3 SPI串行外设接口总线 for(i=0;i<8;i++) { sck=0; _nop_(); if(miso&1) tmp+=1; else tmp+=0; tmp=tmp<<1; sck=1; } return tmp; //接收完,返回数据

汇编语言程序清单: SPIIN: SETB P1.1 CLR P1.2 MOV R1,#08H SPIN1: CLR P1.1 NOP MOV C,P1.3 ;从机输出送C RLC A ;左移至累加器ACC SETB P1.1 DJNZ R1,SPIN1 MOV R7,A RET

例8-5 MCU串行输出子程序SPIOUT,将89C52中R7寄存器的内容传送到2814的SPISI线上。 #inclued <reg52.h> #include <intrins.h> sbit sck=0x91; //P1.1的地址 sbit ss=0x92; //P1.2的地址 sbit miso=0x93; //P1.3的地址 sbit mosi=0x90; //P1.0的地址

if(tmp&0x80) mosi=1; //判位发送 else mosi=0; tmp=tmp<<1; //左移准备取次高位 8.4.3 SPI串行外设接口总线 void spiout(unsigned char tmp) //发送子程序 { unsigned int i; sck=1; ss=0; for(i=0;i<8;i++) { sck=0; _nop_(); _nop_(); if(tmp&0x80) mosi=1; //判位发送 else mosi=0; tmp=tmp<<1; //左移准备取次高位 }

汇编语言程序清单: SPIOUT: SETB P1.1 CLR P1.2 MOV R1,#08H MOV A,R7 SPIOT1: CLR P1.1 NOP NOP RLC A MOV P1.0,C ;左移ACC最高位至C SETB P1.1 ;进位C送SPISI线上 DJNZ R1,SPIOT1 RET

8.4.3 SPI串行外设接口总线 例8-6 MCU串行输入/输出子程序SPIIO,将89C52中R7的内容传送到2814的SPISI线上,同时从2814的SPISO接收1字节数据存入R0中。 同时收发程序: #inclued <reg52.h> #include <intrins.h> sbit sck=0x91; //P1.1的地址 sbit ss=0x92; //P1.2的地址 sbit miso=0x93; //P1.3的地址 sbit mosi=0x90; //P1.0的地址

unsigned char spiio(unsigned char ttmp) { unsigned int i; unsigned char rtmp=0; //接收暂存于rtmp sck=1; ss=0; for(i=0;i<8;i++) //循环接收8位 sck=0; _nop_();

if(ttmp&0x80) //判位发送 mosi=1; else mosi=0; if(miso&1) //判位接收 rtmp+=1; 8.4.3 SPI串行外设接口总线 if(ttmp&0x80) //判位发送 mosi=1; else mosi=0; if(miso&1) //判位接收 rtmp+=1; else rtmp+=0; rtmp=rtmp<<1; sck=1; ttmp=ttmp<<1; } return rtmp;

汇编语言程序清单: SPIIO: SETB P1.1 CLR P1,2 MOV R1,#08H ;设置计数器 MOV A,R7 SPIO1: CLR P1.1 NOP ;延时 NOP MOV C,P1.3 RLC A MOV P1.0,C SETB P1.1 DJNZ R1,SPIO1 MOV R0,A RET

8.4.3 SPI串行外设接口总线 二、利用89C52串口方式0实现SPI操作 如图8-17所示,利用89C52串行口方式0与串行时钟芯片HT1380连接实现SPI操作,适用于对绝对时钟要求较高的场合。 TXD RXD P1.0 89C52 SCLK I/O RST HT1380 X1 X2 图8-17 89C52与串行时钟芯片HT1380连接图

利用89C52串行口方式0与串行LED显示接口MAX7219实现SPI操作。 MAX7219可驱动8个LED显示器,如图8-18所示。 TXD RXD P1.0 89C52 SCLK I/O Load MAX7219 … 图8-18 89C52与串行LED显示接口连接图

TXD作为移位时钟,RXD作为串行数据I/O端,Load作为芯片选择端。 当Load低电平时,对7219进行读/写操作; 8.4.3 SPI串行外设接口总线 单片机与MAX7219交换信息过程: TXD作为移位时钟,RXD作为串行数据I/O端,Load作为芯片选择端。 当Load低电平时,对7219进行读/写操作; 当Load为高电平时, 7219处于高阻状态。

本章小结 本章首先介绍了并行三总线以及并行三总线的扩展方法。 然后讨论了如何通过并行三总线来扩展简单的并行输入/输出口和扩展并行数据存储器。 最后介绍了几种常见的串行接口总线扩展技术,重点讨论了I2C和SPI串行总线,并通过实例介绍了在无相应接口的单片机上,如何模拟I2C和SPI串行接口,以及具体的实现程序。

思考题与习题 1.假定一个存储器有4096个存储单元,其首地址为0,则末地址为多少? 2.6根地址线和11根地址线各可选多少个地址? 3.用2K×4位的数据存储器芯片扩展4K×8位的数据存储器需要多少片?地址总线是多少位?画出连线图。 4.用两片74HC573芯片扩展89C52的P1端口实现6位发光二极管的开关控制和点亮。

5.用2K×8位的数据存储器芯片扩展64K×8位的数据存储器需要多少根地址线? 6.I2C和SPI各有什么特点? 思考题与习题 5.用2K×8位的数据存储器芯片扩展64K×8位的数据存储器需要多少根地址线? 6.I2C和SPI各有什么特点? 7.用P1口模拟SPI从外部先发送从片内RAM中30H开始的10个字节,再接收30个字节存放在40H开始的片内RAM中。引脚自定义。 8.用P1口模拟I2C从外部接收一组数据,遇到“$”结束。引脚自定义。