2016-11-17 17:24:50 yezheui 阅读数 3716
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2677 人正在学习 去看看 张先凤

                                                                                                        8051单片机存储器扩展

        以AT89C51为例,内部只有128B的RAM和4KB的ROM。当存储空间不够用时,需要扩展51单片机的存储器。

        51单片机有3条访问存储器指令,MOV访问内部RAM,MOVX访问外部RAM,MOVC读取ROM区代码。也就是8051有3类独自的寻址空间,共用16位的地址总线和8位的数据总线,最大寻址64KB。

       常见的EPROM有2732(4K*8bit),2764(8K*8bit),27264(32K*8bit)等。以2764为例,有13位地址线(A0-A12)。

       常见的SRAM有6264(8k*8bit),62265(32k*8bit)。74138为3/8译码器,74139为2/4译码器,74373位8位锁存起。

       首先在扩展时,P0口既传送地址又要传输数据(分时复用),需要外接74373(51的ALE)。P2口传送高8位地址。相关的控制总线有PSEN,WR,RD,需要将这3个控制总线和对应的存储器引脚连接。

       常用的扩展方法有①线选法和②片选法。以扩展3个2764为例。2764为8KB(8K*8bit)ROM芯片,有13位地址线。

      ①线选法:P0口接2764的低8位地址线(A0~A7),P2.0 ~ P2.4接高5位地址线(A8~A12)。将3个2764编号U1~U3。 P2.5~P2.7 分别这3个存储器的片选(CS)引脚。此时,U1对应的地址范围是2000H~3FFFH,U2对应的范围是 4000H~5FFFH,U3的地址范围是8000H~9FFFH。编程时,外部的ROM地址不连续。

      ②片选法:P0口分时复用。P2.0~P2.4接高5位地址线。P2.5~P2.6接74139的A0、A1段,Y0~Y2接3个存储器的片选引脚。 此时,U1对应的地址空间是0000H~1FFFH,U2对应的地址空间是2000H~3FFFH,U3对应的地址空间是4000H~5FFFH。 编程时,外部的ROM地址空间连续。 扩展外部RAM时,亦可采用上述2种方法。



注:ALE(30脚) Address Latch Enable,地址锁存使能,该引脚提供一个ALE地址允许信号(由正向负跳变,负跳沿),将低8位地址信息锁存到片外的地址锁存器中。  

      !PSEN(29脚) Program Storage ENable,外部程序存储器读选通信号,低电平有效。


2016年11月17日 星期四

FH

2018-05-17 21:57:36 zy010101 阅读数 1598
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2677 人正在学习 去看看 张先凤

        在51单片机中,连接外部存储器使用的是三总线的方式,即:数据总线,地址总线,控制总线。51单片机的P0口在有外部存储器的设计之中,一般充当数据总线和低8位的地址总线。所以我们必须解决P0的复用问题。51提供了ALE信号,ALE地址锁存信号的下降沿来临时,地址总线的数据被锁存。

        外扩的数据存储器和外扩的I/O口是统一编址的。必须记住。

        PSEN信号是外部ROM的读选通信号。一般接到存储器的OE端。

        EA信号:EA = 0,只访问外部程序存储器,EA = 1,从内部ROM开始访问,当访问完内部ROM后,转去访问外部ROM。

        


       常用的ROM芯片:

 Ai:地址线

 Di:数据线

 CE:片选信号

 OE:选通信号线,与PSEN相连

 PGM:编程脉冲端

 VPP:编程电压端





2015-12-24 21:52:19 ls667 阅读数 3039
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2677 人正在学习 去看看 张先凤

存储器分为程序存储器(ROM)和数据存储器(RAM),两种又都可以分为片内和片外,片外即需要自己在单片机外部扩展。

8051单片机的片内程序存储器有4K,片内数据存储器有256个字节,其中又分为高128字节位特殊功能寄存器区,真正用户能用的RAM只有低128字节。

8052单片机有8K片内程序存储器,而数据存储器除了低128字节外还有扩展的高128字节,地址上跟特殊功能寄存器一样,但物理上是独立的,寻址方式不一样,扩展的高128字节只能间接寻址。


Keil中变量的存储类型:

存储类型

说明

code

程序空间(无需改变的变量)

data

直接访问的内部数据存储器(速度最快)

idata

间接访问的内部数据存储器(可以访问全部256字节RAM)

bdata

可位寻址的内部数据存储器

xdata

外部数据寄存器(最大64K)

pdata

分页的外部数据寄存器(最大256字节,少用)

【如无使用关键字,系统则按默认处理(根据存储模式)】

