Policy Information
昨天下午把MCS-51系列单片机的硬件结构,包括51单片机的基本结构、51单片机的引脚描述、51单片机的中央处理器(CPU)等部分给梳理了一下,但昨天时间不太够加上我想单独的整理一下存储器结构这部分昨天就没整,来了今天就把存储器结构给整明明白白。
关系: 一般微机通常是程序和数据共用一个存储空间,即ROM和RAM统一编址,属于“冯 诺依曼”结构。而单片机的存储器结构则把存储空间和数据存储空间严格区分开来,即程序存储器ROM和数据存储器RAM分开编址,属于“哈佛”结构。
用途:
程序存储器ROM用于固化程序,常数和数据表。
数据存储器RAM用于存放程序运行中产生的各种数据并用于堆栈。
51单片机存储器结构如图所示:
储存空间的划分:
(1)51单片机存储器在物理结构上分成四个空间:片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器。(2)逻辑考虑,则有三个存储空间:片内外统一编址的64KB程序存储器地址空间(0000H ~FFFFH)、256B的片内数据存储器地址空间(00H ~FFH)及片外数据存储器地址空间(0000H ~FFFFH)。
CPU访问指令:
CPU在访问三个不同的逻辑空间时,通过采用不同形式的指令,来产生相应的存储器选通信号,访问程序存储器使用MOVC指令、访问片内数据存储器使用MOV指令、访问片外数据存储器使用MOVX指令。
它用于存放编好的程序、常数或表格。在正常工作时只可读不可写,掉电后数据不丢失。
(1)片内具有4KB的Flash结构的电可擦除只读存储器。
(2)外部可扩展64KB的ROM,建议不用,只有当程序特别大、内部空间无法满足要求时才选择扩展外部ROM。
(3)程序内存最低端的地址可以在片内Flash中或在外部ROM中,可以通过单片机/EA的引脚的电平来选择。
例如:在带有4KB片内Flash的51单片机中,如果把/EA引脚接到VCC,当地址为0000H~0FFFH,则访问内部Flash;地址为1000H ~FFFFH时,将自动转向外部程序内存。
如果/EA端接地,则只访问外部程序内存,不管是否存在内部Flash内存。
(1)每个ROM单元(Byte)对应一个唯一的16bit的地址编码(Address)
(2)CPU要到某个ROM单元去取指令,是通过把地址编码写入16位的程序计数器PC来实现的,因此AT89系列单片机地址的编码范围(通常称为寻址范围)为:
(3)系统复位后,PC的初始值为0000H,以后的取值是CPU根据用户程序的运行流程自动装载的(程序顺序执行时,PC值自动加1;执行转移指令、子程序调用和中断服务程序时,PC值分别等于转移的目标地址,子程序或中断服务程序的入口地址)
程序内存的某些单元是保留给系统使用的,这几个单元的配置如图所示:单片机复位后,程序计数器PC的内容为0000H,所以CPU总是从0000H单元开始执行程序。
从地址0003H开始,系统每隔8个单元为6个中断服务子程序分配有一个固定的入口地址。
如外部中断0的入口地址为0003H;
定时器0的入口地址为000BH;
外部中断1的入口地址为0013H;
定时器的入口地址为001B;以此类推
中断响应后,程序指针PC将自动根据中断类型指向这些入口地址的某一个,CPU就从这里开始执行中断服务子程序。
因此从0003H单元开始的这段区域应该保留给中断使用,所以程序设计时在000H~0002H单元放值一条转移指令,跳过这段区域,直接转到系统主程序,除非系统不使用中断,主程序才可以覆盖这段区域。
片内数据存储器地址范围是00H~FFH,只有256B,这里仅介绍低128字节区,高128字节区被特殊功能寄存器占有。
低128字节区主要分为三个区域:工作寄存器组区、位寻址区、用户RAM区。
单片机的片内数据存储器结构如图所示:
最低32个单元(地址为00H~1FH)为4个通用工作寄存器组。每个寄存器组含有8个8位寄存器,编号为R0 ~R7。
程序状态字PSW中的2位RS0、RS1用来确定当前采用哪一个工作寄存器组,对应关系昨天单片机的硬件结构整理的有专有图表。
在某一时刻只能选用其中的一组寄存器工作,系统复位后,指向工作寄存器组0.如果用户程序不需要4个工作寄存器区,则不用工作寄存器单元可以作一般的RAM使用
内部RAM区中的20H~2FH单元(16B)可供位寻址,这16个单元共有128位,每位均可直接寻址,其位地址范围为00H ~7FH,具体情况见下表:
两种寻址方式:
1、位地址形式,即00H~7FH
2、单元地址(20H~2FH).位数方式 表示,即20H.0 ~20H.7
30H~7FH共有80个字节单元,为字节寻址的内部RAM区,可供用户作为数据存储区。
堆栈: 按先进先出或后进先出原则进行读/写的特殊RAM区域。51单片机的堆栈区是不固定的,原则上可设置在内部RAM的任意区域内,实际根据片内RAM各功能区的使用情况确定,避开工作寄存区、位寻址区、用户实际使用数据区,一般在2FH地址单元以后的区域。
堆栈作用: 主要用在子程序调试或中断处理过程中,用于保护断点和现场,实现子程序或中断的多级嵌套处理。还可以保护其他一些重要信息。也可作为数据交换区使用。
确定堆栈的位置: 栈顶的位置由专门设置的堆栈指针SP指出。
内部RAM的高128字节区是给特殊寄存器使用的,也称为专用寄存器区,单元地址位为80H~FFH。寄存器的功能已专门规定,也称为专用寄存器或特殊功能寄存器,简称SFR。51单片机SFR总数为26个,占80H ~0FFH中很小一部分,是单片机内的指挥单元。
51系列单片机内I/O锁存器、定时器、串行口数据缓冲区以及各种控制寄存器和状态寄存器都以特殊功能寄存器的形式出现。他们离散地分布在80H~0FFH的地址空间范围内,具体如下表所示:
图中列出了所有特殊功能寄存器及其地址和初始值。
SFR的使用方法如下:
1)除了SFR之外剩余的空闲单元,用户不得使用。读这些地址,一般将得到一个随机数据,写入的数据将会无效。
2)必须使用直接寻址方式对SFR进行访问,可使用寄存器名称(是它的符号地址)或地址。例如:
0EOH——累加器的地址
ACC——累加器名称
3)具有位地址和位名称的SFR才可以进行位寻址,位地址有以下4种表示形式:
①直接使用位地址表示:0D7H——PSW最高位的位地址
②使用位名称表示:CY——PSW最高位的名称
③使用SFR字节地址和位形式表示:0D7H.7——PSW字节地址.最高位
④使用SFR名称和位形式表示:PSW.7——PSW名称.最高位
片外数据存储器的P0端口作为RAM的地址/数据总线,当外部地址空间小于FFH时,只需P0口作为地址总线即可,P2口可作为一般的I/O口使用。
当外部地址空间大于FFH时,则由P2端口传送高8位地址。对片外数据存储器的访问,使用MOVX的间接寻址指令,以区别对内部RAM(片内用MOV)的访问,同时自动产生读/写控制信号RD和WR。
片外RAM做通用RAM使用,主要存放大量采集的或接收的数据、运算的中间数据、最后结构和堆栈数据等。
1)地址总线(AB)。地址总线的宽度是16位,因此可以寻址的范围是64KB。采用分时复用技术,可以对外部64KB的数据存储器或程序存储器直接寻址。它由P0口提供16位地址总线的低8位(A0~A7),由P2口提供地址总线的高8位(A8 ~A15)
2)数据总线(DB)。数据总线的宽度是8位,它由P0口提供
3)控制总线(CB)。控制总线由P3口的第二功能(RXD、TXD、INT0、INT1、T0、T1、RD、WR)和4根独立的控制线(RST、EA、ALE、PSEN)组成
程序存储器通过16位程序计数器寻址,寻址能力为64KB,可使指令能在64KB空间内任意跳转。51单片机ROM的地址范围为0000H~0FFFH。
1)片内RAM
①工作寄存区:51单片机的前32个单元(地址00H~1FH)称为寄存器区。通过对特殊功能寄存器PSW中RS1、RS0两位的编程设置,可选择任一寄存器组为工作寄存器组。
②位寻址区:字节地址20H到2FH称为位地址区,共16B,计128位,每位都有相应的位地址,位地址范围00H~7FH。
③便笺j(ian)区:30H~7FH,便笺区共有80个RAM单元,用于存放用户数据或作堆栈区使用。51单片机对便笺区中每个RAM单元是按字节存取的。
④特殊功能寄存器(26个):51单片机片内高128B RAM中,有26个特殊功能寄存器(SFR),他们离散地分布在80H~FFH地RAM空间中。访问特殊功能寄存器只允许使用直接寻址方式。特殊功能寄存器见下表:
2)片外RAM
51单片机构成的应用系统当片内RAM不够用时,可在片外部扩充数据存储器。51单片机给用户提供了可寻址64KB(0000H~FFFFH)的外部扩充RAM的能力,扩充RAM的多少,根据用户实际需要来定。
哇,终于给写完了,这部分的知识真的是太琐碎了,从存储器总体结构概述说起,还有51单片机程序存储器ROM,又包括51单片机程序存储器管理和51单片机程序存储器的分配。
再到片内数据存储器,工作寄存器区,位寻址区,用户RAM区,特殊功能寄存器等
还有片外数据存储器和地址空间这些知识学起来简单,但真正学完让我去用,我觉得还有很长的路,不管了,就当是回忆簿等忘记了再来找吧/(ㄒoㄒ)/~~。继续加油!
评论