单片机存储空间区
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机存储空间区分
单片机自身带有 4 KB ROM程序存储器,128 B RAM 数据存储器。
程序存储器:
单片机有16位的地址总线即可寻址空间为64KB(216=210x26=64KB 0x0000~0xFFFF)
内部数据存储器:
单片机有256 B的内部数据存储器:128 B(0x00~0x7F)为内部随机存储器;128 B(0x80~0xFF)的特殊功能寄存器SFR(分散到各个功能部件中,并没有统一到一个 128B的存储器中,所以这128B寄存器物理上不存在 ,除了定义的特殊寄存器地址外, 其他地址不能使用)。
外部扩展RAM 指外部0x0000~0xFFFF,外部扩展RAM 通常是内置于单 片机内部的,所以xdata的数据存放于单片机内部的外部扩展RAM,这里的外 部扩展RAM是相对于内部RAM来说,而不是相对于单片机来说的。
单片机存储空间区分
• Code
此关键字用于将数据存放于片外ROM区 0000H~FFFFH,程序区 (ROM)的数据在程序运行时不能改变的,所以code 用于存放占用空间较 大,不需改变的数据。同理data存放于数据区。
静态全局变量:在静态存储区分配空间,作用于局部(只在定义该变量 的源文件内有效 )
单片机存储空间区分
void B() { Int a,b;
}
• {
void A()
Int a,b; B(); }
单片机存储空间区分
Code 中实际ห้องสมุดไป่ตู้子
void Key_ScanKeypad(void) {
BYTE keypadStatus=0; static BYTE keypadStatus2=0; static BYTE key_debounce_count=0;
• BANK
分组代码区:code banking技术最大可扩展 访问32x64 KB 。每段代码空 间(每个bank)中必须留出一段公用代码区域,用于存放一直需要访问的函 数和数据常量,例如中断,切换bank相关部分。在编译时,Keil C51 将公用 程序复制到每个代码的公用代码区域中。
单片机存储空间区分
单片机存储空间区分
单片机存储空间区分
数据缓存器
位寻址区
4组工作寄存器区
单片机存储空间区分
SP
单片机存储空间区分
• 内部数据存储器RAM
全局变量:在静态存储区分配空间,作用于全局 局部变量(auto):在堆栈里分配空间,作用于局部 静态(static)局部变量:在静态存储区分配空间,作用于局部(只在定 义该变量的函数内有效 )
• Idata
• 固定指向单片机内部存储器256 RAM中0x00~0xFF,前128B与data完全 相同只是访问的方式不同 00H~FFH ( IDATA)=00H~7FH (DATA)+ 80H~FFH ( IDATA)
单片机存储空间区分
• Pdata
外部扩展RAM的低256 B
• Xdata
片外扩展 RAM
P2口寻址
数据指针寻址
256B 页面
64KB
慢
慢
5.Code
片内/外 ROM
数据指针寻址
64KB
慢
6. BANK0 ~ BANK31
单片机存储空间区分
• data
固定指向单片机内部存储器128B RAM中0x00~0x7F,速度最快生成的 代码最小,由于受到空间大小的限制,一般存放局部变量,因为局部变量的空 间是可以覆盖的(某个函数的局部变量占用的空间在退出该函数时就被释放 了,由别的函数的局部变量覆盖)。 ★Keil c里遇到未调用的函数,编译器就将其认为可能是中断函数,函数 里面的局部变量占用的空间就不释放,同全局变量一样处理。
if(CheckeDownKeyStatus()) { }
}
单片机存储空间区分
内存区间参数表
关键字 物理空间 片内RAM 片内扩展 RAM 寻址方式 直接寻址 寄存器间接寻 址 寻址范围 片内128B 片内256B 运行速度 快 中
1.Data 2.Idata
3.Pdata
4.Xdata
片外扩展 RAM