第八章外部系统扩展.ppt

上传人:本田雅阁 文档编号:3161856 上传时间:2019-07-18 格式:PPT 页数:91 大小:3.36MB
返回 下载 相关 举报
第八章外部系统扩展.ppt_第1页
第1页 / 共91页
第八章外部系统扩展.ppt_第2页
第2页 / 共91页
第八章外部系统扩展.ppt_第3页
第3页 / 共91页
第八章外部系统扩展.ppt_第4页
第4页 / 共91页
第八章外部系统扩展.ppt_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《第八章外部系统扩展.ppt》由会员分享,可在线阅读,更多相关《第八章外部系统扩展.ppt(91页珍藏版)》请在三一文库上搜索。

1、第8 章 外部系统的扩展,8.1 并行扩展总线 8.2 串行扩展总线 8.3 并行存储器和I/O扩展 8.4 串行扩展介绍,系统扩展概述,系统扩展是指单片机内部各功能部件不能满足应用系统要求时,在片外连接相应的外围芯片以满足应用系统要求。,一、为何要进行系统扩展?,1)单片机本身的资源有限,2)单片机本身接口功能有限,单片机控制应用中的接口要求复杂,而单片机的接口只有数据锁存和缓冲功能,没有控制功能,难以满足复杂的I/O要求。,单片机系统中有两类数据传送操作: 单片机与存储器之间的数据读写操作; 单片机与其它设备之间的数据传送操作。,单片机与控制对象或外设之间的数据传送通常较复杂, 表现在以下

2、几方面:,1)速度差异大,2)设备种类繁多,低速与高速外设的速度相差很大,所以,单片机无法以一个固定的时序与它们按同步方式协调工作。,各种设备性能各异、对数据要求不同,因此,无法按统一格式进行数据传送。,3) 数据信号形式多样,有电压、电流信号,有数字形式、模拟形式。,上述因素使单片机的I/O操作变得很复杂,靠单片机本身的I/O口无法实现,必须扩展接口电路。,51 单片机的系统扩展主要有如下几种扩展,程序存储器(ROM)的扩展 数据存储器(RAM)的扩展 I/O口(普通I/O口、有特殊功能的接口)的扩展 中断系统扩展,1、扩展技术中主要研究、解决的问题: (1)提供合理的数据通道 (2)物理寻

3、址方法 (3)数据读写的控制方法 (4)收发双方的同步传送及其对信号时序的要求,二、单片机系统扩展方法 51有很强的外部扩展能力,通过总线来进行扩展,扩展电路及扩展方法较典型、规范。,总线扩展方法是指:以单片机为核心,通过总线把扩展部件连接起来。,常用的单片机系统扩展方法有两种:,1) 并行扩展法 利用单片机本身具备的三组总线(AB、DB、CB)进行的系统扩展。,三、最小应用系统 单片机系统的扩展是以基本的最小系统为基础的。,内部有程序存储器的单片机 + 晶振电路 + 复位电路就是一个最简单的最小应用系统。,对于内部无程序存储器的芯片8031来说, 则要用外接程序存储器的方法才能构成一个最小应

4、用系统。,2) 串行扩展法 利用串行总线进行的系统扩展。,串行扩展总线有: 单总线(1-Wire总线) I2C双线总线 SPI三线总线三种结构,外接晶振,复位电路,8051、 8751本身即可构成一片最小系统, 只要将单片机接上时钟电路和复位电路即可, 同时 接高电平, ALE、 信号不用, 系统就可以工作,(a) 8051/8751最小系统结构图;(b) 8031最小系统结构图,片内无程序存储器的芯片构成最小应用系统时, 须在片外扩展程序存储器。由于EPROM芯片一般不能锁存地址, 故扩展时还应加1个锁存器, 构成一个3片最小系统,8.1 并行扩展方法,(1)地址总线(AB) P0口(低8位

5、地址A0A7 ),P2口(高8位地址A8 A15)。,(2)数据总线(DB) 由P0口提供D0 D7,(3)控制总线(CB) 包括片外系统扩展用控制线和单片机用于接收片外控制的信号线。,P2口有输出锁存功能,能保留高8位地址信息。,P0是双向、三态控制的8位口,一、 外部总线的扩展,用51的P2口输出高8位地址、P0输出低8位地址和传送数据D0D7,外加地址锁存器构成地址、数据总线,控制总线由51 的RD、WR、PSEN、ALE和EA,8.1.1 单片机的并行总线,ALE:用于锁存P0口输出的低8位地址的控制线。ALE在P0口输出地址期间出现低电平,用其下降沿控制锁存器锁存地址数据。 PSEN