Keil中的存储模式:

存储模式

说明

Small

变量默认为data型,最大128字节

Compare

变量默认为pdata型,最大256字节

Large

变量默认为xdata型,最大64K

Keil中设置如下图:



我们平常使用的STC单片机,有很多型号,具体存储器大小都要看型号:


【89/90系列的机器周期需要12个或6个时钟周期】


【12/15系列的机器周期只需要1个时钟周期】


51单片机上的FFT算法

最近用增强型51单片机做了一个简易的点阵音乐频谱显示器,最主要是自己刚学完信号处理课程,想自己写一个FFT算法。现将已经能够在51单片机上运行的FFT算法供需要的伙伴们参考。

在51单片机上运行FFT算法,需要注意一下几点:

由于51单片机的内存RAM很小,只有128字节,52有256字节,而16点的浮点数输入,就需要2*4*16=128字节的内存开销,所以只有256字节的做多只能做16点的FFT运算。而且必须要用idata定义才能将其定义在高128字节。所以要做16点以上的FFT运算,必须选用有内部扩展RAM的51系列单片机,然后用xdata定义,并且要将存储模式设为LARGE模式。


2013-04-19 17:39:38 i792439187 阅读数 3643
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2677 人正在学习 去看看 张先凤

在单片机的扩展中,要分别考虑程序存储器及数据存储器的扩展。

存储器是单片机系统中使用最多的外扩芯片,对80C51系列单片机而言,由于程序存储器与数据存储器的空间在物理空间上的各自独立性,使得两者的扩展方法略有不同。在本节中,介绍目前常用的EPROM(Electrically Programmable Read-Only Memory)、EEPROM(Electrically Erasable Programmable Read-Only Memory)等存储器的扩展方法。

    程序存储器用来存放编制好的始终保留的固定程序和表格常数。程序存储器以程序计数器PC作为地址指针,通过16位地址总线,可寻址的地址空间为64KB。

    在 80C51/87C51/89C51片内,分别内置最低地址空间的4KB ROM/EPROM程序存储器(内部程序存储器),而在8031片内,则没有内部程序存储器,必须外部扩展EPROM。80C51系列单片机中64KB 内、外程序存储器的地址是统一编排的。8031单片机没有内部程序存储器,地址从0000H~FFFFH都是外部程序存储空间。8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 应始终接地,对于内部有ROM的单片机(5l、52系列),该引脚接高电平,使程序从内部ROM开始执行。当PC值超出内部ROM的容量时,会自动转向外部程序存储器空间。外部程序存储器地址空间为1000H~FFFFH,访问程序存储器使用MOVC指令。

      目前典型的EPROM芯片为27系列产品:

型号               容量                型号            容量

27C16            2K×8位               27C128        16K×8位

27C32            4K×8位               27C256        32K×8位

27C64                           8K×8位                                   27C512                     64K×8位

.2.2 EPROM程序存储器扩展实例

图8-1为扩展8KB×8的程序存储器27C64与单片机的连接电路。该电路也称为8031的最小系统。要通过对这个系统的分析,掌握存储器扩展电路的连接与单片机外部程序存储器操作时序的关系,即单片机的数据总线D0~D7、地址总线A0~A15和控制信号 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 、 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 、ALE与外扩EPROM、74LS373的信号连接关系以及74LS373在电路中的作用。

    图中74LS373是带三态输出的8D锁存器,三态控制接地。G端与8031的ALE连接,每当ALE下跳变时,74LS373锁存低8位地址信号,并输出供系统使用。

    27C64是8KB×8位EPROM器件,有13根地址线A0~A12输入,它能区分13位二进制地址信息。这13根地址线分别与8031的P2口和 P2.0~P2.4连接,当8031系统发出 13位地址信息时,分别选中27C64片内8KB存储器中的各单元。

    数据线的连接:存储器的8位数据线D0~D7接P0口(P0.0~P0.7)。单片机规定指令码和数据都由P0口读入,数位对应相连即可。

    27C64的引脚为片选信号输入端,低电平有效,表示选中该27C64芯片。该片选信号决定了27C64这块芯片的8KB存储器在整个8031扩展程序存储器64KB空间中的位置。该系统中只有一片27C64,现将 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 接地,表示常有效。根据上述电路接法,27C64占有的扩展程序存储器空间为0000H~1FFFH地址空间。

    控制线的连接:

    8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 (外部程序存储器取指信号)接 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 (存储器读信号)。

    ALE地址锁存允许信号,通常接至地址锁存器锁存信号。

    8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 (单片机内/外程序存储器选择信号)当采用8031、8032时,而应接地。

    此外,27C64的 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 和Vpp端及 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 端可组合成27C64的各种工作方式(读、待机、写即编程、校对等),图中的方式处于读和待机两种状态。当 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 选通信号为低电平,选通27C64,即读27C64中的程序或常数,当 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客选通信号为高电平,即无效,则27C64处于低功耗待机状态。

