单片机基础学习(一):存储结构
扫描二维码
随时随地手机看文章
51单片机存储器有数据存储器,程序存储器。数据存储器是为正在运行的程序提供空间,即RAM,程序存储器为程序的存储提供空间,即ROM,刚开始的单片机一旦写入程序就不能修改,后来出现了紫外线擦除(EPROM)、电擦除(EEPROM)和FlashROM。
数据存储器又分片内数据存储器和片外数据存储器,标准的51单片机的片内数据存储器容量是256字节,地址编码00H~FFH,其中高128字节(80H~FFH)是SFR区(特殊功能寄存器),低128字节(00H~7FH)用户数据存储器,在这个128字节中,00H~1FH这32个字节分给了4组工作寄存器(R0~R7),20H~2FH这16字节是位寻址区,30H~7FH这80字节是用户RAM区,可以随意使用。通过51单片机内部的并行扩展总线,51单片机可以访问最多64K范围的外部数据存储器(注:这个说法是有问题的,看后面),由于内部的AB宽度是16位,所以内部数据存储器寻址能力是64K。
程序存储器也分为片内和片外,由于片内外的AB宽度是16位,所以寻址能力都是64K。
但是由于I/O端口和外围设备与数据存储器统一编址,暂用了片外数据存储器的地址空间,所以片外数据存储器寻址范围不足64K。
前面我们分析了存储结构,发现无论是数据存储器和程序存储器,它们片内外的寻址能力都是64K。那他们是如何编址的呢?答案是:统一编址0000H~FFFFH
你是不是感到很疑惑?如何做到的?
首先,片内数据存储器和片外数据存储器,对于同一个地址(假设1111F)CPU是如何区分到那个存储器呢?分析一下指令,如果是MOVX那么是到片外数据存储区,如果是MOV则是到片内数据存储区。
其次,片内数据存储器和片内程序存储器,他们的控制信号不同,访问片内数据存储器信号是Ld等,访问片内程序存储器的控制信号是Emp等。
第三,片内程序存储器和片外程序存储器,同“首先”
第四,片外数据存储器和片外程序存储器,同“其次”
如何扩展呢?
我们知道P0口有时分复用功能,既可以作为8位数据总线又可以作为低8位地址总线,我们使用地址锁存器把8位的数据总线和低8位的地址总线分开,这样P0提供低8位的地址总线和P2提供的高8位总线构成了16位的外部地址总线,P0提供了8位外部数据总线,加上控制总线,这样就形成了三总线结构。所有外围芯片都是通过这三总线进行扩展。
可能有这个疑问:P0口如何时分复用的?
通过内部CB的ALE控制信号,下降沿时将P0口输出的数据作为地址信息储存,此时P0作为低8位地址总线,在其他时刻P0作为8位数据总线。与外界的通信除了少部分通过P1,全部通过P0。
我们稍微了解一下51单片机的时序单位……
晶振提供的频率我们称为振荡频率,假设它的周期为T0,一个T0周期称为一个节拍,用字母P表示,振荡频率经过二分频后我们得到振动频率,它的周期为T1(T1=2T0),一个T1周期称为一个状态,用字母S表示,振荡周期经过6分频我们得到ALE控制信号(注:下面有具体介绍),振荡周期经过4分频我们得到PSEN信号(注:下面有具体分析)。定义12个振荡周期为一个机器周期,那么指令周期是什么?有些指令只需要一个机器周期能执行(确切说是:取指令、译指令、执行指令)完,有些需要几个(不管如何,一般指令周期是机器周期的整数倍,通常情况是1~4倍)。
我们有必要了解一下外部CB, 先介绍ALE控制信号:
ALE:高电平有效,是振荡频率的6分频,利用下降沿来控制地址锁存器锁存低8位地址A0~A7。一个周期两次有效,第一次是S1P2~S2P1,第二次是S4P2~S5P1。
然后介绍一下PSEN控制信号:
PSEN:低电平有效,是振荡频率的4分频,用于访问外部程序存储器。一个周期两次有效,第一次是S1P2~S2P2,第二次是S4P2~S5P2。
我们通过一个实例来理解它,假设我们访问外部程序存储器。
PSEN是和外部存储器的OE端口接的(OE是低电平有效),ALE是接地址锁存器(假设是74HC373)的LE脚(高电平有效)。S1P2时刻,ALE上跳为高电平,74HC373的LE脚有效,74HC373内部8个锁存器打开,到S2P1这个下降沿时刻,P0输出的低8位地址被锁存在锁存器中,此时PSEN仍然为高电平,而P0由原来的低8位地址总线转化为数据总线,等待外部程序存储器输出端的数据输入,直到S2P2这个时刻,PSEN为下降沿,由无效转化为有效,这时P2口的高8位地址和锁存的P0的低8位地址组成16位地址,这个地址就是CPU要访问的外部存储器的地址,从这个地址中找出存储的信息,输出这个信息通过P0这个数据总线到达内部总线,最后到达目的地。
访问外部数据存储器与之类似,不过控制信号不是PSEN,而是WR和RD。
WR、RD:低电平有效,用于访问外部数据存储器的读写控制,当执行MOVX时,这两个信号自动生成。