6、:输出,用于读片外程序存储器(EPROM)中的数据。“读”取EPROM中数据(指令)时,不能用“ RD ”信号,而只用PSEN信号。 EA:输入,用于选择片内或片外程序存储器。当 EA 0时,只访问外部程序存储器。当 EA1时,先访问内部程序存储器,内部程序存储器全部访问完之后,再访问外部程序存储器。 RD 、 WR :输出,用于片外数据存储器(RAM)的读、写控制。执行片外数据存储器操作指令MOVX时自动生 成 RD 、 WR 信号,并在数据线有效时输出。,控制总线,8.1.2 并行扩展应注意的问题,一、地址锁存器的使用,通过并行扩展方法,可扩展程序存储器、数据存储器和并行I/O口,它们要由

7、地址来区分访问。,由于地址低8位是由P0分时提供,故扩展时必须采用锁存器锁存地址(扩展连接的芯片本身有锁存功能除外)。,51的读写时序中,锁存允许信号ALE是高电平有效,ALE高电平信号与P0口有效地址信号同时出现,ALE下降沿时锁存低8位地址,ALE低电平时P0口为数据。,因此,应选高电平触发或下降沿触发的锁存器,如:74LS373或8282。对上升沿触发的锁存器则应加一级非门后与锁存器的控制端相连。,G(高电平锁存)、STB 从高电平转为低电平时锁存,常用地址锁存器的引脚和接口,73LS273在CLK上升沿锁存所以须将ALE反相接入,TTL芯片74LS373是一个8D三态同相锁存器,其引脚

8、和逻辑如下:,D0 D1 D2 D3 D4 D5 D6 D7 G,Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 OE,2 5 6 9 12 15 16 19 1,74LS373引脚图,74LS373真值表,3 4 7 8 13 14 17 18 11,P0口,ALE,8051,74LS373,D0 D7,Q0 Q7,G,OE,A0A7,A8A15,P2口,低位地址分离电路,G=1时,D端数据 = Q端数据, G=0时,Q端数据保持,不再受D端变化影响,二、地址范围的确定和片选信号的产生,为了访问扩展的存储单元和I/O口,必须为每个单元和I/O端口分配唯一的地址。,决定地址范围的因素有两个:

9、1)接口芯片的地址线与单片机的地址总线的连接 2)接口芯片的片选信号的产生方法,连接地址线时,通常都是将接口芯片的地址线与单片机地址总线的若干低位地址线相连,而用剩余的P2口高位地址线来产生片选信号。,产生片选信号的方法与微机原理中介绍的相同。,二、地址范围的确定和片选信号的产生,三、扩展的存储器与I/O口的编址,51扩展的I/O口与扩展的RAM采用统一编址方式,并用同样的指令MOVX进行访问。所以,当同时扩展有存储器和I/O口时,要注意地址的合理分配、连接,以保证没有地址冲突。,为了在扩展的片外RAM和I/O口中选择唯一的某单元或I/O端口进行操作,需要进行选址。,扩展的片外RAM和I/O口

10、选址过程分2步:,2)片内译码 通过连到芯片地址引脚上的地址线在芯片内部进行译码。,1)片选 即通过高位地址线译码或线选方法产生的“片选” 信号,先找到单元或I/O端口所在的芯片。,通过上两步,才能确定唯一的存储单元或I/O端口。,片选常用有“线选”和“地址译码”2种方法。,地址译码又分为全译码法、部分地址译码法,1) 线选法:就是直接将单片机最高几位空余地址线中的一根 作为某一扩展芯片的片选。一根地址线对应一个片选。,例: 用“线选”法扩展3片存储器,A10 . . . A0,CE,A10 . . . A0,CE,A10 . . . A0,CE,A10A0,A10A0,A10A0,A13 A

11、12 A11,I,II,III,片选译码方法分:部分译码 全译码法,线选法的特点:电路简单,但占地址资源多,地址重叠区多,各芯片的地址空间不连续,不能充分利用CPU的最大地址空间。,2)译码法:用剩余的高位地址线进行译码,译码输出作为“片选” 控制线。,采用线选法时要注意: 访问外部数据存储器、I/O接口芯片时,所发出的地址码其做线选的地址线中只能有一个为低电平,以保证同一时刻只选中一片芯片,否则,将引起错误。,部分译码法的特点:既能利用CPU的较大的地址空间,又可简化译码电路,但存在地址重叠,常用的译码器有3/8译码器74LS138、双2/4译码器74LS139、4/16译码器74LS154