8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客

 

<>扩展实例

电改写EEPROM芯片既可像RAM一样修改其存储单元中的内容,又可像ROM一样在断电后保持存储单元中程序与数据内容不变,因而电改写EEPROM在各种场合得到广泛应用。下面以Intel公司生产的EEPROM2864A芯片为例介绍电改写EEPROM。

2864A是电擦除可编程的只读存储器芯片。单一+5V供电,最大工作电流为160mA,维 持电流为60mA。读出时间最大为250ns,写入时间约为16ms,由此可见2864A的读写速度是较慢的。由于片内设有编程所需高压脉冲电路,因而无 需外加编程电压与写入脉冲即可工作。2864A的容量为8K×8位,因此该芯片有8根数据线与13根地址线。

2864A的读操作与普通EPROM的读出相同,所不同的是可以在线进行字节的写入。2864A在写一个字节的指令或数据之前,自动将要写入单元进行擦除,因而无需专门的擦除操作。可见使用2864A就如同使用RAM一样方便。

当向2864A发出字节写命令后,2864A便锁存地址、数据及控制信号,从而启动一次写操作。2864A的写入时间约为16m左右,在此期间,2864A的 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 信号处于低电平0状态,表示目前正在进行写入数据的操作。其数据线处于高阻状态与总线断开,禁止CPU在此期间写入新的数据,但允许CPU执行其它操作。一旦一次字节写入操作完毕,2864A便将 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 信号升为高电平1,用此信号通知CPU可以写入新的数据。此时,CPU可对2864A进行新字节的读写操作。

(1)数据线的连接

8031的P0.0~P0.7与2864A的IO0~IO7直接连接。

(2)地址线的连接

8031的P0.0~P0.7经过74LS373锁存器与2864A地址线的低8位A0~A7连接。8031的P2.0~P2.4与2864A地址线的高5位A8~A12直接连接。

(3)控制线的连接

2864A的片选信号 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 与8031的P2.7连接,读信号 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 由8031的 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 、 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 相与后产生,如图8-2所示。这种连接可使2864A既作为程序存储器使用,又作为数据存储器使用。8264A的忙闲信号 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 与8031的P1.0连接,用于判断是否开始新字节的写入操作。若将 8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客 信号线与8031的中断线INT1连接,则可通过中断方式查询2864A的忙闲状态,有关中断的知识在第7章中介绍。

8.2 程序存储器扩展 - 碧空雄鹰 - 碧空雄鹰的博客

本文转载自newhua《51单片机程序存储器扩展 》

2016-11-06 15:13:59 u013451157 阅读数 2737
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2677 人正在学习 去看看 张先凤

       存储器扩展分为ROM的扩展、RAM的扩展。它们的扩展能力为:①ROM可扩展至64KB;②RAM可扩展至64KB。

       单片机的扩展能力是由地址总线来决定的。

       单片机的扩展问题,就是将各扩展部件采用适当的方法“挂”在总线上,但单片机与通用微型计算机不同,由于受引脚控制,MCS-51单片机本身没有提供专用的地址线和数据线,地址线和数据线是复用的,而且是借助I/O线经过改造而成的。因此,单片机存储器的扩展过程中使用的外部总线有以下3种。

       1)地址总线(AB):P0口(A0~A7),P2口(A8~A159);地址总线是一种单向的总线。地址总线的根数决定了单片机可以访问的存储单元数量和I/O端口的数量。有n根线,则可以产生2n个地址编码,访问2n个地址单元。

       2)数据总线(DB):P0口(D0~D7);在51单片机中,数据的传递是用8根线同时进行的,也就是51单片机的数据总线的宽度是8位,这8根线就被称之为数据总线。数据总线是双向的,既可以由单片机传到外部芯片,也可以由外部芯片传入单片机。

       3)控制总线(CB):这是一组控制信号线,有一些是由单片机送出(去控制其他芯片)的,而有一些则是由其他芯片送出(由单片机接收以确认这些芯片的工作状态等)的。



