单片机存储空间区.ppt
单片机存储空间区分,单片机自身带有 4 KB ROM程序存储器,128 B RAM数据存储器。程序存储器:单片机有16位的地址总线即可寻址空间为64KB(216=210 x26=64KB 0 x00000 xFFFF)内部数据存储器:单片机有256 B的内部数据存储器:128 B(0 x000 x7F)为内部随机存储器;128 B(0 x800 xFF)的特殊功能寄存器SFR(分散到各个功能部件中,并没有统一到一个128B的存储器中,所以这128B寄存器物理上不存在,除了定义的特殊寄存器地址外,其他地址不能使用)。,单片机存储空间区分,单片机存储空间区分,数据缓存器,位寻址区,4组工作寄存器区,单片机存储空间区分,SP,单片机存储空间区分,内部数据存储器RAM全局变量:在静态存储区分配空间,作用于全局局部变量(auto):在堆栈里分配空间,作用于局部静态(static)局部变量:在静态存储区分配空间,作用于局部(只在定义该变量的函数内有效)静态全局变量:在静态存储区分配空间,作用于局部(只在定义该变量的源文件内有效),单片机存储空间区分,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;if(CheckeDownKeyStatus(),单片机存储空间区分,内存区间参数表,data 固定指向单片机内部存储器128B RAM中0 x000 x7F,速度最快生成的代码最小,由于受到空间大小的限制,一般存放局部变量,因为局部变量的空间是可以覆盖的(某个函数的局部变量占用的空间在退出该函数时就被释放了,由别的函数的局部变量覆盖)。Keil c里遇到未调用的函数,编译器就将其认为可能是中断函数,函数里面的局部变量占用的空间就不释放,同全局变量一样处理。Idata 固定指向单片机内部存储器256 RAM中0 x000 xFF,前128B与data完全相同只是访问的方式不同00HFFH(IDATA)=00H7FH(DATA)+80HFFH(IDATA),单片机存储空间区分,Pdata 外部扩展RAM的低256 BXdata 外部扩展RAM 指外部0 x00000 xFFFF,外部扩展RAM 通常是内置于单片机内部的,所以xdata的数据存放于单片机内部的外部扩展RAM,这里的外部扩展RAM是相对于内部RAM来说,而不是相对于单片机来说的。,单片机存储空间区分,单片机存储空间区分,Code 此关键字用于将数据存放于片外ROM区 0000HFFFFH,程序区(ROM)的数据在程序运行时不能改变的,所以code 用于存放占用空间较大,不需改变的数据。同理data存放于数据区。BANK 分组代码区:code banking技术最大可扩展 访问32x64 KB。每段代码空间(每个bank)中必须留出一段公用代码区域,用于存放一直需要访问的函数和数据常量,例如中断,切换bank相关部分。在编译时,Keil C51 将公用程序复制到每个代码的公用代码区域中。,单片机存储空间区分,