12、等。,A15 A14 A13 A12 A11 A10A0 十六进制地址 芯片 I 1 0 0 0 0 0 0 8000H 1 0 0 0 0 1 1 87FFH 芯片 II1 1 0 0 0 1 0 0 8800H 1 0 0 0 1 1 1 8FFFH 芯片III 1 1 0 0 1 0 0 0 9000H 1 0 0 1 0 1 1 97FFH,四、控制信号的时序配合,当外扩芯片的操作控制信号的时序与51单片机提供的相应控制信号时序相合时,可以直接与单片机相应引脚相连。,时序上不能与单片机提供的控制信号相配时,可设计简单组合逻辑电路,对单片机相关的引脚信号进行处理,得到相配的时序信号后连接

13、。,全译码法的特点:能充分利用CPU的最大地址空间,芯片的地址空间可连续,无地址重叠,但译码电路较复杂,增加硬件开销一般在外部扩展大容量的存储器时使用。,. 总线驱动,扩展使得总线上常挂接很多负载, 但总线接口的负载能力有限, 因此,常需通过总线驱动器进行总线驱动。,总线驱动器对于单片机的I/O口只相当于增加了一个TTL负载, 它除了对后级电路驱动外,还能对负载的波动变化起隔离作用。 ,在对TTL 负载驱动时, 只需考虑驱动电流的大小; 在对MOS负载驱动时, MOS负载的输入电流很小, 更多地要考虑对分布电容的电流驱动。,1 常用的总线驱动器 地址总线和控制总线是单向的, 因此可选用单向驱动

14、器,如74LS244,它带有三态控制, 能实现总线缓冲和隔离。,数据总线是双向的,其驱动器要选用双向的,如74LS245, 它是三态的, 有一个方向控制端DIR, DIR=1时输出(AnBn), DIR=0时输入(AnBn)。,单向驱动器,双向驱动器,P0 口的驱动,P2 口的驱动,2. 51单片机与总线驱动器的接口,单向,双向,当PSEN、RD任一个有效,LS245传输方向BA输入 ,当进行RAM写时两者均无效时,传输方向A B,1. 外部程序存储器的扩展,51 单片机程序存储器的扩展,用译码方法扩展4片27128的EPROM电路原理图,8.3.2 外部数据存储器的扩展,1. 外部数据存储器

15、的扩展方法,在要定义大量的数据变量、标志位或需要大量的数据缓冲区的应用系统中,会需要扩展数据存储器。,数据存储器在和单片机的接口上有独立的控制信号线,RD、WR和读写指令,扩展时将RAM芯的OE、WE分别与单片机的RD、WR引脚相连接,数据线和地址线的连接方法与程序存储器扩展的连接相同。,数据存储器扩展应注意的问题,必须保证扩展的数据存储器与扩展的I/O芯片的地址没有冲突。,51单片机扩展数据存储器的示意图,例:扩展2片,采线选法寻址。用口线P2.7来寻址 当P2. 7=0时 访问片(0) ,地址范围为6000H 7FFFH 当P2.7=l时 访问片(1),地址范围为E000H FFFFH,1

16、6K片外数据存储器扩展电路,存储器扩展举例,采用地址译码器扩展存储器的连接图,51单片机同时扩展程序存储器和数据存储器,80C51,+5V,也可用地址译码信号使它们具有指定的地址.,扩展既可读又可写的程序存储器,在扩展的ROM中,只能运行但不能修改程序,若把程序放在扩展RAM中,虽可修改却又不能运行程序,因为,对外部ROM和RAM是用不同指令产生不同的读选通信号来访问的。,解决的方法:将两者的读访问信号相与后作为扩展RAM的读选通控制信号,从而使之成为可读可写的“程序存储器”。,地址线 A10A0,数据线 D7D0,WR WE,OE,RD,PSEN,片外存储器 读信号 = PSEN RD,EE

