1、课件制作:高惠芳,第7章 单片机 系统 扩展,第7章 单片机 系统 扩展,7.1 单片机最小应用系统 7.2 存储器的扩展 7.3 输入与输出口的扩展 7.4 串行口扩展,7.1 单片机最小应用系统,7.1.1 单片机最小应用系统构成 按照单片机系统扩展与系统配置状况,单片机应用系统可以分为: 1、最小应用系统:指能维持单片机运行的最简单配置的系统。AT89S51单片机其最小应用系统即为配有晶振、复位电路和电源的单个单片机。 2、最小功耗系统 3、典型应用系统,AT89S51最小应用系统图,(1)有可供用户使用的大量I/O口线。因没有外部存储器扩展,P0、P1、P2、P3都可作用户I/O口使用
2、,注意P0口要接上拉电阻。 (2)内部RAM存储器容量有限只有128字节,4K字节EPROM。 (3)8051的应用软件写入:1、依靠半导体厂家用半导体掩膜技术置入;2、可以通过程序烧写器写入;3、对于有ISP接口的芯片,可以在线下载程序。,AT89S51单片机构成最小应用系统应用特点:,NOTE:如果需要更大容量的程序可以选用AT89S52(8KB)、AT89S53(12KB) 、AT89C55(20KB)、W77E58(32KB)、W77E516(64KB)。对于W77Exx片内还有1KB的外部RAM。对于一般的应用系统完全没有必要再扩展内存。,7.1.2 系统扩展的内容与方法,许多场合下
3、单片机内部资源是不够用的,所以需要进行功能扩展。其中主要是存储器扩展和I/O扩展,以构成一个功能更强,能满足需要的单片机应用系统。,一、为什么要进行系统扩展?,二、系统的扩展包括哪些内容?, 外部程序存储器的扩展。 外部数据存储器的扩展。 输入/输出接口的扩展。 管理功能器件的扩展(如定时/计数器、 键盘/显示器、 中断优先编码器等)。,图 2 扩展16KB SRAM和16KB EPROM,MCS-51系列单片机系统的扩展能力,片外可扩展存储器的最大容量为216=64KB,地址范围为0000HFFFFH。允许片外程序存储器和数据存储器的地址重叠。I/O接口的编址方法:一种是独立编址,另一种是统
4、一编址。MCS-51单片机采用了统一编址方式,即I/O端口地址与外部数据存储单元地址共同使用0000HFFFFH(64KB)。当MCS-51单片机应用系统扩展较多外部设备和I/O接口时,要占去大量的数据存储器的地址。,三、如何进行系统扩展?,系统扩展是通过系统总线进行的,通过总线把各扩展部件连接起来,并进行数据、地址和信号的传送。,1. 系统总线,所谓总线,就是连接计算机各部件的一组公共信号线。MCS51使用的是并行总线结构,按其功能分为:地址总线、数据总线和控制总线。,1)AB(Address Bus)在地址总线上传送的是地址信号,用于存储单元和I/O端口的选择。地址总线是单向的,地址信号只
5、能由单片机向外送出。地址总线的数目决定着可直接访问的存储单元数目。,2)DB (Data Bus)数据总线用于在单片机与存储器之间或单片机与I/O端口之间传送数据。单片机系统数据总线的位数与单片机处理数据的字长一致。DB是双向的,可以进行两个方向的数据传送。,3)CB (Control Bus)控制总线实际上就是一组控制信号线,包括单片机发出的,以及从其它部件传送给单片机的。对于一条具体的控制信号线来说,其传送方向是单向的,但是由不同方向的控制信号线组合的控制总线表示为双向。,图6.1 单片机扩展系统结构图,2. 总线的构造,1。以P0口的8位口线作低8位地址/数据线。 2。以P2口的口线作高
6、位地址线 3。控制信号 .使用ALE作地址锁存的选通信号,以实现低8位地址的锁存; .以PSEN信号作扩展程序存储器的读选通信号; .以EA信号作为内外程序存储器的选择信号; .以RD和WR作为扩展数据存储器和I/O端口的读选通信号。,扩展总线构造图,扩展总线的产生,常用的地址锁存器有:74LS373、74LS273、74LS377、8282图4表示了它们在系统中的连接方法。,图,4,用作地址锁存器的常用芯片,图,5,用作地址锁存器的常用芯片,7.2 存储器的扩展,SRAM 静态随机存储器 DRAM 动态随机存储器 掩膜只读存储器 PROM 可编程只读存储器 EPROM 紫外线可擦除只读存储器
7、 EEPROM 电可擦除只读存储器 Flash 闪存,补充知识1:MCS51单片机的时序,1.外部程序存储器读周期的时序外部程序存储器读周期的时序如图6所示,用ALE的下降沿将从P0口输出的低8位地址锁存,用 信号选通程序存储器将其中的指令码送到P0口,当 上升沿时完成对P0口数据的采样。,程序存储器读周期,图 6 程序存储器读周期,2.外部数据存储器读/写周期的时序:如图7所示。指令只有四条,它们都是单字节双周期采用寄存器间接寻址的传送指令。第一个机器周期单片机完成读指令码的操作;第二个机器周期的S1开始出现 (或 )信号,在 (或 )的上升沿完成对外部数据存储器(或I/O口)的读(或写)操
8、作。,图,7,外部数据存储器读/写周期,外部数据存储器读周期,外部数据存储器写周期,7.2.1 程序存储器的扩展,程序存储器使用较多的是EPROM和E2PROM。EPROM型的有: 2764(8KB,13位地址线) 27128(16KB,14位地址) 27256(32KB)、27512(64KB),1 芯片2764简介,2764可以通过紫外线照射而彻底擦除,擦除后可以重新写入新的程序。,A12A0:13条地址线,表示有个地址单元。 O7O0:8条数据线,表示地址单元数据字长8位。 /CE:片选控制输入端,低有效。 /OE:读出控制输入端,低有效。 Vcc:工作电源5V。,2764存储器扩展的主
9、要内容:地址线、数据线和控制线的连接。,A)地址线的连接 低位地址线的连接与存储芯片的容量有关。2764的容量为8KB,须13位地址(A12A0)进行存储单元编址。,2. 程序存储器扩展举例,B)数据线的连接 数据输出引脚与单片机P0口对应连接 C)控制线的连接 程序存储器的扩展只涉及PSEN,把该信号连接到2764的OE引脚,用于存储器读出选通。EA = 0,允许程序存储器扩展。,ALE,图 7.2.2 8k程序存储器扩展,7.2.2 数据存储器的扩展,单片机扩展数据存储器通常采用静态RAM(SRAM)芯片, 常用的有: 6116(2KB, 11位地址线)、 6264(8KB,13位地址线)
10、、 62256(32KB,15位地址线)等。,1 芯片6264介绍,A10A0:地址线 I/0 7I/0 0:数据线(D7D0) /CE:片选信号 /OE:数据输出允许信号 /WE:写选通信号 VCC:电源(+5V) GND:地,2.数据存储器扩展举例,6264存储器扩展的主要内容:地址线、数据线和控制线的连接。,A)地址线的连接 低位地址线的连接与存储芯片的容量有关。6264的容量为8KB,须13位地址(A12A0)进行存储单元编址。,B)数据线的连接 数据输出引脚与单片机P0口对应连接 C)控制线的连接 数据存储器是使用/RD和/WR分别作为读,写选通信号。以/RD接/OE,/WR接/WE
11、,进行RAM芯片的读写控制。由于只有一片6264,所以没有使用片选信号,而把/CE端直接接地。,图 7.2.4 8k数据存储器扩展,补充知识2:存储器并行扩展与编址技术,所谓存储器编址,就是如何使用系统提供的地址线,通过适当的连接,最终达到系统中的一个存储单元只唯一对应一个地址的技术。 注:芯片内存储单元已经编址,只有扩展存储器才有编址的问题。,7.2.3 存储器综合扩展,存储器编址分两个层次: 1)芯片内部存储单元的编址 2)存储芯片的选择(系统空间分配) 系统空间分配通过适当的地址线产生各外部扩展器件的片选/使能等信号就是系统空间分配。 编址技术:线选法译码法,1。线选法,所谓线选法,就是
12、直接以系统的地址位作为存储芯片的片选信号,为此只需把用到的地址线与存储芯片的片选端直接连接即可。 特点:简单明了,不需要另外增加电路。 缺点:存储空间的使用是断续的,不能充分利用存储空间,扩充存储容量受限制。,线选法寻址,图 8 用线选法实现片选,各芯片的地址范围如下:,2。译码法,译码法寻址就是利用地址译码器对系统的片外高位地址进行译码, 以其译码输出作为存储器芯片的片选信号, 将地址划分为连续的地址空间块, 避免了地址的间断。 译码法仍用低位地址线对每片内的存储单元进行寻址, 而高位地址线经过译码器译码后输出作为各芯片的片选信号。常用的地址译码器是 3/8 译码器 74LS138、 74L
13、S139 。 ,2译码片选法 3-8 地址译码器:74LS138,存储器扩展连接如图 9 所示。,图 9 采用地址译码器扩展存储器的连接图,分配地址范围,当单片机外接芯片较多,超出总线负载能力,必须加总线驱动器。,单向驱动器74LS244用于 地址总线驱动 双向驱动器74LS245用于 数据总线驱动,微型机总线扩展驱动,7.2.3 存储器综合扩展,译码法。 程序存储器2764的选通地址为 X110 0000 0000 0000BX111 1111 1111 1111B, 中间的数据存储器6264的选通地址为 X100 0000 0000 0000BX101 1111 1111 1111B, 右
14、边的数据存储器的选通地址为 X010 0000 0000 0000BX011 1111 1111 1111B。,7.2.4 闪速存储器及其扩展,FLASHROM AT29C256芯片的容量为32KB,,主要引脚功能如下: A0A14:地址线。 I/O0一I/O7:三态双向数据线。 /CS :片选信号线,低电平输入有效。 /OE:输出允许(读允许)信号线,低电平输入有效。 /WE:写允许信号线,低电平输入有效。,(1)读操作 当/CS=0,/OE=0,/WE=1时,被选中单元的内容读出到双向数据线I/O0I/O7上。 (2)写操作 外部数据写入29C256芯片时,数据要先装入其内部锁存器,装入时
15、/CS=0,/OE=1,/WE=0,数据写入以页为单位进行, 说明:即要改写某一单元的内容,相应的整页都要重写,没有被装入的字节内容被写成0FFH,在写入过程中,或在上升沿之后的150ns内,要再次有效,以便写入新的字节,整个写入周期中应64次有效。当某次上升沿后150ns内,没有出现下降沿,则装入周期结束,开始内部的写入周期。,2MCS-51单片机与AT29C256的接口,NOTE:以上扩展方法与数据存储器的扩展方法相同,单片机访问它时,可以使用MOVC指令也可以使用MOVX指令。,图7.2.7 80C51单片机与AT29C256芯片典型的接口电路图,7.3 输入与输出口的扩展,在51单片机
16、中扩展的I/O口采用与片外数据存储器相同的寻址方法,所有扩展的I/O口,以及通过扩展I/O口连接的外设都与片外RAM统一编址,因此,对片外I/O口的输入/输出指令就是访问片外RAM的指令,即: MOVX DPTR,A MOVX Ri,A MOVX A,DPTR MOVX A,Ri,扩展I/O口的方法有三种: 简单的I/O口扩展、 采用可编程的并行I/O接口芯片扩展 利用串行口进行I/O口的扩展。,7.3.1 简单的并行I/O接口扩展,一I/O 接口地位 二 I/O 接口作用 三 I/O 编址技术 四 I/O 数据的四种传送方式 五 I/O 接口的类型,补充:IO接口概述,一I/O 接口地位 I
17、/O 接口处于外设与CPU之间, 是CPU与外设间的桥梁与通道。 二 I/O 接口作用 CPU与外设速度匹配 (输入缓冲,输出锁存) 数据转换;如:串/并,A/D,D/A 电平转换; 实现地址译码,总线隔离;,三I/O 编址技术 1、接口与端口 接口:指CPU与外设间的I/O接 口芯片。 端口: I/O芯片内可寻址的数据 寄存器或缓冲器。 2、I/O编址I/O与RAM独立编址(地址重叠,两套访问指令)I/O与RAM统一编址(存储器直接映像),8255内部结构,四 I/O 数据的四种传送方式 1、无条件传送方式 无条件传送也称为同步程序传送。 无条件传送适用于以下两类外部设备的数据输入输出 具有
18、常驻的或变化缓慢的数据信号的外部设备。 例如:机械开关、数码管等。 工作速度非常快,足以和CPU同步工作的外部设备。 例如数/模转换器DAC,由于DAC是并行工和的,速度很快,因此CPU可以随时向其传送数据,进行数/模转换.,四 I/O 数据的四种传送方式 2、程序查询方式查询方式又称之为有条件传送方式。适用于各种外部的设备的数据输入输出传送但查询过程占用CPU,查询方式只能适用于单项作业、规模比较小的计算机系统.,四I/O 数据的四种传送方式 3、程序中断方式程序中断方式与查询方式的主要区别程序中断方式,大大提高了系统的效率中断处理常需现场保护和现场恢复 4、DMA方式(Direct Mem
19、ory Access)适合批量传送数据传送速度极快,7.3.1 单片机简单I/O扩展,一 简单输入口扩展操作指令:MOVX A, DPTR (控制信号:RD)适用:控制简单外设,如开关量输入。 常用芯片:74LS244/245, 8286/8287特点:三态输出,片选信号无效时,输出高阻应用电路:注意建立有效地址以及使能端。,74LS244真值表,应用程序设计举例: MOV DPTR, #0BFFFH; P2.6=0 MOVX A, DPTR ;RD=0,变量 = XBYTE0XBFFF,7.3.1 单片机简单I/O扩展,二 简单输出口扩展操作指令:MOVX DPTR, A (控制信号:WR)
20、适用:控制简单外设,如驱动发光二极管, 数码管等。 常用芯片:74LS373/377, 8282/8283特点:输出锁存,以使速度匹配应用电路:注意建立有效地址以及锁存信号。,74LS377真值表,应用程序设计举例: MOV DPTR, #7FFFH ; P2.7=0 MOVX DPTR, A ;WR =0,应用程序设计举例: XBYTE0X7FFF = 变量,7.3.1 单片机简单I/O扩展,三 简单输入/输出口应用举例 将74LS244的输入端接8个开关用来设置数据,将74LS273的输出端接8个LED用来显示数据, 应用电路:程序设计:,应用程序设计举例: LOOP: MOV DPTR,
21、 #0FEFFH ; P2.0=0 MOVX A , DPTR ;从244输入数据 MOVX DPTR, A ;从273输出数据 LCALL DELAY ; 延时 LJMP LOOP DELAY: RET END,C程序,include #include #define EXIO XBYTE0xFEFF /定义扩展IO的地址为0xEFFF Unsigned char xdata *io_adr; Main() io_adr = ,DAC/ADC总线方式连接,常用芯片:,7.3.2 用8255扩展并行I/O接口,18255 的电路结构和功能 8255是Intel公司生产的可编程并行I/O接口芯片
22、,有3个8位并行I/O口,具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。,3个逻辑电路部分: 口电路 总线接口电路 控制逻辑电路,7.3.2.1 8255硬件逻辑结构,3个逻辑电路部分: 口电路 总线接口电路 控制逻辑电路,1
23、、口电路,3个8位口:,A口、B口: 单纯的数据口,供数据I/O 使用,C口: 既可以作数据口,又可以 作控制口使用,用于实现 A口和B口的控制功能,C口分为两部分:,数据传送中A口需要的控制信号 由C口高位部分提供,因此把A 口和C口高位部分合在一起称之 为A组;,同样,把B口和C口低位部分合 在一起称之为B组,2、总线接口电路,用于实现8255A和单片 机芯片的信号连接,(1)数据总线缓冲器,为8位双向三态缓冲 器,直接与单片机 的数据线相连,与 I/O操作有关的数据、 控制字和状态信息都 是通过该缓冲器进行 传送,(2)读/写控制逻辑,3、控制逻辑电路,包括A组控制和B 组控制,合在一
24、起构成8位控制寄 存器。用于存放 编程命令和实现 各口的操作控制,*4. 中断控制电路,8255逻辑电路中还包含一个中断控制电路。 中断控制电路中对应A、B两个口各有一个中断触发器, 即触发器A和触发器B,用于对中断的允许和禁止进行 控制。置位为允许,复位为禁止。,对两个触发器的置位和复位控制是通过口C的有关位进行 的,具体划分是: 在输入方式下,PC4对应触发器A,PC2对应触发器B; 在输出方式下,PC6对应触发器A,PC2对应触发器B。,7.3.2.2 8255芯片引脚与CPU的连接,图7.3.3 AT89C52与8255的3总线连接,(1)数据总线DB引脚,8255的数据总线DB有8根
25、:D0D7。因为AT89C52用其P0口作为数据总线口,所以AT89C52的P0.0P0.7与8255的D0D7进行连接。,(2)地址总线AB引脚,8255的地址线AB有两根:A0A1。A0、A1通过74HC373锁存器与AT89C52的P0.0、P0.1连接。A1A0取0011值,可选择A、B、C口与控制寄存器,选择方法如下: A1A0=00:选择A口。 A1A0=01:选择B口。 A1A0=10:选择C口。 A1A0=11:选择控制寄存器。,(3)控制总线CB 片选信号CS:由P2.5P2.7经138译码器Y7产生。若要选中8255,则Y7必须有效,即为低电平,此时P2.7P2.6P2.5
26、=111。由此可推知各口地址如下: A口:111xx00=E000H(当xx=00时)。 B口:111xx01=E001H(当xx=00时)。 C口:111xx10=E002H(当xx=00时)。 控制口: 111xx11=E003H(当xx=00时)。 其中,xx表示取值可任意,以各口地址不唯一。为了今后叙述方便,后面程序中8255的地址将全部使用E000HE003H。 注意:此处要说明的是单片机与8255的连接方法是多种多样的,8255各口地址也随连接方式而变化。因此,读者在使用不同单片机系统时,8255的各口地址不会是上面所推导的E000HE003H,(3)控制总线CB, 读信号:825
27、5的读信号与AT89C52的相连。 写信号:8255的写信号与AT89C52的相连。 复位信号RST:8255的复位信号RST与AT89C52的RST相连。,(4)3个通道引脚, A口的8个引脚PA0PA7与外设连接,用于8位数据的输入与输出。 B口的8个引脚PB0PB7与外设连接,用于8位数据的输入与输出。 C口的8个引脚PC0PC7与外设连接,用于8位数据的输入与输出或通信线。,38255的工作方式,*补充:8255A的工作方式,8255A的工作方式,3种工作方式,方式0,方式1,方式2,1.方式0 基本输入/输出方式,可供使用的是两个8位口(A口和B口)及两个4位口(C口高位部分和低位部
28、分)。,4个口可以是输入和输出的任何组合,适用于无条件数据传送,也可以把C口的某一位作为状 态位,实现查询方式的数据传送,在方式0下,4个口可以有16种输入/输出组合,分别为: A输入B输入C高位输入C低位输入 A输入B输入C高位输入C低位输出 A输入B输出C高位输出C低位输出 A输出B输出C高位输出C低位输出,2.方式1 选通输入/输出方式,A口和B口是数据口, C口是控制口,用于传送和保存数据口所需要的联络信号,方式1是选通输入/输出方式,选通是通过信号的问与答,以联络方式(或称握手方式) 实现的。方式1适用于以查询或中断方式进行控制。,A口和B口的联络信号都是3个,因此: 如果A或B只有
29、一个口按方式1使用,需占用11位(8+3=11)口线,则剩下的另外13位口线仍可按方式0使用。,如果两个口都按方式1使用,则还剩下2位口线,这两位口线仍然可以进行位状态的输入输出。,方式1适用于查询或中断方式的数据输入/输出,3. 方式2 双向数据传送方式,只有A口才能选择这种工作方式,这时A口既能输入 数据又能输出数据,方式2需使用C口的5位口线作控制线,适用于查询或中 断方式的双向数据传送。,如果把A口置于方式2下,则B口只能工作于方式0,两种命令,工作方式命令,C口位置位/复位命令,1、工作方式命令,用于确定各数据口的工作方式及数据传送方向,48255初始化, A口有三种工作方式B口只有
30、两种工作方式, 在方式1或方式2下,对C口的定义不影响作为联络线使用的C口各位功能, 最高位( )是标志位,其状态固定为“1”,用于表明本字节是工作方式命令,例7.3.1 按照图7.3.4中8255与AT89C52的连接图对8255初始化编程。 A、B、C口均为基本I/O输出方式。 A口与上C口为基本I/O输出方式,B口与下C口为基本I/O输入方式。 A口为应答I/O输入方式,B口为应答I/O输出方式。,3、初始化编程,8255A初始化的内容就是向控制字寄存器写入工作方式命令和C口位置位/复位命令。工作方式字应输入控制寄存器,按上面的连接方式,控制寄存器的地址为E003H。, A、B、C口均为
31、基本I/O输出方式,解:8255的初始化程序为: (1)#include #include #define COM8255 XBYTE0xe003/ 定义8255控制寄存器地址 #define uchar unsigned char void init8255(void) COM8255=0x80; /*工作方式选择字送入8255控制寄存器,设置A、B、C口均为基本I/O输出方式 */ , A口与上C口为基本I/O输出方式,B口与下C口为基本I/O输入方式。,#include #define COM8255 0xe003 /*定义8255控制寄存器地址 */ void init8255(voi
32、d) XBYTE COM8255=0x83; /*工作方式选择字送入8255 控制寄存器,设置A、C口为 基本I/O输出方式,B、C 口为基本I/O输入方式*/ , A口为应答I/O输入方式,B口为应答I/O输出方式。,uchar xdata COM8255 _at_ 0xe003; /*定义8255控制寄存器地址*/ void init8255(void) COM8255=0xb4; /*工作方式选择字送入8255控制寄存 器,设置A、B、C口为基本I/O输出 方式 */,2、C口位置位/复位命令,C口用来定义控制信号和状态信号,C口的每一位都可以 进行置位或复位。, D7是该控制字的标志,
33、其状态固定为0, 每次只能对C口中的一位进行置位或复位,5. 8255应用举例,例7.3.2 按照图7.3.3中8255与AT89C52的连接图,用8255C口的PC3引脚向外输出连续的正方波信号,频率为1000Hz。,#include #include #define PA8255 XBYTE0xe000 /* 定义8255A口地址 */ #define PB8255 XBYTE0xe001 /* 定义8255B口地址 */ #define PC8255 XBYTE0xe002 /* 定义8255C口地址 */ #define COM8255 XBYTE0xe003 /* 定义8255控制寄存器地址 */ #define uchar unsigned char extern void delay_500us(); /*外部函数,延迟0.5ms*/ void init8255(void) COM8255=0x80; /*工作方式选择字送入8255控制寄存器, 设置A、B、C口为基本I/O输出方式 */ void main(void) for(;) COM8255=0x07; /*PC3置1*/ delay_500us(); /*延时0.5ms*/ COM8255=0x06; /*PC3清0*/ delay_500us(); /*延时0.5ms*/ ,