1、地址锁存器的使用

       单片机用P2口作为片外存储器地址高8位输出口,用P0口作为地址低8位的输出口,并分时兼做数据传输线。由于数据总线、地址总线共用P0口,所以要分时复用。先送地址信息,由ALE使能锁存器将地址信息锁存在外设的地址端,然后送数据信息和读写使能信号,在指定的地址进行读写操作。

       用作单片机地址锁存器的芯片一般有两类:一类是8D触发器,如74LS273、74LS377等;另一类是8位触发器,如74LS373、8282等。74LS273、74LS377内部由8个边沿触发的D触发器组成,在时钟信号的正跳变完成输入信号的锁存。因此用74LS273、74LS377作为外接触发器时,应将ALE反向后再加到它们的时钟端。而74LS373和8282的内部结构和用法相似,但引脚不一致。74LS373的使能端G有效时,输出直接跟随输入变化,当使能端由高变低时,才将输入状态锁存,直到下一次使能信号变高为止。因此在选用74LS373或8282作单片机地址锁存器时,可直接将单片机的ALE加到它们的使能端。这两种芯片带有三态输出功能,但用作地址锁存时,无需三态功能,因此,它们的输出控制端OC或OE可以直接接地。

2、存储空间冲突问题

       由于MCS-51单片机在访问外部的数据存储器和程序存储器时使用了不同指令的控制信号,ROM和RAM可以同时使用0000H~FFFFH地址段而不会冲突,因此MCS-51单片机的片外的扩展能力是外部数据存储器和外部程序存储器各64K。

       访问片外RAM时使用专门的指令MOVX,这时读(RD)或写(WR)信号有效;而访问片内RAM使用MOV指令,不产生读写信号;另外,与片内RAM不同,片外RAM不能进行堆栈操作。



程序存储器的扩展

1、ROM芯片及引脚

以27C512为例对EPROM的引脚做介绍。其中:

CE:片选信号端,低电平有效;

OE:读选通(输出允许)信号输入线,低电平有效;

Vpp :编程电源输入端;

Vcc:工作电源输入端,一般为+5V;

PGM:编程脉冲输入端;9

2、扩展电路

       P2口虽然没有全部用完(还有P2.7),但是这个引脚一般不能再作为通用I/O口来使用了,可以悬空。通过锁存器74LS373进行数据和地址总线的分离,分离后的低8位地址线接到EPROM的A0~A7引脚,P2口与EPROM的高8位地址线A8~A14相连。EPROM的OE引脚接到单片机的PSEN引脚。MCS-51单片机的PSEN引脚是专门用作程序存储器扩展的,在MCS-51单片机从外部程序存储器中取指令的时候,PSEN引脚会产生由高电平变为低电平的变化,允许EPROM进行数据的输出,而在不存取EPROM中的数据时,PSEN引脚是高电平,EPROM的输出引脚全部处于“高阻”(相当于从电路中断开)的状态,不会干扰其他芯片使用总线。


数据存储器的扩展

1)地址线的连接,与程序存储器连法相同

2)数据线的连接,与程序存储器连法相同

3)控制线的连接,主要有下列控制信号:

       存储器输出信号OE和单片机读信号RD相连,即和P3.7相连

       存储器写信号WE和单片机写信号WR相连,即和P3.6相连

       ALE:其连接方法与程序存储器相同


       所谓锁存器,就是输出端的状态不会随输入端的状态变化而变化,仅在有锁存信号时输入的状态才被保存到输出,直到下一个锁存信号到来时才改变。还有些芯片具有锁存器,比如芯片74LS244,它可以通过把一个引脚置高后,输出就会保持现有的状态,直到把该引脚清0后才能继续变化。

锁存器的主要作用:

1、缓存

2、完成高速的控制器与慢速的外设的不同步问题

3、解决驱动的问题(提供的电流比51IO口输出电流大)

4、解决一个I/O口既能输出也能输入的问题(可以用锁存器幂叠加方法,即锁存器的Q端再接锁存器,实现IO口的无限拓展)

       如果单片机的总线接口只作一种用途,不需要接锁存器;如果单片机的总线接口要作两种用途,就要用到锁存器。例如:一个I/O口要控制两个LED,对第一个LED送数据时,“打开”第一个锁存器而“锁住”第二个锁存器,使第二个LED上的数据不变。对第二个LED送数据时,“打开”第二个锁存器而“锁住”第一个锁存器,使第一个LED上的数据不变。如果单片机的一个口要做三种用途,则可用三个锁存器,操作过程相似。就这一种用法而言,可以把锁存器视为单片机的I/O口的扩展器。

存储器扩展

阅读数 1701

51单片机存储结构

阅读数 2365

没有更多推荐了,返回首页