17、PROM 既能作为程序存储器又能作数据存储器,故可将程序存储器与数据存储器空间合二为一,连接方法如下:,PSEN、RD任一个有效时OE有效,只有两者 均无效时OE才无效.,8.3.3 并行I/O口的扩展,(1) 51没有专门的I/O指令,扩展的I/O口与片外RAM统一编址,占用片外RAM地址空间,所有扩展的I/O口或通过扩展I/O口连接的外围设备均采取与片外RAM相同的寻址方法,用MOVX指令访问。,151单片机I/O口扩展性能,(2) 利用串行口方式0,也可扩展I/O口,所扩展的I/O口不占用片外RAM地址。,单片机应用系统中,I/O口的扩展是为外部通道及设备提供输入、输出通道。因此,I/O

18、口的扩展总是为了实现某一测控及管理功能而进行的。,如:连接键盘、显示器、驱动开关控制、开关量监测等。,因此,在I/O口扩展时,必须考虑与之相连的外部硬件电路特性,如驱动功率、电平、干扰抑制及隔离等。,2扩展I/O口使用的芯片,51单片机应用系统中,扩展I/O口所采用的芯片主要有两大类:,通用I/O口芯片 如8255和I/O扩展复合芯片8155等。,TTL、CMOS电路芯片 单片机应用系统中常采用这些芯片用来扩展普通8位输入或输出口,它们体积小、成本低、配置灵活, 使用十分方便。,通过P0口扩展的主要有各类锁存器、三态缓冲器等,如:74LS373、 74LS273 、74LS573、74LS57

19、4 、 74LS367 、 74LS374、 74LS377、74LS244等。,3并行I/O口的扩展方法 根据扩展并行I/O口时数据线的连接方式,I/O口扩展可分为总线扩展方法、串行口扩展方法。,常用I/O扩展TTL、CMOS芯片,用TTL芯片进行I/O口的扩展, 只要按照“输入三态, 输出锁存”与总线相连的原则, 即能组成简单的I/O 扩展接口。,(2) 串行口扩展方法 利用51的串行口在方式0工作下所提供的I/O口扩展功能。这种扩展只占用串行口.,接上串入并出移位寄存器可扩展并行输出口, 接上并入串出移位寄存器可扩展并行输入口。,通过移位寄存器级联,可扩展多数量、多位的并行I/O口。缺点

20、:传输速度较慢,(1) 总线扩展方法 扩展的I/O芯片的数据线取自P0口。这种扩展方法只分时占用P0口,并不影响P0口与其它扩展芯片的连接操作,不会造成硬件的额外开销。因此,在单片机应用系统的I/O扩展中被广泛采用。,单片机系统中输入接口的扩展一般选用具有缓冲功能的芯片实现,例如:74LS244 、74LS245等。,4、I/O口扩展举例,单片机系统中输出接口的扩展经常选用具备锁存功能的芯片实现,一般有:74LS273,74LS373,74LS573、74LS574等。,1)简单并行输出接口的扩展,CK为时钟输入端,G为锁存允许,做数据总线时的P0口并没有锁存功能,为了有稳定的输出, 所以,用

21、TTL或CMOS锁存器芯片把数据锁存输出。,锁存器、三态门芯片都只有数据线和锁存允许及输出允许控制线,而无地址线和片选信号线,但对扩展I/O口是用MOVX指令以确定的地址来进行访问,所以,要用地址线控制锁存允许、输出允许。,将1个字节数据从用74LS377扩展的I/O输出,用下面程序段: MOV DPTR,#7FFFH ;地址指针指向74LS377 MOV A, #DATA ;将输出数据送A MOVX DPTR, A ; 输出数据,对于常态数据的输入,只需采用8位三态门控制电路芯片即可。,对于输入,由于是通过数据总线进行,输入时一定要用三态芯片,以免平时对数据总线有影响。,注意!: 不是用 M

22、OV P0, #DATA,并行扩展I/O口的使用,用74LS244通过P0口扩展8位并行输入口,三态门由P2.6和RD相或控制,故其端口地址为BFFFH。 MOV DPTR,#0BFFFH ;指向74LS244口地址,使A14=0 MOVX A, DPTR ;读入数据,74LS244是双4位三态输入缓冲器,D RD P2,1G、2G为 输出控制端,2)简单并行输入接口的扩展,3)用专用I/O芯片8255扩展并行I/O口,复位电路,8031与8255的接口方法,8.3.4 C51访问扩展的存储器和I/O端口的方法,51对外扩的I/O或外扩RAM统一编址,将扩展的I/O口看作片外RAM单元来访问。

