第六章 MCS-51单片机总线系统与I/O口扩展
6.1单片机扩展总线概述 6.2 MCS-51单片机I/O口扩展及编址技术 6.3 MCS-51存储器扩展技术 6.1.1 片外总线扩展结构 6.1.2 三总线扩展的方法 6.1.3 AT89C××系列单片机的片内存储容量 6.2 MCS-51单片机I/O口扩展及编址技术 6.2.1 单片机I/O口扩展 6.2.2 89C51单片机总线扩展的编址技术 6.3 MCS-51存储器扩展技术 6.3.1 89C51单片机的数据存储器扩展 6.3.2 89C51单片机的程序存储器扩展
6.1.1 片外总线扩展结构 总线:连接系统中主机与各扩展部件的一组公共信号线。
传送数据,双向,CPU的位数和外部数据总线的位数一致。而数据可能是指令代码、状态量或控制量,也可能是真正的数据。 1、数据总线(DB): 传送数据,双向,CPU的位数和外部数据总线的位数一致。而数据可能是指令代码、状态量或控制量,也可能是真正的数据。 2、地址总线(AB): 传送CPU发出的地址信息,单向,宽度(线数目)决定了CPU的可寻址范围。 例如:2根地址线,可寻址22=4个字节单元; 16根地址线,可寻址216=64K字节单元; 3、控制总线(CB): 传送使微机协调工作的定时、控制信号,双向,但对于每一条具体的控制线,都有固定的功能。控制线数目受芯片引脚数量的限制。 8位微机的 DB总是8位, AB总是16位, 而CB的数目则随机型不同而不同。
6.1.2 三总线扩展的方法 1.P0口作为数据总线和低8位地址线 2.以P2口作为高8位地址线 3.地址、数据分离电路 ALE 信号就是 MCS-51 单片机提供的专用于数据/地址分离的一个引脚。
6.1.3 AT89Cxx片内存储容量 AT89C2051 2 -- 128 15 Device Flash (Kbytes) EEPROM RAM (Bytes) I/O Pins AT89C2051 2 -- 128 15 AT89C4051 4 AT89C5115 16 512 20 AT89C51AC2 32 1280 34 AT89C51ID2 64 2048 AT89C51RB2 AT89C51RC AT89C51RC2 AT89C51RD2 AT89C51RE2 AT89C55WD 256
6.2 单片机I/O口扩展及编制技术 51系列单片机内部有4个双向的并行I/O端口P0~P3,共占32根引脚。 P0口的每一位可以驱动8个TTL负载,P1~P3口的负载能力为3个TTL负载。 在无片外存储器扩展的系统中,这4个端口都可以作为准双向通用I/O口使用。
6.2.1 单片机I/O口扩展 MCS-51单片机的I/O端口通常需要扩充,以便和更多的外设(例如显示器、键盘)进行连接。 简单的I/O口扩展,通常是采用TTL或CMOS电路锁存器、三态门等作为扩展芯片,通过P0口来实现扩展的一种方案。它具有电路简单、成本低、配置灵活的特点。 实际中可使用74LS244、74LS245等芯片作为并行输入口进行扩展,使用74LS273、74LS377等芯片作为并行输出口进行扩展。
6.2.1 单片机I/O口扩展 74LS244为8同相三态缓冲/驱动器
6.2.1 单片机I/O口扩展 74LS273为8D三态同相触发器
6.2.1 单片机I/O口扩展 图6-3为采用74LS244作为扩展输入、74LS273作为扩展输出的简单I/O口扩展。
6.2.1 单片机I/O口扩展 P2.0决定了74LS244的地址为: ×××× ×××0 ×××× ××××B 其中“×”代表任意电平。由于地址线中有无关位,且无关位可组成多种状态,则会出现“地址重叠”问题。所谓“地址重叠”,是指一个扩展芯片占有多个额定地址空间。一般情况下,无关位取“1”。确定了地址以后,就可以读入扩展输入口的内容。程序如下: MOV DPTR,#0FEFFH ;确定扩展芯片地址 MOVX A,@DPTR ;将扩展输入口内容读入累加器A 当与74LS244相连的按键都没有按下时,输入全为1,若按下某键,则所在线输入为0。
6.2.1 单片机I/O口扩展 输出控制信号由P2.0和相“或”后形成。当二者都为0后,74LS273的控制端有效,选通74LS273, P0上的数据锁存到74LS273的输出端,控制发光二极管LED,芯片地址与74LS244的选通地址相同(都是×××× ×××0 ×××× ××××B,通常取为FEFFH)。当某线输出为0时,相应的LED发光。 虽然二个芯片的口地址都为FEFFH,但是由于分别由RD和WR控制,两个信号不可能同时为0(执行输入指令例如MOVX A,@DPTR或MOVX A,@Ri时,有效;执行输出指令例如MOVX @DPTR,A或MOVX @Ri,A时,有效),所以逻辑上二者不会发生冲突。
6.2.1 单片机I/O口扩展 例6-1:参照图6-3,编写程序实现把按钮开关状态通过发光二极管(LED)显示出来。 分析:首先根据电路确定输入/输出扩展芯片的地址; 读入输入口的数据并用此内容控制输出端口(注意要使用MOVX指令)。 循环检测并输出。 汇编语言程序如下: MOV DPTR,# 0FEFFH ;确定扩展输入/输出芯片地址 LOOP: MOVX A,@DPTR ;将扩展输入端口内容读入累加器A MOVX @DPTR,A ;将读入的数据送到扩展输出端口 SJMP LOOP ;循环检测
6.2.1 单片机I/O口扩展 C51语言程序如下: #include <reg51.h> //定义MCS-51的特殊功能寄存器SFR unsigned char xdata addr _at_ 0xFEFF; //定义扩展输入/输出芯片地址 main( ){ unsigned char x; //定义8位数据变量 while(1){ x = addr; //读入扩展输入端口内容 addr = x; //将读入的数据送到扩展输出端口 }
6.2.2 单片机总线扩展的编址技术 线选法 译码法 可供使用的编址方法有两种: 适用于小规模单片机系统的总线扩展。 适用于大容量多芯片存储器扩展。常用译码器来完成译码功能。 常用的译码芯片有: 74LS139(双2-4译码器)和74LS138(3-8译码器)等 。
6.2.2 单片机总线扩展的编址技术 3线-8线译码器74LS138
6.2.2 单片机总线扩展的编址技术 LE Dn Qn L H Qn-1 × Z 地址锁存器74LS373
6.3 MCS-51存储器扩展技术 存储器的主要技术指标: 存储容量 存取速度 可靠性 功耗 工作温度范围 封装形式
6.3.1 89C51单片机的数据存储器扩展 MCS-51系列单片机产品中片内数据存储器容量一般为128~2048个字节。 表6-3 常用SRAM芯片的主要性能 性能型号 容量 (bit) 读写时间 (ns) 额定功耗 (mw) 封装 6116 2K×8 200 DIP24 6264 8K×8 DIP28 62256 32K×8
6.3.1 89C51单片机的数据存储器扩展 例6-2:在单片机应用系统中扩展2K字节静态RAM。 (1)芯片选择 根据题目容量的要求我们选用SRAM 6116,它是一种采用CMOS工艺制成的SRAM,采用单一+5V供电,输入输出电平均与TTL电平兼容,具有低功耗操作方式。当CPU没有选中该芯片时( ),芯片处于低功耗状态,可以减少80%以上的功耗。 6116的管脚如图6-9所示。
6.3.1 89C51单片机的数据存储器扩展 (2)硬件电路 单片机与6116的硬件连接如图6-10所示。
6.3.1 89C51单片机的数据存储器扩展 (3)连线说明 6116与单片机的连线如下: 地址线:A0~A10连接单片机地址总线的A0~A10,即P0.0~P0.7、P2.0、P2.1、P2.2共11根; 数据线:I/O0~I/O7连接单片机的数据线,即P0.0~P0.7; 控制线:片选端 读允许线 写允许线 .
6.3.1 89C51单片机的数据存储器扩展 4)片外RAM地址范围的确定及使用 显然只有P2.7=0,才能够选中该片6116,故其地址范围确定如表6-5所示: .
6.3.1 89C51单片机的数据存储器扩展 如果与6116无关的管脚取0,那么6116的地址范围是0000H—07FFH;如果与6116无关的管脚取1,那么6116的地址范围是7800H—7FFFH。 单片机对片外RAM的读写除了可以使用: MOVX @DPTR,A ;64K字节内写入数据 MOVX A,@DPTR ;64K字节内读取数据 还可以使用以下对低256字节的读写指令: MOVX @Ri,A ;低256字节内写入数据 MOVX A,@Ri ;低256字节内读取数据 C51编写方法: xdata和pdata用于单片机的片外RAM区,这两个区声明变量参见第四章。 xdata 片外数据存储区(64KB); pdata 分页寻址片外数据存储区(256字节)。
6.3.1 89C51单片机的数据存储器扩展 例6-3:扩展8K RAM,地址范围是4000H—5FFFH,并且具有唯一性;其余地址均作为外部I/O扩展地址。 (1)芯片选择 ①静态RAM芯片6264 6264是8K×8位的静态RAM,它采用CMOS 工艺制造,单一+5V供电,额定功耗200mW, 典型读取时间200ns,封装形式为DIP28。 ②3-8译码器74LS138 这里采用全译码方式,6264的存储容量是8K×8位,占用了单片机的13条地址线A0~A12,剩余的3条地址线A13~A15通过74LS138来进行全译码。
6.3.1 89C51单片机的数据存储器扩展 (2)硬件电路 (3)连线说明
6.3.1 89C51单片机的数据存储器扩展 4)片外RAM地址范围的确定及使用 .
6.3.1 89C51单片机的数据存储器扩展 总结: 扩展一片6264 (8K字节),需考虑步骤如下: 确定地址线根数; 已知1KB=1024字节,则1K = 210 8K = 213 。所以需要13根地址线,A0~A12。 确定地址总线AB及其连接; 地址总线 AB:低8位地址A0~A7从P0口输出,由于P0口是复用口,所以需通过74LS373锁存。高8位地址A12~A8直接从P2口输出,其中A12为最高位。 确定数据总线DB及其连接; 数据总线 DB:直接接P0口,即D0~D7。 确定控制总线CB及其连接。 .
6.3.2 89C51单片机的程序存储器扩展 通常扩展的外部程序存储器使用EPROM或E2PROM。 单片机与程序存储器的连接方法和数据存储器连接方法大致相同。 .
6.3.2 89C51单片机的程序存储器扩展 . 89C51单片机扩展程序存储器27C64的连接
6.3.2 89C51单片机的程序存储器扩展 例6-4 采用译码器法扩展2片8KB EPROM,2片8KB RAM。EPROM选用2764,RAM选用6264。共扩展4片芯片,扩展接口电路见图6-13。写出4片存储芯片的地址范围。 .
6.3.2 89C51单片机的程序存储器扩展 图6-13为用74LS138作译码器的扩展存储器接口电路,74LS138的地址线输入端A、B、C分别接P2.5、P2.6、P2.7; 译码状态信号输出端Y0、Y1、Y2、Y3分别接存储芯片IC1、IC2、IC3、IC4的CE端。因此P2.7、P2.6、P2.5的编码分别为000—011时,对应Y0、Y1、Y2、Y3的输出有效。因此各芯片的地址范围见表。 .
6.3.2 89C51单片机的程序存储器扩展 .