历史上的今天
今天是:2025年04月02日(星期三)
2021年04月02日 | 8051存储器总结经典
2021-04-02 来源:eefocus
8051单片机有4个存储空间:
1.内部数据存储器(片内RAM)
共128字节,字节地址范围为00H~7FH。
前32个字节00H~1FH为寄存器区,每8个寄存器形成一个寄存器组,共4个寄存器组。
之后的16个字节20H~2FH,共128位,为位地址区,位地址范围为00H~7FH。
最后的80个字节30H~7FH,为通用RAM区。
具体分布如下图所示:
寄存器0组 00H~07H
寄存器1组 08H~0FH
寄存器2组 10H~17H
寄存器3组 18H~1FH
位地址区 20H~2FH
通用RAM区 30H~7FH
2.特殊功能寄存器(片内RAM)
共21字节,分布于80H~FFH中,仅有21个有效的字节地址。
有11个特殊功能寄存器可以进行位寻址,位地址范围也为80H~FFH,但只有83个有效的位地址。
其他无效地址单元是不能被访问的。
3.程序存储器(片内ROM,可外扩)
64KB,字节地址范围0000H~FFFFH,其中片内只有4KB的程序存储器(0000H~0FFFH),如果不能满足要求,可以扩展60KB的片外程序存储器。
程序存储器中的某些地址被固定地用于特定程序的入口地址:
0000H 复位操作后的程序入口
0003H 外部中断0(INT0)服务程序入口
000BH 定时器0中断(T0)服务程序入口
0013H 外部中断1(INT1)服务程序入口
001BH 定时器1中断(T1)服务程序入口
0023H 串行I/O中断(RI/TI)服务程序入口
通常在这些入口地址开始的二、三个字节的地址单元中存放一条转移指令,用于跳转到中断服务程序,如果中断服务程序足够短,或者不会占用到下一个特定程序的入口(比如从001BH开始连续存放,不会占用到0023H地址单元),则不需要用转移指令,直接在入口地址处写中断服务程序。
4.外部数据存储器(片外,通过接口电路与单片机相连)
最大容量可达64KB。
片外RAM与片内RAM的区别:片外RAM不能进行堆栈操作;片内RAM操作时无读写信号产生,片外RAM读写操作时有读写信号(RD*,WR*)产生。
内部数据存储器和特殊功能寄存器统一编址,程序存储器和外部数据存储器均单独编址,因此89C51存储器具有三套独立编址的存储空间。
89C51的堆栈位于片内RAM中,最大空间为128B,向地址增大的方向增长,操作步骤为先加后压、先弹后减。
下一篇:51单片机C中.c文件和.h文件
史海拾趣
|
Bootloader介绍 Bootloader移植的必要性 Bootloader是与系统硬件高度相关的初始化软件,它担负着初始化硬件和引导操作系统的双重责任。一些ARM平台可以共用同一种Bootloader,但是总的说来,每一个特定系统的Bootloader都会有所不同。Bootloader ...… 查看全部问答> |
|
例如以单片机的ROM是有10万次擦写的FLASH,现在该如何能像电脑软件一样能自动升级里面的程序而不用拆下来重新烧 1.假设需要更新的程序是放在一个外接的E2PROM里, 2.怎样让单片机执行RAM里的指令,以便更新ROM区 3.通过执行RAM里的指令读出E2PROM的 ...… 查看全部问答> |
|
我要实现的目标: 1、一个置顶的小窗口TopBar,显示状态; 2、其它窗口类型为Popup,这些窗口不能覆盖顶部窗口TopBar 就这么简单 现在遇到的问题是,TopBar已经用下面这条语句设置置顶窗口了 复制内容到剪贴板代码: ::SetWindowPos( GetSafeH ...… 查看全部问答> |
|
我在使用WINCE5时,在GWES加载到DISPLAY时,总是会有几十秒钟的LCD黑屏才能显示WINCE的界面,我现在想把这个问题解决! 请问:如何能使EXPLORER在gwes之前加载,或者有无更加好的办法!… 查看全部问答> |