23、在C51中如何访问它们?,#include /absacc.H包含了能进行绝对地 址访问的宏定义 #define 变量名 XBYTE地址常数 /指定变量与XDATA 区中的某绝对(字节)地址对应 (外RAM或扩展I/O口的地址),访问方法一、 采用绝对地址访问的方法,用预定义宏指定变量在xdata空间并使绝对地址与要访问的扩展RAM单元、I/O口相对应。,例:对片外的1000H端口进行数据的读操作,设计方法如下,#include #include #define port XBYTE (0x1000);/将外部1000H端口命名为port 长度为8位。此后, 程序中就用 port对 外部100

24、0H地址的端口进行访问 void main(void) int temp; While(1) temp = port; ,访问方法二:,用指针变量访问外RAM或扩展I/O口。设置指针为指向xdata区类型,并在程序中为指针变量设置与访问的外RAM单元或扩展的I/O口相对应的地址。,针对上述举例,程序设计如下:,#include unsigned char xdata *PORT;/定义一个指向外扩RAM区的无符 号字符类型数据的指针 void main (void) unsigned int temp; PORT=0x1000; /在程序内,对指针设定地址值,指向要 访问的地址为1000H的外

25、RAM单元或I/O口 While(1) temp = *PORT; ,,简单I/O扩展设计应用举例,例1:应用74273扩展单片机的输出端口,设定74273的端口访问地址为7FFFH,控制数码管显示0-9。,设计要求,端口的访问地址为7FFFH,即在地址线上输出时,只有高位P2.7为低电平,其他均为高电平,使用/WR与P2.7共同作为74273数据选通的控制信号,与74273的CLK引脚相连。,#include #include #define port XBYTE 0x7FFF unsigned char table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d, 0x7d,

26、 0x07,0x7f,0x6f; /设置数码显示数据表 void delay(void) unsigned int i; for(i=0;i40000;i+); void main(void) unsigned int i; while(1) for(i=0;i10;i+) port=tablei; /从数码显示字表读取数据,通过74273输出显示 delay(); ,编程序应注意:,在程序中涉及到访问外部寄存器单元地址时,头文件#include 不可缺少, 用define定义端口的格式为: #define 端口名称 XBYTE (端口地址);,图8.2.4 简单并行I/O接口扩展电路,例2:

27、用74273、74244芯片实现简单的并行接口扩展电路,实现的功能:按键的状态通过74244缓冲读入,通过74273锁存输出,在八个LED发光二极管上显示。,+5V,P2.0,273、244的片选均通过P2.0实现,因此,访问地址均为FEFF,为了区别两芯片访问,加入/RD、/WR来分别控制对不同芯片的控制端。,#include unsigned char xdata *PORT; /定义访问的外部端口变量 void main() unsigned int tmp; PORT=0xFEFF; /根据原理图,定义外部端口的地址 While(1) tmp = *PORT; /从74244端口读取开

28、关状态数据 *PORT =tmp;/将读取的数据通过74273锁存输出 /经硬件电路在发光二极管上显示 ,例3:用8255扩展输入、输出口实现外接LED由拨动开关相应位的状态进行控制的功能。,由图知A口输出:7FFC B口输入:7FFD C口:7FFE D口:7FFF,P2.7,P2.7,#include #include #define COM8255 XBYTE0x7FFF /设置命令控制寄存器地址 #define PA8255 XBYTE0x7FFC /设置A口的访问地址 #define PB8255 XBYTE0x7FFD /设置B口的访问地址 unsigned char temp;

29、void main(void) COM8255=0x83; /初始化8255,据题目要求A、B口方式0 /B口输入,A口输出。 while(1) temp = PB8255; /读入B口数据 PA8255 = temp; /从A口输出 ,8.2 串行总线扩展,串行传输信号的特点:,1 0 0 1 1 1 0 1,串行方式传送数据时,数据的所有各位不是同时发送和接收,而是按一定顺序,一位一位地分时传送和接收。这种方式传送成本低,传输距离长,速度慢。,与并行扩展一样,串行扩展也要解决下列问题: 数据传送对象(单元/I/O口)地址的选择 数据读写的控制 数据的传输。,1.为实现地址、控制、数据信号分

