51单片机资源扩展:扩展片外RAM
- 格式:docx
- 大小:10.94 KB
- 文档页数:3
c程序#include<reg52.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned intint n,m;void main(){unsigned int i;while(1){for(i=0x0000;i<=0x7fff;i++){XBYTE[i]=n;//写入ram}for(i=0x7fff;i>0x0000;i--){m=XBYTE[i];//读外部存储器}}}62256外部ram芯片相关知识:XBYTE是一个地址指针(可当成一个数组名或数组的首地址),它在文件absacc.h中由系统定义,指向外部RAM(包括I/O口)的0000H单元,XBYTE后面的中括号[ ]0x2000H 是指数组首地址0000H的偏移地址,即用XBYTE[0x2000]可访问偏移地址为0x2000的I/O端口。
这个主要是在用C51的P0,P2口做外部扩展时使用,其中XBYTE [0x0002],P2口对应于地址高位,P0口对应于地址低位。
一般P2口用于控制信号,P0口作为数据通道。
比如:P2.7接WR,P2.6接RD,P2.5接CS,那么就可以确定个外部RAM的一个地址,想往外部RAM的一个地址写一个字节时,地址可以定为XBYTE [0x4000],其中WR,CS为低,RD为高,那就是高位的4,当然其余的可以根据情况自己定,然后通过XBYTE [0x4000] = 57;这赋值语句,就可以把57写到外部RAM的0x4000处了,此地址对应一个字节。
XBYTE 的作用,可以用来定义绝对地址,是P0口和P2口的,其中P2口对应的是高位,P0口对应的是低位如XBYTE[0x1234] = 0x56;则等价于mov dptr,#1234hmov @dptr,#56h谢谢大家。
51单片机的RAM区域划分以及常遇到的问题前几天群里有一位同学使用AT89S51这个单片机编程,遇到了一个情况:keil软件的options for Target的Target选项中,其中的Memory Model选项,同样的程序,如果选择Small模式进行编译,把程序下载到单片机内,程序就工作正常;如果选择Large模式进行编译,下载到单片机内程序就工作不正常,这个就是新手偶尔遇到,但是很难分析出原因的内存使用溢出问题。
51单片机的问题,是历史问题,比较复杂,那现在一般一些新型单片机这种问题就简单一些,但是也得注意关于RAM的溢出问题。
RAM是用来保存临时数据的,一旦我们的使用量超过了RAM的大小或者区域,那就可能造成一些不可预知的错误问题。
51单片机的RAM分为片内和片外,标准的51内核是0x00~0x7F 一共128B,而现在的大多数半导体厂商开发的51系列单片机都带了扩展片内RAM,即片内RAM区域一般是从0x00到0xFF一共256B。
随着功能需求越来越多,程序量越来越大,那片内这256B也不够用了,因此又扩展了片外RAM,片外RAM的预留比较大,最大可以从0x0000到0xFFFF一共64KB,当然了,每个具体型号有多大不一定,具体看通过芯片的手册来了解。
而现在的51单片机的片外RAM,“片外”只是一个名词而已,实际上很多也是直接做到了单片机内部,但是访问地址,还是以外部的起始地址的方式。
就是说,片内RAM的地址从0x00到0xFF,而片外是从0x0000到0xFFFF;其中最开始的256B是重复的地址,这部分通常情况下只要RAM够用就可以不理会,软件编译器会自动给我们处理好。
当选默认small模式,优先使用内部的前128B,而选Large 模式,优先使用的是片外的64K。
因此上面那个同学的问题就在这里了,因为他用的是AT89S51单片机,而这个单片机是没有片外RAM 的,如果选择了Large模式,那优先使用的是片外,因此编译完成,下载到单片机里,程序运行时用了这个单片机所没有的区域,那肯定就不行了。
典型外部ROM和RAM器件的使用实例详解来源:开拓电子()录入: autumn1 实例功能在很多应用场合,51单片机自身的存储器和I/O口资源不能满足系统设计的需要,这时就要进行系统扩展。
在本例中,将结合片外ROM和片外RAM的典型芯片的应用,说明如何扩展单片机的数据存储器和程序存储器。
本例中3个功能模块描述如下:∙单片机系统:扩展单片机的存储器,实现片外存储器的访问。
∙外围电路:分为3个内容。
首先是用地址锁存器完成单片机系统总线的扩展,其次是扩展片外ROM器件2764,第三是扩展片外RAM6264.∙C51程序:用C51完成对片外存储器的读写。
本例目的在于希望keiltop读者在读完本例后,能完成相关的电路设计。
∙器件原理本实例中将首先介绍单片机的三总线概念和形成,随后介绍单片机弦叫线的扩展。
在单片机系统扩展时,引入片外典型存储器件,最后给出典型片外ROM和RAM的电路连接和使用方法。
2.1单片机的三总线(1)什么是单片机的三总线?单片机三总线指数据线、地址线和控制线。
单片机CPU所要处理的就是这3种不同的总线信号。
数据线:数据总线用来传送指令和数据信息。
P0口兼做数据总线DB0~DB7.地址线:用来指定数据存储单元的志趣分配信号线。
在8051系列中,提供了引脚ALE,在ALE为有效高电平,在P0口上输出的是地址信息,A7-A0。
另外,P2口可以用于输出地址高8位的A15~A8,所以对外16位地址总线由P2和P0锁存器构成。
控制线:8051系列中引脚输出控制线,如读写信号线、PSEN、ALE以及输入控制信号线,如EA、TST、T0、T1等构成了外部的控制总线。
(2)如何实现外部总线的扩展?由于单片机的输入输出引脚有限,一般的,我们采用地址锁存器进行单片机系统总线的扩展。
常用的单片机地址锁存器芯片有74LS373,图1-22所示为74LS373的引脚以及它们用作地址锁存器的连接方法。
74LS373是带三态输出的8位锁存器。
实验十二SRAM外部数据存储器扩展实验一、实验目的1.掌握51单片机扩展外部RAM的方法。
2.掌握SRAM62256读写数据的方法。
二、实验说明MCS-51型单片机内有128B的RAM,只能存放少量数据,对一般小型系统和无需存放大量数据的系统已能满足要求。
对于大型应用系统和需要存放大量数据的系统,则需要进行片外扩展RAM。
MCS-51型单片机在片外扩展RAM的地址空间为0000H~FFFFH共64KB。
读写外RAM 时用MOVX指令,用RD选通RAM OE端,用WR选通RAM WE端。
本实验使用SRAM 62256芯片进行片外RAM扩展。
62256具有32KB(256Kbit)空间,因此它需要15位地址(A0~A14)。
62256的全部地址空间为0000H~7FFFH。
62256芯片引脚如图1.4及管脚功能介绍:D0~D7:数据线A0~A7:地址线图1.4 62256芯片引脚WE:写允许,低电平有效OE:读允许,低电平有效CS:片选端,低电平有效三、实验内容本实验示例程序向外部RAM指定地址写入数据,并读出数据验证。
四、实验电路本实验所需电路请参见系统原理图的第一部分和图14-1。
存储器扩展接口。
图1.4 62256芯片引脚五、实验程序参考框图图1.5程序流程框图六、实验步骤1)系统各跳线器处在初始设置状态(参见附录四),将MCU模块的JT12跳线器的C、D、E、F四只短路帽置位下边(2、3短接),G短路帽置位下边(2、3短接)。
J1打在左边,J3打在2,3处(CS7279处),J2的 WE,RD接在左边。
2)在所建的Project文件中添加“62256.ASM”文件,分析、理解程序,编译、下载、运行程序。
观察数码管显示,读写正确则显示‘Good’!七、实验参考程序:见附件:实验指导参考程序。
单片机外部RAM扩展模块MCS-51系列单片机外部RAM为64K,在一些特殊场合下,远不能满足需要,本文就AT89C51讨论MCS-51系列单片机大容量RAM的扩首先介绍128K随机读取RAM HM628128。
HM628128是32脚双列直插式128K静态随机读取RAM,它具有容量大、功耗低、价格便宜、集成度高、速度快、设计和使用方便等特点。
如若在系统中加入掉电保护电路,保护数据有很高的可靠性,可以和EEPROM相媲美。
技术特性:(1)最大存取时间为120ns;(2)典型选通功耗75mW;典型未选通功耗10uW;(3)使用单一5V电源供电;(4)全静态存储器,不需要时钟及时序选通信号;(5)周期时间与存取时间相等;(6)采用三态输出电路,数据输入和输出端公用;图6 HM628128外部引脚(7)所有输入和输出引脚均与TTL电平直接兼容;(8)有两个片选端,适合于低功耗使用,即为了保存信息,用电池作为后备电源。
保存信息的最低电源电压Vcc=2V。
引脚安排及功能表:图6是HM628128的外部引脚排列图,各引脚名称及功用分别如下:A0~A16是17条地址线;I/O0~I/O7是8条双向数据线;CS1是片选1,低电平有效,CS2是片选2,高电平有效;WR是写控制线,当CS1为低电平,CS2为高电平时,WR的上升沿将I/O0~I/O7上的数据写到A0~A16选中的存储单元中;OE是读出允许端,低电平有效。
HM628128的功能表如表3所示。
其中,H表示高电平,L表示低电平,X表示任意状态由于AT89C51直接外部RAM容量为64K,地址线为16条,其中低8位地址和数据分时复用,因此需要外部地址锁存器和ALE锁存信号来锁存低8位地址。
又由于AT89C51的外部数据和外设地址通用,若扩展外设必然占用数据地址。
因此本系统采用P2.7(A15)口来区分数据和外设:当P2.7(A15)口为高电平时,选择外部数据;P2.7(A15)口为低电平时,则为外设。
51单片机扩展外部RAM
今天这个是是以前做过的,没做成,扩展ROM的时候失败了~~不过今天主要的就是扩展外部的RAM,这个相对比较简单点,不想外部的ROM还要设置太多的编译器~~
单片机扩展外部RAM
一、扩展总线
1、简介(这种扩展是基于总线扩展的,所以,P0、P2口就已经不可以再做它用了)
1)数据总线宽度为8位,由P0口提供;
2)地址总线宽度为16位,可寻址范围2的16次,也就是64K。
低8位
A7~A0由P0口经地址锁存器提供,高8位A15~A8由P2口提供。
由于P0口是数据、地址分时复用,所以P0口输出的低8位必须用地址锁存器进行锁存;
3)控制总线由RD、WR、PSEN、ALE和EA等信号组成,用于读/写控制、片外RAM选通、地址锁存控制和片内、片外RAM选择。
地址锁存器一般选用带三态输出缓冲输出的8D锁存器74LS373。
2、片外RAM的操作时序
进行RAM的扩展,其扩展方法较为简单容易,这是由单片机的优良扩展性
能解决的。
单片机的地址总线为16位,扩展的片外RAM的做大容量为
64KB,地址为0000H~FFFFH。
1)由于51单片机采用不同的控制信号指令,尽管RAM和ROM地址是重
叠的,也不会发送混乱。
2)51单片机对片内和片外ROM的访问使用相同的指令,两者的选择是由。
51 单片机片外扩展RAM
一.概述
普通51 单片机可以片外扩展ROM 和RAM 各64K 字节的空间,在实际应用中很少扩展外部ROM,一般都是扩展RAM,因为普通51 单片机的内部RAM 实在太少,只有128-256 字节,处理数据量较大时往往不
够用。
而片外扩展RAM 需要占用P0 口、P2 口和P3.6、P3.7,消耗了18 个IO 口,导致IO 口又不够用。
为了解决以上矛盾,大容量的51 单片机(增强型51 单片机)应运而生,这种单片机一般内置1K-16K 的RAM 和16K-64K 的ROM,价格也相对昂贵。
在某些情况下,用普通51 单片机通过片外扩展RAM 要比直接使用增强型51 单片机更能节约成本。
所以,学习51 单片机片外扩展RAM 是很有必要的。
二.电路设计
在WSF-51DB 开发板上,扩展了32K RAM(HM62256B),地址锁存芯片用74HC573。
如果片外扩展RAM,P0 口作为数据和地址低字节的复用端口,不需要加上拉排阻,当然,加上拉排阻也没有影响。
需要注。
51 单片机资源扩展:扩展片外RAM
上一文中扩展了单片机的程序存储器,4KB 存储空间提升到64KB。
其
实,4K 的代码空间还凑合,但是51 自带的256B 数据存储空间使用起来还
真紧张,其中留给用户的连128B 都不到,所以不得不扩展片外RAM。
扩展RAM 方法和扩展ROM 差不多,都是占用P0/P2 口做地址线,同时P0 用锁
存器74373 分时复用地址和数据信号。
以前扩展RAM 是用汇编语言访问存储器,好处是定位精准,指哪打哪,
坏处就是:程序规模一大就有点难维护了,所以还得改用C 实现。
对应于汇编语言用R1,R0/DPTR 访问外部RAM,keil C 扩展了存储类型,增加了如pdata(等同用movx @Rn 访问方式)/xdata(等同于movx @DPTR 访问方式)存储类型用于访问片外ram。
同时,还提供了绝对地址访问的宏,
如PBYTE/XBYTE,查看定义:
[cpp] view plain copy#define PBYTE((unsigned char volatile pdata*)0);
#define XBYTE((unsigned char volatile xdata*)0);。