《第八章外部系统扩展》由会员分享,可在线阅读,更多相关《第八章外部系统扩展(91页珍藏版)》请在金锄头文库上搜索。
1、第第8 章章 外部系统的扩展外部系统的扩展8.1 并行扩展总线并行扩展总线8.2 串行扩展串行扩展总线总线8.3 并行存储器和并行存储器和I/O扩展扩展8.4 串行扩展介绍串行扩展介绍系统扩展概述系统扩展概述 系统扩展系统扩展是指单片机内部各功能部件不能满足应用系统是指单片机内部各功能部件不能满足应用系统要求时,要求时,在片外连接相应的外围芯片在片外连接相应的外围芯片以满足应用系统要求。以满足应用系统要求。一、为何要进行系统扩展?一、为何要进行系统扩展?1)单片机本身的资源有限单片机本身的资源有限2)单片机本身接口功能有限单片机本身接口功能有限 单片机控制应用中的接口要求复杂,而单片机的接口单
2、片机控制应用中的接口要求复杂,而单片机的接口只有数据锁存和缓冲功能,没有控制功能,难以满足复杂只有数据锁存和缓冲功能,没有控制功能,难以满足复杂的的I/O要求。要求。 单片机系统中有两类数据传送操作:单片机系统中有两类数据传送操作: 单片机与存储器之间的数据读写操作单片机与存储器之间的数据读写操作; 单片机与其它设备之间的数据传送操作单片机与其它设备之间的数据传送操作。 单片机与控制对象或外设之间的数据传送通常较复杂单片机与控制对象或外设之间的数据传送通常较复杂, , 表现在以下几方面:表现在以下几方面: 1 1)速度差异大)速度差异大 2 2)设备种类繁多)设备种类繁多 低速与高速外设的速度
3、相差很大,所以低速与高速外设的速度相差很大,所以, ,单片机无法以单片机无法以一个固定的时序与它们按同步方式协调工作。一个固定的时序与它们按同步方式协调工作。 各种设备性能各异、对数据要求不同,因此各种设备性能各异、对数据要求不同,因此, ,无法按无法按统一格式进行数据传送。统一格式进行数据传送。 3 3) 数据信号形式多样数据信号形式多样有电压、电流信号,有数字形式、模拟形式。有电压、电流信号,有数字形式、模拟形式。 上述因素使单片机的上述因素使单片机的I/OI/O操作变得很复杂,靠单片机本操作变得很复杂,靠单片机本身的身的I/OI/O口无法实现,必须口无法实现,必须扩展接口电路。扩展接口电
4、路。 51 单片机的系统扩展主要有如下几种扩展单片机的系统扩展主要有如下几种扩展 程序存储器(程序存储器(ROM)的扩展)的扩展 数据存储器(数据存储器(RAM)的扩展)的扩展 I/O口(普通口(普通I/O口、有特殊功能的接口)的扩展口、有特殊功能的接口)的扩展 中断系统扩展中断系统扩展1、扩展技术中主要研究、解决的问题:、扩展技术中主要研究、解决的问题: (1)提供合理的数据通道)提供合理的数据通道 (2)物理寻址方法)物理寻址方法 (3)数据读写的控制方法)数据读写的控制方法 (4)收发双方的同步传送及其对信号时序的要求)收发双方的同步传送及其对信号时序的要求 二、单片机系统扩展方法二、单
5、片机系统扩展方法 51有很强的外部扩展能力,通过总线来进行扩展,有很强的外部扩展能力,通过总线来进行扩展,扩展电路及扩展方法较典型、规范。扩展电路及扩展方法较典型、规范。 总线扩展方法是指:以单片机为核心,通总线扩展方法是指:以单片机为核心,通过总线把扩展部件连接起来。过总线把扩展部件连接起来。常用的单片机系统扩展方法有两种:常用的单片机系统扩展方法有两种:1) 并行扩展法并行扩展法 利用单片机本身具备的三组总线(利用单片机本身具备的三组总线(AB、DB、CB)进行的系统扩展。)进行的系统扩展。三、最小应用系统三、最小应用系统 单片机系统的扩展是以基本的最小系统为基础的。单片机系统的扩展是以基
6、本的最小系统为基础的。 内部有程序存储器的单片机内部有程序存储器的单片机 + + 晶振电路晶振电路 + + 复位电路就复位电路就是一个最简单的最小应用系统。是一个最简单的最小应用系统。 对于内部无程序存储器的芯片对于内部无程序存储器的芯片80318031来说来说, , 则要用外则要用外接程序存储器的方法才能构成一个最小应用系统。接程序存储器的方法才能构成一个最小应用系统。 2) 串行扩展法串行扩展法 利用利用串行总线进行的串行总线进行的系统系统扩展。扩展。串行扩展总线有:串行扩展总线有: 单总线单总线(1-Wire(1-Wire总线总线) ) I2CI2C双线总线双线总线 SPISPI三线总线
7、三线总线三种结构三种结构外接晶振复位电路80518051、 87518751本身即可构成一本身即可构成一片最小系统片最小系统, , 只要将单片机接只要将单片机接上时钟电路和复位电路即可上时钟电路和复位电路即可, , 同时同时 接高电平接高电平, ALE, ALE、 信号不用信号不用, , 系统就可以工作系统就可以工作(a) 8051/8751最小系统结构图;最小系统结构图;(b) 8031最小系统结构图最小系统结构图片内无程序存储器的芯片构成最小片内无程序存储器的芯片构成最小应用系统时应用系统时, , 须在片外扩展程序存须在片外扩展程序存储器。由于储器。由于EPROMEPROM芯片一般不能锁芯
8、片一般不能锁存地址存地址, , 故扩展时还应加故扩展时还应加1 1个锁存个锁存器器, , 构成一个构成一个3 3片最小系统片最小系统, , 8.1 并行扩展方法并行扩展方法(1)地址总线()地址总线(AB)P0口(低口(低8位地址位地址A0A7 ),P2口(高口(高8位地址位地址A8 A15)。)。(2)数据总线()数据总线(DB)由由P0口提供口提供D0 D7(3)控制总线(控制总线(CB)包括片外系统扩展用控制包括片外系统扩展用控制线和单片机用于接收片外线和单片机用于接收片外控制的信号线。控制的信号线。P2口有输出锁存功能口有输出锁存功能,能保能保留高留高8位地址信息。位地址信息。P0是双
9、向、三是双向、三态控制的态控制的8位口位口一、一、 外部总线的扩展外部总线的扩展 用用51的的P2口输出高口输出高8位地址位地址、P0输出低输出低8位地址位地址和和传送传送数据数据D0D7,外加地址锁存器构成地址、数据总线,控制外加地址锁存器构成地址、数据总线,控制总线由总线由51 的的RD、WR、PSEN、ALE和和EA8.1.1 8.1.1 单片机的并行总线单片机的并行总线ALE:用于锁存用于锁存P0口输出的低口输出的低8位地址的控制线。位地址的控制线。ALE在在P0口输出地址期间出现低电平,用其下降沿控制锁存器锁口输出地址期间出现低电平,用其下降沿控制锁存器锁存地址数据。存地址数据。 P
10、SEN:输出,用于读片外程序存储器(:输出,用于读片外程序存储器(EPROM)中的)中的数据数据。“读读”取取EPROM中数据(指令)时,不能用中数据(指令)时,不能用“ RD ”信号,而只用信号,而只用PSEN信号。信号。 EA:输入,用于选择片内或片外程序存储器。当输入,用于选择片内或片外程序存储器。当 EA 0时,只访问外部程序存储器。当时,只访问外部程序存储器。当 EA1时,先访问内部程时,先访问内部程序存储器,内部程序存储器全部访问完之后,再访问外部序存储器,内部程序存储器全部访问完之后,再访问外部程序存储器。程序存储器。 RD 、 WR :输出,用于片外数据存储器(输出,用于片外数
11、据存储器(RAM)的读、)的读、写控制。执行片外数据存储器操作指令写控制。执行片外数据存储器操作指令MOVX时自动生时自动生 成成 RD 、 WR 信号信号,并在数据线有效时输出。并在数据线有效时输出。 控制总线控制总线8.1.2 8.1.2 并行扩展应注意的问题并行扩展应注意的问题一、地址锁存器的使用一、地址锁存器的使用 通过并行扩展方法,可扩展程序存储器、数据通过并行扩展方法,可扩展程序存储器、数据存储器和并行存储器和并行I/OI/O口,它们要由地址来区分访问。口,它们要由地址来区分访问。 由于地址低由于地址低8 8位是由位是由P0P0分时提供,故扩展时分时提供,故扩展时必须采用锁存器锁存
12、地址(扩展连接的芯片本身必须采用锁存器锁存地址(扩展连接的芯片本身有锁存功能除外)。有锁存功能除外)。 51 51的读写时序中,锁存允许信号的读写时序中,锁存允许信号ALEALE是高电平是高电平有效,有效,ALEALE高电平信号与高电平信号与P0P0口有效地址信号同时出口有效地址信号同时出现,现,ALEALE下降沿时锁存低下降沿时锁存低8 8位地址,位地址,ALEALE低电平时低电平时P0P0口为数据口为数据。 因此,应选高电平触发或下降沿触发的锁存器,因此,应选高电平触发或下降沿触发的锁存器,如:如:74LS373或或8282。对上升沿触发的锁存器则。对上升沿触发的锁存器则应加一级非门后与锁
13、存器的控制端相连。应加一级非门后与锁存器的控制端相连。G(高电平锁存)、(高电平锁存)、STB 从高从高电平转为低电平时锁存电平转为低电平时锁存常用地址锁存器的引脚和接口常用地址锁存器的引脚和接口73LS27373LS273在在CLKCLK上升沿锁存上升沿锁存所以须将所以须将ALEALE反相接入反相接入 TTL TTL芯片芯片74LS37374LS373是是一一个个8D8D三态同相锁存器,其引三态同相锁存器,其引脚和逻辑如下:脚和逻辑如下:D0D1D2D3D4D5D6D7GQ0Q1Q2Q3Q4Q5Q6Q7OE256912151619174LS373引脚图引脚图GOE QN 0 1 =DN 0
14、1 =DN 0 0保持 1 X 高阻74LS373真值表真值表34781314171811P0口口ALE805174LS373D0D7Q0Q7GOEA0A7A8A15P2口口低位地址分离电路低位地址分离电路G=1时,时,D端数据端数据 = Q端数据,端数据,G=0时,时,Q端数据保持,不再受端数据保持,不再受D端变化影响端变化影响二、地址范围的确定和片选信号的产生二、地址范围的确定和片选信号的产生 为了访问扩展的存储单元和为了访问扩展的存储单元和I/O口,必须为每口,必须为每个单元和个单元和I/O端口分配唯一的地址。端口分配唯一的地址。 决定地址范围的因素有两个:决定地址范围的因素有两个: 1
15、)接口芯片的地址线与单片机的地址总线的连接)接口芯片的地址线与单片机的地址总线的连接 2)接口芯片的片选信号的产生方法)接口芯片的片选信号的产生方法 连接地址线时,通常都是将接口芯片的地址线连接地址线时,通常都是将接口芯片的地址线与单片机地址总线的若干低位地址线相连,而用剩与单片机地址总线的若干低位地址线相连,而用剩余的余的P2口高位地址线来产生片选信号。口高位地址线来产生片选信号。产生片选信号的方法与微机原理中介绍的相同。产生片选信号的方法与微机原理中介绍的相同。二、地址范围的确定和片选信号的产生二、地址范围的确定和片选信号的产生三、扩展的存储器与三、扩展的存储器与I/O口的编址口的编址 5
16、1扩展的扩展的I/O口与扩展的口与扩展的RAM采用统一编址方采用统一编址方式,并用同样的指令式,并用同样的指令MOVX进行访问进行访问。所以,当。所以,当同时扩展有存储器和同时扩展有存储器和I/O口时,口时,要注意地址的合理要注意地址的合理分配、连接,以保证没有地址冲突分配、连接,以保证没有地址冲突。 为了在扩展的片外为了在扩展的片外RAMRAM和和I/OI/O口中选择唯一的口中选择唯一的某单元或某单元或I/OI/O端口进行操作,需要进行选址。端口进行操作,需要进行选址。扩展的片外扩展的片外RAMRAM和和I/OI/O口选址过程分口选址过程分2 2步:步: 2)片内译码片内译码 通过连到芯片地
17、址引脚上的地址线在芯片内通过连到芯片地址引脚上的地址线在芯片内部进行译码部进行译码。 1)片选片选 即通过高位地址线译码或线选方法产生的即通过高位地址线译码或线选方法产生的“片片选选” 信号,先找到单元或信号,先找到单元或I/O端口所在的芯片端口所在的芯片。通过上两步,才能确定唯一的存储单元或通过上两步,才能确定唯一的存储单元或I/OI/O端口。端口。片选常用有片选常用有“线选线选”和和“地址译码地址译码”2种方种方法。法。地址译码又分为地址译码又分为全译码法全译码法、部分地址译码法部分地址译码法 1) 线选法:线选法:就是直接将就是直接将单片机最高几位空余地址线中的一单片机最高几位空余地址线
18、中的一根根 作为某一扩展芯片的片选。作为某一扩展芯片的片选。一根地址线对应一个片选。一根地址线对应一个片选。例:例: 用用“线选线选”法扩展法扩展3片存储器片存储器 A10.A0CEA10.A0CEA10.A0CEA10A0A10A0A10A0A13A12A11IIIIII 片选译码方法分:片选译码方法分:部分译码部分译码 全译码法全译码法 线选法线选法的特点:电路简单,但占地址资源多,地址的特点:电路简单,但占地址资源多,地址重叠区多,各芯片的地址空间不连续,不能充分利重叠区多,各芯片的地址空间不连续,不能充分利用用CPU的最大地址空间。的最大地址空间。 2)2)译码法译码法:用剩余的高位地
19、址线进行译码,译码输:用剩余的高位地址线进行译码,译码输出作为出作为“片选片选” 控制线。控制线。 采用线选法时要注意:采用线选法时要注意: 访问外部数据存储器、访问外部数据存储器、I/O接口芯片时接口芯片时,所发出的地址码其做线选的地址线,所发出的地址码其做线选的地址线中只能有一个为低电平,以保证同一时刻只选中一中只能有一个为低电平,以保证同一时刻只选中一片芯片,否则,将引起错误。片芯片,否则,将引起错误。部分译码法部分译码法的特点:既能利用的特点:既能利用CPU的较大的地址空的较大的地址空间,又可简化译码电路,但存在地址重叠间,又可简化译码电路,但存在地址重叠常用的译码器有常用的译码器有3
20、/8译码器译码器74LS138、双、双2/4译码器译码器74LS139、4/16译码器译码器74LS154等。等。 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单
21、片机单片机提供的相应控制信号时序相合时,可以直接与单提供的相应控制信号时序相合时,可以直接与单片机相应引脚相连片机相应引脚相连。 时序上不能与单片机提供的控制信号相配时,时序上不能与单片机提供的控制信号相配时,可设计简单组合逻辑电路,对单片机相关的引脚信可设计简单组合逻辑电路,对单片机相关的引脚信号进行处理,得到相配的时序信号后连接。号进行处理,得到相配的时序信号后连接。全译码法全译码法的特点:能充分利用的特点:能充分利用CPU的最大地址空间,的最大地址空间,芯片的地址空间可连续,无地址重叠,但芯片的地址空间可连续,无地址重叠,但译码译码电路电路较复杂,增加硬件开销较复杂,增加硬件开销一般在外
22、部一般在外部扩展大容量的扩展大容量的存储器时使用。存储器时使用。.总线驱动总线驱动 扩扩展展使使得得总总线线上上常常挂挂接接很很多多负负载载, , 但但总总线线接接口口的的负负载载能能力力有有限限, , 因因此此,常常需需通通过过总总线线驱驱动动器器进进行行总总线线驱动。驱动。 总线驱动器对于单片机的总线驱动器对于单片机的I/OI/O口只相当于增加了口只相当于增加了一个一个TTLTTL负载负载, , 它除了对后级电路驱动外它除了对后级电路驱动外, ,还能对负还能对负载的波动变化起隔离作用。载的波动变化起隔离作用。 在在对对TTL 负载驱动时负载驱动时, 只需考虑驱动电流的大小只需考虑驱动电流的
23、大小; 在在对对MOS负载驱动时负载驱动时, MOS负载的输入电流很小负载的输入电流很小, 更多地要考虑对分布电容的电流驱动。更多地要考虑对分布电容的电流驱动。 1 1 常用的总线驱动器常用的总线驱动器 地址总线地址总线和和控制总线控制总线是单向的是单向的, , 因此可选用单因此可选用单向驱动器向驱动器, ,如如74LS24474LS244,它带有三态控制,它带有三态控制, , 能实现能实现总线缓冲和隔离。总线缓冲和隔离。 数数据据总总线线是是双双向向的的, ,其其驱驱动动器器要要选选用用双双向向的的, ,如如74LS24574LS245, 它它是是三三态态的的, , 有有一一个个方方向向控控
24、制制端端DIRDIR, , DIR=1DIR=1时时输输出出(A(An nBBn n), DIR=0), DIR=0时输入时输入(A(An nBBn n) )。 单向驱动器双向驱动器P0 口的驱动口的驱动 P2 口的驱动口的驱动2. 51单片机与总线驱动器的接口单片机与总线驱动器的接口 单向单向双向双向当当PSEN、RD任一个有效,任一个有效,LS245传输方传输方向向BA输入输入,当进行当进行RAM写时两者均无写时两者均无效时,传输方效时,传输方向向A B1.外部程序存储器的扩展外部程序存储器的扩展 51 单片机程序存储器的扩展单片机程序存储器的扩展用译码方法扩展用译码方法扩展4片片2712
25、8的的EPROM电路原理图电路原理图8.3.2 外部数据存储器的扩展外部数据存储器的扩展 1. 外部数据存储器的扩展方法外部数据存储器的扩展方法 在要定义大量的数据变量、标志位或需要大量的数据缓在要定义大量的数据变量、标志位或需要大量的数据缓冲区的应用系统中,会需要扩展数据存储器。冲区的应用系统中,会需要扩展数据存储器。 数据存储器在和单片机的接口上有独立的控制信号线,数据存储器在和单片机的接口上有独立的控制信号线,RD、WR和读写指令,扩展时将和读写指令,扩展时将RAM芯的芯的OE、WE分别与分别与单片机的单片机的RD、WR引脚相连接,数据线和地址线的连接方法引脚相连接,数据线和地址线的连接
26、方法与程序存储器扩展的连接相同。与程序存储器扩展的连接相同。数据存储器扩展应注意的问题数据存储器扩展应注意的问题 必须保证扩展的数据存储器与扩展的必须保证扩展的数据存储器与扩展的I/O芯片的地址没芯片的地址没有冲突。有冲突。51单片机扩展数据存储器的示意图 例:扩展例:扩展2 2片片,采线选法寻址。,采线选法寻址。用口线用口线P2.7P2.7来寻址来寻址 当当P2. 7=0P2. 7=0时时访问片(访问片(0) 0) ,地址,地址范围为范围为6000H 6000H 7FFFH 7FFFH 当当P2.7=lP2.7=l时时访问片(访问片(1 1),地址),地址范围为范围为E000H E000H
27、FFFFHFFFFH16K片外数据存储器扩展电路片外数据存储器扩展电路存储器扩展举例存储器扩展举例采用地址译码器扩展存储器的连接图采用地址译码器扩展存储器的连接图 51单片机同时扩展程序存储器和数据存储器单片机同时扩展程序存储器和数据存储器80C51 +5V也可用地址译码信号使也可用地址译码信号使它们具有指定的地址它们具有指定的地址.扩展既可读又可写的程序存储器扩展既可读又可写的程序存储器 在扩展的在扩展的ROM中,只能运行但不能修改程序,若把中,只能运行但不能修改程序,若把程序放在扩展程序放在扩展RAM中,虽可修改却又不能运行程序,中,虽可修改却又不能运行程序,因为,对外部因为,对外部ROM
28、和和RAM是用不同指令产生不同的读是用不同指令产生不同的读选通信号来访问的。选通信号来访问的。解决的方法:将两者的读访问信号相与后作为扩展解决的方法:将两者的读访问信号相与后作为扩展RAM的读选通控制信号,从而使之成为可读可写的的读选通控制信号,从而使之成为可读可写的“程序存储程序存储器器”。地址线地址线 A10A0数据线数据线 D7D0WR WE OERDPSEN片外存储器片外存储器读信号读信号= PSEN = PSEN RD RDEEPROM 既能作为程序存储器又能作数据存储器,故可既能作为程序存储器又能作数据存储器,故可将程序存储器与数据存储器空间合二为一,连接方法如下将程序存储器与数据
29、存储器空间合二为一,连接方法如下: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,也
30、可扩展,也可扩展I/O口,口,所扩展的所扩展的I/O口口不占用片外不占用片外RAM地址地址。 单片机应用系统中,单片机应用系统中,I/O口的扩展是为外部通道口的扩展是为外部通道及设备提供输入、输出通道。及设备提供输入、输出通道。因此,因此,I/O口的扩展总口的扩展总是为了实现某一测控及管理功能而进行的。是为了实现某一测控及管理功能而进行的。如:连接键盘、显示如:连接键盘、显示器、驱动开关控制、器、驱动开关控制、开关量监测等。开关量监测等。 因此,在因此,在I/O口扩展时,必须考虑与之相连的口扩展时,必须考虑与之相连的外部硬件电路特性,如驱动功率、电平、干扰抑外部硬件电路特性,如驱动功率、电平、
31、干扰抑制及隔离等。制及隔离等。2扩展扩展I/O口使用的芯片口使用的芯片 51单片机应用系统中,扩展单片机应用系统中,扩展I/O口所采用的芯口所采用的芯片主要有两大类片主要有两大类:通用通用I/OI/O口芯片口芯片 如如8255和和I/O扩展复合芯片扩展复合芯片8155等。等。 TTL、CMOS电路芯片电路芯片 单片机应用系统中常采用这些芯片用来扩展普通单片机应用系统中常采用这些芯片用来扩展普通8 8位输入或输出口,它们体积小、成本低、配置灵活位输入或输出口,它们体积小、成本低、配置灵活, , 使用十分方便。使用十分方便。 通过通过P0口扩展的主要有各类锁存器、三态缓冲器口扩展的主要有各类锁存器
32、、三态缓冲器等,如:等,如:74LS373、 74LS273 、74LS573、74LS574 、 74LS367 、 74LS374、 74LS377、74LS244等。等。3并行并行I/O口的扩展方法口的扩展方法 根据扩展并行根据扩展并行I/O口时数据线的连接方式,口时数据线的连接方式,I/O口扩展可分为口扩展可分为总线扩展方法总线扩展方法、串行口扩展方法串行口扩展方法。常用常用I/OI/O扩展扩展TTLTTL、CMOSCMOS芯片芯片 用用TTL芯片进行芯片进行I/O口的扩展,口的扩展, 只要按照只要按照“输入输入三态三态, 输出锁存输出锁存”与总线相连的原则与总线相连的原则, 即能组成
33、简单即能组成简单的的I/O 扩展接口。扩展接口。 (2) 串行口扩展方法串行口扩展方法 利用利用51的的串行口在方式串行口在方式0工作下所提供的工作下所提供的I/O口扩口扩展功能。展功能。这种扩展只占用串行口这种扩展只占用串行口. 接上接上串入并出移位寄存器串入并出移位寄存器可扩展可扩展并行输出口并行输出口, 接上接上并入串出移位寄存器并入串出移位寄存器可扩展可扩展并行输入口并行输入口。 通过移位寄存器级联,可扩展多数量、多位的并行通过移位寄存器级联,可扩展多数量、多位的并行I/O口。缺点:传输速度较慢口。缺点:传输速度较慢 (1) (1) 总线扩展方法总线扩展方法 扩展的扩展的I/OI/O芯
34、片的数据线取自芯片的数据线取自P0P0口口。这种扩展方。这种扩展方法法只分时占用只分时占用P0P0口,并不影响口,并不影响P0P0口与其它扩展芯片的口与其它扩展芯片的连接操作连接操作,不会造成硬件的额外开销。因此,在单片,不会造成硬件的额外开销。因此,在单片机应用系统的机应用系统的I/OI/O扩展中被广泛采用扩展中被广泛采用。 单片机系统中输入接口的扩展一般选用具有缓冲单片机系统中输入接口的扩展一般选用具有缓冲功能的芯片实现,例如:功能的芯片实现,例如:74LS244 74LS244 、74LS24574LS245等。等。4 4、I/OI/O口扩展举例口扩展举例 单片机系统中输出接口的扩展经常
35、选用具备锁单片机系统中输出接口的扩展经常选用具备锁存功能的芯片实现,一般有:存功能的芯片实现,一般有:74LS27374LS273,74LS37374LS373,74LS57374LS573、74LS57474LS574等。等。 1)简单并行输出接口的扩展)简单并行输出接口的扩展CK为时钟输入端为时钟输入端G为锁存允许为锁存允许做数据总线做数据总线时的时的P0P0口并没有锁存功能口并没有锁存功能, ,为了有稳定的输出为了有稳定的输出, , 所以,用所以,用TTLTTL或或CMOSCMOS锁存器芯片把数据锁存输出锁存器芯片把数据锁存输出。锁存器、三态门芯锁存器、三态门芯片都只有数据线和片都只有数
36、据线和锁存允许及输出允锁存允许及输出允许控制线,而许控制线,而无地无地址线和片选信号线址线和片选信号线, ,但对扩展但对扩展I/OI/O口是用口是用MOVXMOVX指令以确定的指令以确定的地址来进行访问地址来进行访问, ,所所以以, ,要用地址线控制要用地址线控制锁存允许、输出允锁存允许、输出允许。许。将将1 1个字节数据从用个字节数据从用74LS37774LS377扩展的扩展的I/OI/O输出,用下面程输出,用下面程序段:序段:MOV DPTR,#7FFFH;地址指针指向;地址指针指向74LS377MOV A, #DATA;将输出数据送;将输出数据送AMOVX DPTR, A; 输出数据输出
37、数据 对于常态数据的输入,只需采用对于常态数据的输入,只需采用8位三态门控位三态门控制电路芯片即可。制电路芯片即可。 对于输入对于输入,由于是通过数据总线进行由于是通过数据总线进行,输入时一输入时一定要用三态芯片定要用三态芯片,以免平时对数据总线有影响。以免平时对数据总线有影响。注意!注意!: 不是用不是用 MOV P0, #DATA并行扩展并行扩展I/O口的使用口的使用用用74LS24474LS244通通过过P0P0口口扩扩展展8 8位位并并行行输输入入口口,三三态态门门由由P2.6P2.6和和RDRD相或控制,故其端口地址为相或控制,故其端口地址为BFFFHBFFFH。 MOV DPTR,
38、#0BFFFH ;指向;指向74LS244口地址,使口地址,使A14=0MOVX A, DPTR ;读入数据;读入数据74LS244是双是双4位位三态输入缓冲器三态输入缓冲器DRDP21G、2G为为输出控制端输出控制端2)简单并行输入接口的扩展简单并行输入接口的扩展 3)用专用用专用I/O芯片芯片8255扩展扩展并行并行I/O口口复位电路复位电路8031与与8255的接口方法的接口方法8.3.4 C51访问扩展的存储器和访问扩展的存储器和I/OI/O端口的方法端口的方法 5151对外扩的对外扩的I/OI/O或外扩或外扩RAMRAM统一编址,将扩展的统一编址,将扩展的I/OI/O口看作片外口看作
39、片外RAMRAM单元来访问。在单元来访问。在C51C51中如何访问它中如何访问它们?们? #include /absacc.H包含了能进行绝对地包含了能进行绝对地 址访问的宏定义址访问的宏定义 #define 变量名 XBYTE地址常数 /指定变量与指定变量与XDATAXDATA 区中的某绝对(字节)地址对应区中的某绝对(字节)地址对应 (外(外RAMRAM或扩展或扩展I/OI/O口的地址)口的地址) 访问方法一、访问方法一、 采用绝对地址访问的方法,用预定义宏指定变量在采用绝对地址访问的方法,用预定义宏指定变量在xdataxdata空间并使绝对地址与要访问的扩展空间并使绝对地址与要访问的扩展
40、RAMRAM单元、单元、I/OI/O口相对应口相对应。例:对片外的例:对片外的1000H1000H端口进行数据的读操作,设计方法如下端口进行数据的读操作,设计方法如下#include #include #include #include #define port XBYTE (0x1000);/#define port XBYTE (0x1000);/将外部将外部1000H端口命名为端口命名为port 长度为长度为8位。此后,位。此后, 程序中就用程序中就用 port对对 外部外部1000H地址的端口进行访问地址的端口进行访问void main(void)void main(void) int
41、 temp; int temp; While(1) While(1) temp = port; temp = port; 访问方法二:访问方法二: 用指针变量访问外用指针变量访问外RAMRAM或扩展或扩展I/OI/O口。口。设置指针为设置指针为指向指向xdataxdata区类型区类型,并在程序中为指针变量设置与访并在程序中为指针变量设置与访问的外问的外RAMRAM单元或扩展的单元或扩展的I/OI/O口相对应的地址口相对应的地址。针对上述举例,程序设计如下:针对上述举例,程序设计如下:#include unsigned char xdata *PORT;/定义一个指向外扩定义一个指向外扩RAMR
42、AM区的无符区的无符 号字符类型数据的指针号字符类型数据的指针void main (void) void main (void) unsigned int temp; PORT=0x1000; /在程序内,对指针设定地址值,指向要在程序内,对指针设定地址值,指向要 访问的地址为访问的地址为1000H的的外外RAMRAM单元或单元或I/OI/O口口 While(1) temp = *PORT; ,简单简单I/O扩展设计应用举例扩展设计应用举例例例1 1:应用:应用7427374273扩展单片机的输出端口,设定扩展单片机的输出端口,设定7427374273的端口的端口访问地址为访问地址为7FFFH
43、7FFFH,控制数码管显示,控制数码管显示0-90-9。设计要求,端口的访问地设计要求,端口的访问地址为址为7FFFH7FFFH,即在地址线上,即在地址线上输出时,只有高位输出时,只有高位P2.7P2.7为为低电平,其他均为高电平低电平,其他均为高电平使用使用/WR/WR与与P2.7P2.7共同作共同作为为7427374273数据选通的控数据选通的控制信号,与制信号,与7427374273的的CLKCLK引脚相连引脚相连。#include #include #include #include #define port XBYTE 0x7FFF#define port XBYTE 0x7FFFu
44、nsigned char table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d, unsigned char table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f,0x6f; /0x7d, 0x07,0x7f,0x6f; /设置数码显示数据表设置数码显示数据表void delay(void)void delay(void) unsigned int i; unsigned int i; for(i=0;i40000;i+); for(i=0;i40000;i+); void main(void)void main(voi
45、d) unsigned int i; unsigned int i; while(1) while(1) for(i=0;i10;i+) for(i=0;i10;i+) port=tablei;port=tablei; / /从数码显示字表读取数据,通过从数码显示字表读取数据,通过7427374273输出显示输出显示 delay();delay(); 编程序应注意:编程序应注意:在程序中涉及到访问外部寄存器单元地址在程序中涉及到访问外部寄存器单元地址时,头文件时,头文件#include #include 不可缺少不可缺少 用用definedefine定义端口的格式为:定义端口的格式为: #de
46、fine #define 端口名称端口名称 XBYTE (XBYTE (端口地址端口地址); );图图8.2.4 8.2.4 简单并行简单并行I/OI/O接口扩展电路接口扩展电路 例例2 2:用:用7427374273、7424474244芯片实现简单的并行接口扩展电路,芯片实现简单的并行接口扩展电路,实现的功能:按键的状态通过实现的功能:按键的状态通过7424474244缓冲读入,通过缓冲读入,通过7427374273锁存输锁存输出,在八个出,在八个LEDLED发光二极管上显示。发光二极管上显示。+5VP2.0273273、244244的片选均通过的片选均通过P2.0P2.0实现,因此,访问
47、实现,因此,访问地址均为地址均为FEFFFEFF,为了区别两芯片访问,加入,为了区别两芯片访问,加入/RD/RD、/WR/WR来分别控制对不同芯片的控制端。来分别控制对不同芯片的控制端。#include unsigned char xdata *PORT; /定义访问的外部端口变量定义访问的外部端口变量void main() unsigned int tmp; PORT=0xFEFF; /根据原理图,定义外部端口的地址根据原理图,定义外部端口的地址 While(1) tmp = *PORT; /从从74244端口读取开关状态数据端口读取开关状态数据 *PORT =tmp;/将读取的数据通过将读
48、取的数据通过74273锁存输出锁存输出 /经硬件电路在发光二极管上显示经硬件电路在发光二极管上显示 例例3:用用8255扩展输入、输出口实现外接扩展输入、输出口实现外接LED由拨动开关相应位的状态进行控制的功能。由拨动开关相应位的状态进行控制的功能。由图知由图知A A口口输出输出:7FFC :7FFC B B口口输入输入:7FFD :7FFD C C口口:7FFE D:7FFE D口口:7FFF:7FFFP2.7P2.7P2.7P2.7#include #include #include #include #define COM8255 XBYTE0x7FFF /#define COM8255
49、 XBYTE0x7FFF /设设置命令控制寄存器地址置命令控制寄存器地址#define PA8255 XBYTE0x7FFC /#define PA8255 XBYTE0x7FFC /设设置置A A口的口的访问访问地址地址#define PB8255 XBYTE0x7FFD /#define PB8255 XBYTE0x7FFD /设设置置B B口的口的访问访问地址地址unsigned char temp;unsigned char temp;void main(void)void main(void) COM8255=0x83; / COM8255=0x83; /初始化初始化82558255
50、,据,据题题目要求目要求A A、B B口方式口方式0 0 /B /B口口输输入,入,A A口口输输出。出。 while(1)while(1) temp = PB8255; / temp = PB8255; /读读入入B B口数据口数据 PA8255 = temp; /PA8255 = temp; /从从A A口口输输出出 8.2 串行总线扩展串行总线扩展串行传输信号的特点串行传输信号的特点:1 0 0 1 1 1 0 1 串行方式传送数据时,数据的所有各位不是同串行方式传送数据时,数据的所有各位不是同时发送和接收,而是按一定顺序,一位一位地分时发送和接收,而是按一定顺序,一位一位地分时传送和接
51、收。这种方式传送成本低,传输距离时传送和接收。这种方式传送成本低,传输距离长,速度慢。长,速度慢。 与并行扩展一样,串行扩展也要解决下列问题与并行扩展一样,串行扩展也要解决下列问题:数据传送对象数据传送对象(单元单元/I/O口口)地址的选择地址的选择数据读写的控制数据读写的控制数据的传输。数据的传输。1.为实现地址、控制、数据信号分时传输,收发为实现地址、控制、数据信号分时传输,收发双方需要制定严格的协议。双方需要制定严格的协议。 2.如何解决双方同步收发问题?如何解决双方同步收发问题? 解决上述问题有多种不同方法,因而产生了解决上述问题有多种不同方法,因而产生了多种不同串行总线及其不同的传输
52、协议。多种不同串行总线及其不同的传输协议。 然而,串行总线扩展然而,串行总线扩展,通常只有通常只有1-2根传输线根传输线,因因此此,地址信号、控制信号和传送的数据只有采用分地址信号、控制信号和传送的数据只有采用分时传送的办法时传送的办法,用这用这1条线来传送,那么如何解决上条线来传送,那么如何解决上述问题呢?述问题呢? 目前单片机外部串行扩展目前单片机外部串行扩展常用的串行总线有常用的串行总线有SPI(Serial Peripheral Interface)接口接口 I2C(Inter-Integrated Circuit)接口接口 1-Wire(1-Wire Chips)技术等。)技术等。
53、1-WIRE总线具有结构最简单、成本低廉、节省总线具有结构最简单、成本低廉、节省 I/O资源、便于总线扩展和维护等优点。资源、便于总线扩展和维护等优点。 在在SPI总线标准中,使用总线标准中,使用3根公共的同步时钟根公共的同步时钟SCK 、数据线、数据线MISO、MOSI和独立的从器件选择线和独立的从器件选择线SS来完来完成器件的寻址、读写控制和数据传送的。通信过程由成器件的寻址、读写控制和数据传送的。通信过程由产生产生SCK时钟信号的主器件(时钟信号的主器件(MPU)控制。)控制。 SPI总线接口读写速度比总线接口读写速度比I2C总线接口快,通信协总线接口快,通信协议也较简单议也较简单,因此
54、,因此,SPI总线在单片机控制系统中被总线在单片机控制系统中被广泛使用在与广泛使用在与E2PROM、ADC、FRAM和显示驱动和显示驱动器之类的慢速外设器件通信中。器之类的慢速外设器件通信中。 I2C总线标准中,使用串行时钟信号总线标准中,使用串行时钟信号SCL和串行和串行数据数据/地址线地址线SDA进行信息传输,并允许若干兼容器进行信息传输,并允许若干兼容器件共享双线总线,通信过程由产生件共享双线总线,通信过程由产生SCL时钟信号的主时钟信号的主器件(器件(MPU)控制。)控制。 SPI总线是总线是Motorala公司提出的一种基于四线制的公司提出的一种基于四线制的同步串行总线,它是一种在芯
55、片之间通过串行数据线同步串行总线,它是一种在芯片之间通过串行数据线(MISO、MOSI)和串行时钟线()和串行时钟线(SCK)实现同步串)实现同步串行数据传输的技术。行数据传输的技术。 8.2.1SPI总线总线 SPI提供访问一个提供访问一个4线、全双工串行总线的能力,线、全双工串行总线的能力,支持在同一总线上将多个从器件连接到一个主器件支持在同一总线上将多个从器件连接到一个主器件上,由主器件上,由主器件控控制数据向一个或多个从器件制数据向一个或多个从器件传送。传送。 SPI设备可以工作在主方式或从方式中。设备可以工作在主方式或从方式中。 SPI总线结构总线结构 一个完整的一个完整的SPI系统
56、有如下的特性:系统有如下的特性: . .全双工、三线同步传送;全双工、三线同步传送; . .主、从机工作方式;主、从机工作方式; . .可程控的主机位传送频率、时钟极性和相位可程控的主机位传送频率、时钟极性和相位 . .发送完成中断标志;发送完成中断标志; . .写冲突保护标志。写冲突保护标志。 数据传送格式数据传送格式:先传送数据最高位先传送数据最高位MSB一般一般SPI系统使用四个系统使用四个I/O引脚:引脚: 串行数据线(串行数据线(MISO、MOSI)用于串行数据的发送)用于串行数据的发送和接收。和接收。 MISO主机方式输入从机方式输出数据线主机方式输入从机方式输出数据线 MOSI主
57、机方式输出从机方式输入数据线主机方式输出从机方式输入数据线 在在SPI设置为主机方式设置为主机方式时,时,MISO线是主机数据线是主机数据输入线输入线,MOSI是主机数据输出线是主机数据输出线; 在在SPI设置为从机方式设置为从机方式时,时,MISO线是从机数据线是从机数据输出线,输出线,MOSI是从机数据输入线。是从机数据输入线。 在在SPI器件设置为主机方式时,器件设置为主机方式时,主机启动一次传主机启动一次传送后会自动在送后会自动在SCK脚产生脚产生8个时钟周期个时钟周期。主机和从机主机和从机SPI器件在器件在SCK信号的一个跳变时进行数据移位,数信号的一个跳变时进行数据移位,数据稳定后
58、的另一个跳变时进行采样据稳定后的另一个跳变时进行采样。串行时钟线(串行时钟线(SCK) SCK用于同步从用于同步从MISO、MOSI引脚输入、输出引脚输入、输出的数据传送。的数据传送。在在SPI器件设置为器件设置为主机方式时主机方式时SCK为为输出输出;在;在SPI器件设置为器件设置为从机方式时从机方式时SCK为输入为输入。 对于一个完整的对于一个完整的SPI系统,系统,串行数据和串行时钟之间有四串行数据和串行时钟之间有四种极性和相位关系,以适应不同的外围器件特性。主机和从种极性和相位关系,以适应不同的外围器件特性。主机和从机器件之间的传送定时关系必须相同。机器件之间的传送定时关系必须相同。起
59、始电平为低电平起始电平为低电平起始电平为高电平起始电平为高电平采样时间在上升沿采样时间在上升沿采样时间在下降沿采样时间在下降沿从机选择(从机选择( ) 在从机方式时,在从机方式时, 脚是输入端,脚是输入端,用于使能用于使能SPI从机进行数据传送从机进行数据传送;在主机方式时,;在主机方式时, 用来保护在主方式下SPI同步操作所引起的冲突,逻辑0禁止SPI,清除MSTR位。一般由外部置为高电平,一般由外部置为高电平, 。 通过通过SPI可以扩展各种可以扩展各种I/O功能,包括:功能,包括:AD、DA、实时时钟、实时时钟、RAM、EEPROM及并行输入及并行输入输出接口等。输出接口等。 SPI总线
60、接口的典型电路如下图所示。采用总线接口的典型电路如下图所示。采用1个主器件和个主器件和n个从器件构成。个从器件构成。主器件产生时钟信号,控制着数据向主器件产生时钟信号,控制着数据向1个或个或n个从器件传送,从器件在主机发命令时才能接收或发送数据个从器件传送,从器件在主机发命令时才能接收或发送数据。 2SPI串行总线的接口电路串行总线的接口电路 对于没有对于没有SPI接口的接口的 51单片机,可以用两种方法单片机,可以用两种方法来实现与来实现与SPI外设的接口。外设的接口。 串行时钟极性和相位之间的关系、传送速率都串行时钟极性和相位之间的关系、传送速率都是固定的,不可编程改变。是固定的,不可编程
61、改变。3. 51单片机串行扩展单片机串行扩展SPI外设的接口外设的接口 1)用串口方式)用串口方式0提供简化的提供简化的SPI同步串行通信功能同步串行通信功能只有两个引脚:只有两个引脚:RXDRXD(MOSI/MISOMOSI/MISO)和)和TXDTXD(SCLKSCLK)其特点是:其特点是: 2)通用)通用I/O口来模拟口来模拟SPI串行接口,用软件来模拟串行接口,用软件来模拟仿真仿真SPI操作。操作。由于串行数据输入、输出是同一根线,要由软由于串行数据输入、输出是同一根线,要由软件设置数据传送方向。件设置数据传送方向。 串行数据线上传送数据位的顺序为先串行数据线上传送数据位的顺序为先LS
62、BLSB后后MSBMSB 8.2.3 I2C总线总线 I2C总线总线(Intel IC BUS)是是Philips公司推出的一种公司推出的一种基于两线制的同步串行数据传输总线。被广泛用于消费基于两线制的同步串行数据传输总线。被广泛用于消费类电子产品、通信产品、仪器通信及工业总线中。类电子产品、通信产品、仪器通信及工业总线中。SDA:串行数据线,双向串行数据线,双向传输数据。传输数据。SCL:串行时钟线,传输串行时钟线,传输时钟信号,在传输过程时钟信号,在传输过程中用来同步数据线上的中用来同步数据线上的数据传送数据传送1、 I2C总线系统结构总线系统结构 挂在挂在I I2 2C C总线上的器件必
63、须有总线上的器件必须有I I2 2C C总线接口,它们的总线接口,它们的SDASDA和和SCLSCL引脚都是开漏结构引脚都是开漏结构,都需通过电阻与电源连都需通过电阻与电源连接接。所有器件的同名端相连接。作为主控件的单片机。所有器件的同名端相连接。作为主控件的单片机可以没有可以没有I I2 2C C总线接口。总线接口。 在在I2C 总线上的器件根据其功能可分为两种:总线上的器件根据其功能可分为两种:主控器件和从控器件。主控器件和从控器件。 主控器件主控器件:控制总线存取,产生串行时钟信号:控制总线存取,产生串行时钟信号SCL,并产生并产生启动传送启动传送及及结束传送结束传送的信号,总线必须由一
64、的信号,总线必须由一个主控器件控制。个主控器件控制。 从器件从器件:在总线上被主控器件寻址的器件,它们根:在总线上被主控器件寻址的器件,它们根据主控器件的命令来接收和发送数据。据主控器件的命令来接收和发送数据。 1) I I2 2C C总线采用两线制,由双向数据线总线采用两线制,由双向数据线SDASDA和时钟和时钟SCLSCL构成,为同步传输总线,数据线上信号完全与时构成,为同步传输总线,数据线上信号完全与时钟同步,可进行全双工数据传送。钟同步,可进行全双工数据传送。2、I2C总线特点总线特点 3)总线采用了器件地址硬件设置总线采用了器件地址硬件设置, ,无须用外围器件无须用外围器件片选信号方
65、式的寻址方法。可以并行扩展多个外围片选信号方式的寻址方法。可以并行扩展多个外围器件。器件。2)总线平时通过上拉电阻接到电源,在空闲情况下,总线平时通过上拉电阻接到电源,在空闲情况下,2 2根线都处于高电平。根线都处于高电平。4 4)系统中的器件有)系统中的器件有四种可能的工作方式四种可能的工作方式:主发送主发送方式、主接收方式、从发送方式和从接收方式。方式、主接收方式、从发送方式和从接收方式。 6)是一个真正的多机总线,如果两个或更多主机同是一个真正的多机总线,如果两个或更多主机同时初始化数据传输,可以通过冲突检测和仲裁防止数时初始化数据传输,可以通过冲突检测和仲裁防止数据被破坏。据被破坏。
66、5)I2 2C总线指定了严格的规范,包括:接口的电气总线指定了严格的规范,包括:接口的电气特性、信号时序、信号传输的定义等。特性、信号时序、信号传输的定义等。 7)由于由于I2 2C增加了用于同步的时钟线增加了用于同步的时钟线SCLSCL,可以大大,可以大大提高数据的传输速度。标准模式下可达提高数据的传输速度。标准模式下可达100kbit/s100kbit/s快速快速模式下可达模式下可达400kbit/s, ,高速模式下可达高速模式下可达3.4Mbit/s。3、 I2C总线工作原理总线工作原理 1 1) 数据传送采用主从方式,由主控器件来寻数据传送采用主从方式,由主控器件来寻址从器件、启动总线
67、、产生时钟、传送数据及结址从器件、启动总线、产生时钟、传送数据及结束数据的传送。束数据的传送。 2 2) I I2 2C C总线上所有器件都有规范的器件地址,总线上所有器件都有规范的器件地址,它由器件的固有地址及其地址引脚电平决定,对器它由器件的固有地址及其地址引脚电平决定,对器件的寻址采用软件方法。件的寻址采用软件方法。 I I2 2C C总线器件地址由七位组成,它与总线器件地址由七位组成,它与1 1位方向位方向位共同构成了位共同构成了I I2 2C C总线器件的寻址字节总线器件的寻址字节SLASLA。 D7D6 D5 D4D3 D2 D1 D0寻址字节寻址字节SLASLA器件地址器件地址引
68、脚地址引脚地址方向位方向位DA3DA3DA2 DA1DA2 DA1DA0DA0A2A2 A1 A0 A1 A0R/ WR/ WDA3-DA0DA3-DA0是I I2 2C C器件固有地址编码,出厂时已给定。器件固有地址编码,出厂时已给定。如:如: E E2 2PROM AT24C02PROM AT24C02的地址为的地址为10101010,4 4位位LEDLED驱动驱动器器SAA1064SAA1064的地址为的地址为01110111。同类器件具有同样的地。同类器件具有同样的地址编码址编码A2A2、A1A1、A0A0是由是由I I2 2C C器件引脚连接状态形成的地址码。器件引脚连接状态形成的地
69、址码。这些引脚可接电源或地,这部分可变地址可区分线上这些引脚可接电源或地,这部分可变地址可区分线上同类器件,也决定了总线上可连接的同类器件的数量。同类器件,也决定了总线上可连接的同类器件的数量。3)、)、I2C总线信号类型和时序总线信号类型和时序1 1) I I2 2C C总线在传送数据过程中共有总线在传送数据过程中共有4 4种类型信号。种类型信号。开始信号(开始信号(S S):):SCLSCL为高电平时,为高电平时,SDASDA由高电平向低由高电平向低 电平跳变,开始传送数据。电平跳变,开始传送数据。结束信号(结束信号(P P):):SCLSCL为高电平时,为高电平时,SDASDA由低电平向
70、高由低电平向高 电平跳变,结束传送数据。电平跳变,结束传送数据。 方向位方向位R/ W规定了总线上的主器件与从器件的数据传规定了总线上的主器件与从器件的数据传送方向。送方向。R/ W=1表示接收表示接收( (读读) ),R/ W=0表示发送表示发送( (写写) )。应答信号(应答信号(A A):接收数据的器件在接收到):接收数据的器件在接收到8 8位数据后,位数据后, 向发送器件发出特定的低电平脉冲,表示向发送器件发出特定的低电平脉冲,表示 已收到数据。发送器接收到应答信号后,根已收到数据。发送器接收到应答信号后,根 据实际情况做出是否继续传递信号的判断。据实际情况做出是否继续传递信号的判断。
71、 若未收到应答信号,则判断为接收器件出现若未收到应答信号,则判断为接收器件出现 故障。故障。非应答信号(非应答信号(A A):接收数据的器件在接收到):接收数据的器件在接收到8 8位数据位数据 后,向发送器件发出高电平为非应答信号。后,向发送器件发出高电平为非应答信号。 主器件接收从器件数据时,接收到最后一个字节数据主器件接收从器件数据时,接收到最后一个字节数据后,必须给从器件发送后,必须给从器件发送1 1个非应答信号,使从器件释放数个非应答信号,使从器件释放数据总线,以便主器件发送停止信号,从而终止数据传送。据总线,以便主器件发送停止信号,从而终止数据传送。 4 4) I I2 2C C总线
72、的四种状态和数据传输时序总线的四种状态和数据传输时序 总线状态总线状态 SCL SDA总线不忙总线不忙 高电平高电平 高电平高电平开始传送数据开始传送数据 高电平高电平停止传送数据停止传送数据 高电平高电平 数据传送数据传送SCL低电平时更改数据,用低电平时更改数据,用SCL的上升的上升沿读取数据,沿读取数据,在在SCL高电平时数据不能高电平时数据不能变动变动I2C数据传送时序数据传送时序SCL高电平期间,高电平期间,SDA状态的改状态的改变,被用来表示起始和停止条件变,被用来表示起始和停止条件 在在I I2 2C C总线上进行数据传输时要严格遵守其时总线上进行数据传输时要严格遵守其时序、协议
73、,保证做到:序、协议,保证做到: 数据有效转换开始后的数据传输过程中,当时数据有效转换开始后的数据传输过程中,当时钟线钟线SCLSCL为高电平时,数据线为高电平时,数据线SDASDA必须保持稳定(否必须保持稳定(否则会被认为是发出启动、停止信号)。传输的数据则会被认为是发出启动、停止信号)。传输的数据的变化即改变数据线的变化即改变数据线SDASDA时,必须在时钟线时,必须在时钟线SCLSCL为低为低电平时方可进行。电平时方可进行。说明:说明:主器件在传输数据结束后,即产生停止信号,推主器件在传输数据结束后,即产生停止信号,推出主器件角色,经过一定时间后,总线处于空闲状出主器件角色,经过一定时间
74、后,总线处于空闲状态。态。 任一器件在总线空闲时,一旦产生起始信号,任一器件在总线空闲时,一旦产生起始信号,即开始控制总线而成为主器件,此时,总线处于忙即开始控制总线而成为主器件,此时,总线处于忙状态,其他器件不能再产生起始信号,否则,该主状态,其他器件不能再产生起始信号,否则,该主器件控制的数据传输无法正确完成。器件控制的数据传输无法正确完成。 在一个通信过程中,应该有一个起始信号和一在一个通信过程中,应该有一个起始信号和一个停止信号,如果两者之间有起始信号产生,该信个停止信号,如果两者之间有起始信号产生,该信号被称为号被称为重复起始信号。重复起始信号。5 5) 数据传输格式数据传输格式 由
75、于数据和地址信号都用一根数据线由于数据和地址信号都用一根数据线SDASDA来传输来传输, ,何时传何时传输地址输地址? ?什么时候是主器件读什么时候是主器件读? ?什么时候是主器件写什么时候是主器件写? ?如何保证如何保证传输的正确?必须有一个共同接受的规定(协议)传输的正确?必须有一个共同接受的规定(协议): :.主控器件写操作主控器件写操作 主器件向被控器件发送主器件向被控器件发送n n个数据的数据格式如下个数据的数据格式如下: :起起始始信信号号S送送7位地址和位地址和一位一位(为为”0”)传送方传送方向向 SLAW应应答答信信号号A发送数据发送数据DATA1应应答答信信号号A发送数发送
76、数据据DATAn-1应应答答信信号号A发送数据发送数据DATAn 非非应应答答信信号号A/A停停止止信信号号 P主控器件读操作主控器件读操作 主器件向被控器件读主器件向被控器件读n n个数据的数据格式如下个数据的数据格式如下: :起起始始信信号号S送送7位地址和位地址和一位一位(为为”1”)传送传送方向方向 SLAR应应答答信信号号A接收数据接收数据DATA1应应答答信信号号A接收数据接收数据DATAn-1应应答答信信号号A接收数据接收数据DATAn 非非应应答答信信号号A停停止止信信号号 P主控器读写操作主控器读写操作 主控器读写操作是指主控期间在一次数据过程中需要改变数主控器读写操作是指主
77、控期间在一次数据过程中需要改变数据传送方向的操作据传送方向的操作。此过程中的此过程中的读、写操作分别与上述方法一读、写操作分别与上述方法一样样, ,只是只是在数据传送方向改变后在数据传送方向改变后, ,必须由主控器件发出从新启动必须由主控器件发出从新启动信号,并发一个寻址字节,信号,并发一个寻址字节,因为,数据字节的传送方向决定于因为,数据字节的传送方向决定于寻址字节的方向位寻址字节的方向位。S S SLAW/RSLAW/RA A DATA1DATA1A A DATA2DATA2A A DATAnDATAnA/AA/ASrSrS SSLARSLARA A DATA2DATA2A A DATA3
78、DATA3A A DATAnDATAnA/AA/A P PSLAR/W A DATA1 ASLAR/W A DATA1 A其中:其中:SrSr为重复起始信号为重复起始信号作业作业: :1.1.用用80318031单片机,并采用一片单片机,并采用一片2716(2KB)2716(2KB)和一片和一片82558255组成一组成一个既有程序存储器又有扩展个既有程序存储器又有扩展I/OI/O口的扩展系统,请:口的扩展系统,请: (1)(1)画出逻辑电路图画出逻辑电路图 (2)(2)说明其存储空间说明其存储空间2.2.请利用请利用74HC13874HC138设计一个译码电路设计一个译码电路, ,分别选中分
79、别选中4 4片片2764,2764,且且列出各芯片所占的地址范围列出各芯片所占的地址范围: : Y0Y0芯片地址范围芯片地址范围0000H-1FFFH,0000H-1FFFH,Y1Y1芯片地址范围芯片地址范围2000H-3FFFH,2000H-3FFFH,Y2Y2芯片地址范围芯片地址范围4000H-5FFFH,4000H-5FFFH,Y3Y3芯片地址范围芯片地址范围6000H-7FFFH.6000H-7FFFH.#define uchar unsigned char sbit SDA =P10 ; /串行数据线串行数据线sbit SCL =P11 ; /串行数据线串行数据线uchar idat
80、a SLAdd; /存从器件地址变量存从器件地址变量uchar idata sbuf8; /数据发送缓冲区数据发送缓冲区uchar idata rbuf8; /数据接收缓冲区数据接收缓冲区bit bdata NACK ; /器件坏或错误标志数据位器件坏或错误标志数据位bit bdata nackFlag ; /非应答标志位非应答标志位利用利用51单片机模拟单片机模拟I2C总线接口的单片机程序总线接口的单片机程序P1.0P1.18051VCCR=4.7K0.01fSDASCLvoid start(void)SDA = 1;/ 启动启动I2C总线总线SCL = 1;delay5us(); /起始条
81、件建立时间起始条件建立时间4.7SSDA = 0;delay5us(); /起始条件锁定时间起始条件锁定时间4.7SSCL = 0; /钳住钳住SCL总线,准备发送数据总线,准备发送数据/*产生起始信号子函数:要求在时钟为高电平期间数产生起始信号子函数:要求在时钟为高电平期间数据线由高变低据线由高变低。 */SDASCLvoid delay5us() /* 延时约延时约5微秒,对于微秒,对于12M时钟时钟 */uint i;for (i=0;i4.7SSCL = 0; SDA = 1; /释放数据线释放数据线/* 发送非应答位发送非应答位”1”子函数子函数 : :要求主控器件向被控要求主控器件
82、向被控器件发送器件发送”1”非应答信号非应答信号,并立即在并立即在SCL上发出与非上发出与非应答位对应的第应答位对应的第9个时钟个时钟*/SDASCLvoid n_ack(void)SDA = 1; / 发送非应答位发送非应答位“1”SCL = 1; /紧跟着发送对应应答位的第紧跟着发送对应应答位的第9个时钟个时钟delay5us(); /保持数据时间要保持数据时间要4.7SSCL = 0; SDA = 0;/* 应答位检查子函数:用于检查一字节数据传送后应答位检查子函数:用于检查一字节数据传送后,被控被控控器件在第控器件在第9位时钟期间是否发回位时钟期间是否发回”0”的应答的应答,若是若是,
83、程程序置序置nackFlag标志为标志为0,否则置否则置nackFlag标志为标志为1。 */void checkack(void) SDA = 1; / 应答位检查是应答位检查是I/O输入,必将输入,必将p1.0设置成设置成 /输入,即先向端口写输入,即先向端口写1) SCL = 1; nackFlag = 0; /非应答标志初设为非应答标志初设为“0”(无非应答)(无非应答) if(SDA = 1) / 若读数据线若读数据线SDA=1表明检测到非应答表明检测到非应答 nackFlag = 1; /置位非应答标志置位非应答标志nackFlag=1 SCL = 0; /* 发送一个字节数据子函
84、数发送一个字节数据子函数 */void sendbyte(uchar idata *ch) /*ch为指向发送缓冲区的指针为指向发送缓冲区的指针 uchar idata n = 8; /1个字节数共发送个字节数共发送8位位 uchar idata temp; /待发数据暂存变量待发数据暂存变量 temp = *ch; while(n-) /控制发送控制发送8位位 if(temp&0x80) = 0x80) / 若要发送的数据最高位为若要发送的数据最高位为1则发送位则发送位1 SDA = 1; / 送位送位”1”至数据线至数据线 _nop_(); SCL = 1; / 产生产生 发送时钟发送时钟
85、 上升沿上升沿 delay5us(); SDA = 0; / 使使SDA回到回到0状态(可以试去掉此步)状态(可以试去掉此步) SCL = 0; else SDA = 0; / 否则送位否则送位”0”上数据线上数据线 _nop_(); SCL = 1; / 产生时钟产生时钟 上升沿上升沿 delay5us(); SCL = 0; temp = temp1; / 数据左移一位数据左移一位 /* 接收一字节子程序接收一字节子程序 */void recbyte(uchar idata *ch) /*ch为指向接收缓冲区的指针为指向接收缓冲区的指针uchar idata n=8; / 从从SDA线上读
86、取一字节,共线上读取一字节,共8位位uchar idata temp = 0; /待接收数据暂存变量初始化为待接收数据暂存变量初始化为0while(n-) SDA = 1; /将数据线对应口线置将数据线对应口线置1,使得可正确输入,使得可正确输入 SCL = 1; / 产生时钟产生时钟 上升沿使发方发送数据有效上升沿使发方发送数据有效 temp = temp1; /接收数据变量左移一位准备接收接收数据变量左移一位准备接收1位数据位位数据位 if(SDA = 1) /若接收到的位为若接收到的位为1, temp = temp|0x01; /则将接收数据变量的最后一位置则将接收数据变量的最后一位置1
87、 else temp = temp&0xfe; / 否则接收数据变量的最后一位置否则接收数据变量的最后一位置0 SCL=0;*ch = temp; /接收数据送接收缓冲区接收数据送接收缓冲区/* 主控器件发送主控器件发送n个字节数据给从器件子程序个字节数据给从器件子程序 */void sendnbyte(uchar idata *sla, uchar n) /*sla为指为指 /向从器件地址存放处的指针向从器件地址存放处的指针 uchar idata *p; /定义指向发送数据所在单元的指针定义指向发送数据所在单元的指针p start();/ 发送启动信号发送启动信号 sendbyte(sla
88、); / 发送从器件地址字节发送从器件地址字节 checkack(); / 检查应答位检查应答位 if(nackFlag = 1) / 若为非应答,表明器件错误或已坏若为非应答,表明器件错误或已坏 NACK = 1; /则置错误标志位则置错误标志位NACK return; /返回返回 p = sbuf; / 回送的是应答信号,将发送数据区地址赋给指针回送的是应答信号,将发送数据区地址赋给指针P while(n-) /控制发送控制发送n个字节的数据个字节的数据 sendbyte(p); /调用发送调用发送1个字节的函数发送个字节的函数发送1个数据个数据 checkack(); / 检查应答位检查应答位 if (nackFlag = 1) / 若为非应答表明器件错误或已坏若为非应答表明器件错误或已坏 NACK=1; /置错误标志位置错误标志位NACKreturn; /返回返回 p+; /回送的是应答信号,则从件正确接收到,修改指针回送的是应答信号,则从件正确接收到,修改指针P stop(); / 全部发完,调用发送停止信号的函数结束传输全部发完,调用发送停止信号的函数结束传输作业作业/* 主控器件从从器件接收主控器件从从器件接收n个字节数据子程序个字节数据子程序 */