30、时传输,收发双方需要制定严格的协议。 2.如何解决双方同步收发问题?,解决上述问题有多种不同方法,因而产生了多种不同串行总线及其不同的传输协议。,然而,串行总线扩展,通常只有1-2根传输线,因此,地址信号、控制信号和传送的数据只有采用分时传送的办法,用这1条线来传送,那么如何解决上述问题呢?,目前单片机外部串行扩展常用的串行总线有SPI(Serial Peripheral Interface)接口 I2C(Inter-Integrated Circuit)接口 1-Wire(1-Wire Chips)技术等。,1-WIRE总线具有结构最简单、成本低廉、节省 I/O资源、便于总线扩展和维护等优点

31、。,在SPI总线标准中,使用3根公共的同步时钟SCK 、数据线MISO、MOSI和独立的从器件选择线SS来完成器件的寻址、读写控制和数据传送的。通信过程由产生SCK时钟信号的主器件(MPU)控制。,SPI总线接口读写速度比I2C总线接口快,通信协议也较简单,因此,SPI总线在单片机控制系统中被广泛使用在与E2PROM、ADC、FRAM和显示驱动器之类的慢速外设器件通信中。,I2C总线标准中,使用串行时钟信号SCL和串行数据/地址线SDA进行信息传输,并允许若干兼容器件共享双线总线,通信过程由产生SCL时钟信号的主器件(MPU)控制。,SPI总线是Motorala公司提出的一种基于四线制的同步串

32、行总线,它是一种在芯片之间通过串行数据线(MISO、MOSI)和串行时钟线(SCK)实现同步串行数据传输的技术。,8.2.1 SPI总线,SPI提供访问一个4线、全双工串行总线的能力,支持在同一总线上将多个从器件连接到一个主器件上,由主器件控制数据向一个或多个从器件传送。,SPI设备可以工作在主方式或从方式中。, SPI总线结构 一个完整的SPI系统有如下的特性: .全双工、三线同步传送; .主、从机工作方式; .可程控的主机位传送频率、时钟极性和相位 .发送完成中断标志; .写冲突保护标志。,数据传送格式:先传送数据最高位MSB,一般SPI系统使用四个I/O引脚: 串行数据线(MISO、MO

33、SI)用于串行数据的发送和接收。 MISO主机方式输入从机方式输出数据线 MOSI主机方式输出从机方式输入数据线,在SPI设置为主机方式时,MISO线是主机数据输入线,MOSI是主机数据输出线; 在SPI设置为从机方式时,MISO线是从机数据输出线,MOSI是从机数据输入线。,在SPI器件设置为主机方式时,主机启动一次传送后会自动在SCK脚产生8个时钟周期。主机和从机SPI器件在SCK信号的一个跳变时进行数据移位,数据稳定后的另一个跳变时进行采样。,串行时钟线(SCK) SCK用于同步从MISO、MOSI引脚输入、输出的数据传送。在SPI器件设置为主机方式时SCK为输出;在SPI器件设置为从机

34、方式时SCK为输入。,对于一个完整的SPI系统,串行数据和串行时钟之间有四种极性和相位关系,以适应不同的外围器件特性。主机和从机器件之间的传送定时关系必须相同。,起始电平为低电平,起始电平为高电平,采样时间在上升沿,采样时间在下降沿,从机选择( ) 在从机方式时, 脚是输入端,用于使能SPI从机进行数据传送;在主机方式时, 用来保护在主方式下SPI同步操作所引起的冲突,逻辑0禁止SPI,清除MSTR位。一般由外部置为高电平, 。,通过SPI可以扩展各种I/O功能,包括:AD、DA、实时时钟、RAM、EEPROM及并行输入输出接口等。,SPI总线接口的典型电路如下图所示。采用1个主器件和n个从器

35、件构成。主器件产生时钟信号,控制着数据向1个或n个从器件传送,从器件在主机发命令时才能接收或发送数据。,2SPI串行总线的接口电路,对于没有SPI接口的 51单片机,可以用两种方法来实现与SPI外设的接口。, 串行时钟极性和相位之间的关系、传送速率都是固定的,不可编程改变。,3. 51单片机串行扩展SPI外设的接口,1)用串口方式0提供简化的SPI同步串行通信功能,只有两个引脚:RXD(MOSI/MISO)和TXD(SCLK),其特点是:,2)通用I/O口来模拟SPI串行接口,用软件来模拟仿真SPI操作。,由于串行数据输入、输出是同一根线,要由软件设置数据传送方向。 串行数据线上传送数据位的顺

36、序为先LSB后MSB,8.2.3 I2C总线 I2C总线(Intel IC BUS)是Philips公司推出的一种基于两线制的同步串行数据传输总线。被广泛用于消费类电子产品、通信产品、仪器通信及工业总线中。,SDA:串行数据线,双向传输数据。 SCL:串行时钟线,传输时钟信号,在传输过程中用来同步数据线上的数据传送,1、 I2C总线系统结构,挂在I2C总线上的器件必须有I2C总线接口,它们的SDA和SCL引脚都是开漏结构,都需通过电阻与电源连接。所有器件的同名端相连接。作为主控件的单片机可以没有I2C总线接口。,在I2C 总线上的器件根据其功能可分为两种:主控器件和从控器件。,主控器件:控制总

37、线存取,产生串行时钟信号SCL,并产生启动传送及结束传送的信号,总线必须由一个主控器件控制。 从器件:在总线上被主控器件寻址的器件,它们根据主控器件的命令来接收和发送数据。,1) I2C总线采用两线制,由双向数据线SDA和时钟SCL构成,为同步传输总线,数据线上信号完全与时钟同步,可进行全双工数据传送。,2、I2C总线特点,3)总线采用了器件地址硬件设置,无须用外围器件片选信号方式的寻址方法。可以并行扩展多个外围器件。,2)总线平时通过上拉电阻接到电源,在空闲情况下,2根线都处于高电平。,4)系统中的器件有四种可能的工作方式:主发送方式、主接收方式、从发送方式和从接收方式。,6)是一个真正的多

38、机总线,如果两个或更多主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据被破坏。,5)I2C总线指定了严格的规范,包括:接口的电气特性、信号时序、信号传输的定义等。,7)由于I2C增加了用于同步的时钟线SCL,可以大大提高数据的传输速度。标准模式下可达100kbit/s快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。,3、 I2C总线工作原理,1) 数据传送采用主从方式,由主控器件来寻址从器件、启动总线、产生时钟、传送数据及结束数据的传送。,2) I2C总线上所有器件都有规范的器件地址,它由器件的固有地址及其地址引脚电平决定,对器件的寻址采用软件方法。,I2C总线器件地

39、址由七位组成,它与1位方向位共同构成了I2C总线器件的寻址字节SLA。,寻址字节SLA,器件地址,引脚地址,方向位,DA3-DA0是I2C器件固有地址编码,出厂时已给定。如: E2PROM AT24C02的地址为1010,4位LED驱动器SAA1064的地址为0111。同类器件具有同样的地址编码,A2、A1、A0是由I2C器件引脚连接状态形成的地址码。这些引脚可接电源或地,这部分可变地址可区分线上同类器件,也决定了总线上可连接的同类器件的数量。,3)、I2C总线信号类型和时序,1) I2C总线在传送数据过程中共有4种类型信号。,开始信号(S):SCL为高电平时,SDA由高电平向低 电平跳变,开

40、始传送数据。,结束信号(P):SCL为高电平时,SDA由低电平向高 电平跳变,结束传送数据。,方向位R/ W规定了总线上的主器件与从器件的数据传送方向。R/ W=1表示接收(读),R/ W=0表示发送(写)。,应答信号(A):接收数据的器件在接收到8位数据后, 向发送器件发出特定的低电平脉冲,表示 已收到数据。发送器接收到应答信号后,根 据实际情况做出是否继续传递信号的判断。 若未收到应答信号,则判断为接收器件出现 故障。,非应答信号(A):接收数据的器件在接收到8位数据 后,向发送器件发出高电平为非应答信号。,主器件接收从器件数据时,接收到最后一个字节数据后,必须给从器件发送1个非应答信号,

41、使从器件释放数据总线,以便主器件发送停止信号,从而终止数据传送。,4) I2C总线的四种状态和数据传输时序,I2C数据传送时序,SCL高电平期间,SDA状态的改变,被用来表示起始和停止条件,在I2C总线上进行数据传输时要严格遵守其时序、协议,保证做到:, 数据有效转换开始后的数据传输过程中,当时钟线SCL为高电平时,数据线SDA必须保持稳定(否则会被认为是发出启动、停止信号)。传输的数据的变化即改变数据线SDA时,必须在时钟线SCL为低电平时方可进行。,说明:,主器件在传输数据结束后,即产生停止信号,推出主器件角色,经过一定时间后,总线处于空闲状态。, 任一器件在总线空闲时,一旦产生起始信号,

42、即开始控制总线而成为主器件,此时,总线处于忙状态,其他器件不能再产生起始信号,否则,该主器件控制的数据传输无法正确完成。, 在一个通信过程中,应该有一个起始信号和一个停止信号,如果两者之间有起始信号产生,该信号被称为重复起始信号。,5) 数据传输格式 由于数据和地址信号都用一根数据线SDA来传输,何时传输地址?什么时候是主器件读?什么时候是主器件写?如何保证传输的正确?必须有一个共同接受的规定(协议): .主控器件写操作 主器件向被控器件发送n个数据的数据格式如下:,主控器件读操作 主器件向被控器件读n个数据的数据格式如下:,主控器读写操作 主控器读写操作是指主控期间在一次数据过程中需要改变数

43、据传送方向的操作。此过程中的读、写操作分别与上述方法一样,只是在数据传送方向改变后,必须由主控器件发出从新启动信号,并发一个寻址字节,因为,数据字节的传送方向决定于寻址字节的方向位。,SLAR/W A DATA1 A,其中:Sr为重复起始信号,作业: 1.用8031单片机,并采用一片2716(2KB)和一片8255组成一个既有程序存储器又有扩展I/O口的扩展系统,请: (1)画出逻辑电路图 (2)说明其存储空间 2.请利用74HC138设计一个译码电路,分别选中4片2764,且列出各芯片所占的地址范围: Y0芯片地址范围0000H-1FFFH, Y1芯片地址范围2000H-3FFFH, Y2芯

44、片地址范围4000H-5FFFH, Y3芯片地址范围6000H-7FFFH.,#define uchar unsigned char sbit SDA =P10 ; /串行数据线 sbit SCL =P11 ; /串行数据线 uchar idata SLAdd; /存从器件地址变量 uchar idata sbuf8; /数据发送缓冲区 uchar idata rbuf8; /数据接收缓冲区 bit bdata NACK ; /器件坏或错误标志数据位 bit bdata nackFlag ; /非应答标志位,利用51单片机模拟I2C总线接口的单片机程序,P1.0 P1.1,8051,VCC,R

45、=4.7K,0.01f,SDA SCL,void start(void) SDA = 1; / 启动I2C总线 SCL = 1; delay5us(); /起始条件建立时间4.7S SDA = 0; delay5us(); /起始条件锁定时间4.7S SCL = 0; /钳住SCL总线,准备发送数据 ,/*产生起始信号子函数:要求在时钟为高电平期间数据线由高变低。 */,SDA,SCL,void delay5us() /* 延时约5微秒,对于12M时钟 */ uint i; for (i=0;i5;i+) _nop_(); ,/* 产生停止信号子函数:要求在时钟为高电平期间数据线由低变高。 *

46、/,SDA,SCL,void stop(void) /停止I2C总线数据传送 SDA = 0; SCL = 1; /发送停止条件的时钟信号 delay5us(); SDA = 1; /停止总线 delay5us(); SCL = 0; ,/* 发送应答位”0”子函数:要求主控器件向被控器件发送”0”应答信号,并立即在SCL上发出与应答位对应的第9个时钟*/,SDA,SCL,void ack(void) SDA = 0; / 发送应答位“0” SCL = 1; /紧跟着发送对应应答位的第9个时钟 delay5us(); /保持数据时间要4.7S SCL = 0; SDA = 1; /释放数据线

47、,/* 发送非应答位”1”子函数 : :要求主控器件向被控器件发送”1”非应答信号,并立即在SCL上发出与非应答位对应的第9个时钟*/,SDA,SCL,void n_ack(void) SDA = 1; / 发送非应答位“1” SCL = 1; /紧跟着发送对应应答位的第9个时钟 delay5us(); /保持数据时间要4.7S SCL = 0; SDA = 0; ,/* 应答位检查子函数:用于检查一字节数据传送后,被控控器件在第9位时钟期间是否发回”0”的应答,若是,程序置nackFlag标志为0,否则置nackFlag标志为1。 */ void checkack(void) SDA = 1; / 应答位检查是I/O输入,必将p1.0设置成 /输入,即先向端口写1) SCL = 1; nackFlag = 0; /非应答标志初设为“0”(无非应答) if(SDA = 1) / 若读数据线SDA=1表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1