STC89C52 单片机内变量、函数参数等数据在RAM中的储存模式: small、compact、large
前边介绍单片机资源的时候,我们提到过 STC89C52 共有 512 字节的 RAM,是用来保存数据的,比如我们定义的变量都是直接存在 RAM 里边的。但是单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。
51 单片机的 RAM 分为两个部分,一块是片内 RAM,一块是片外 RAM。标准 51 的片内 RAM 地址从 0x00H~0x7F 共 128 个字节,而现在我们用的 51 系列的单片机都是带扩展片内 RAM 的,即 RAM 是从 0x00~0xFF 共 256 个字节。片外 RAM 最大可以扩展到 0x0000~0xFFFF 共 64K 字节。这里有一点大家要明白,片内 RAM 和片外 RAM 的地址不是连起来的,片内是从 0x00 开始,片外也是从 0x0000 开始的。还有一点,片内和片外这两个名词来自于早期的 51 单片机,分别指在芯片内部和芯片外部,但现在几乎所有的 51 单片机芯片内部都是集成了片外 RAM 的,而真正的芯片外扩展则很少用到了,虽然它还叫片外 RAM,但实际上它现在也是在单片机芯片内部的,我们的 STC89C52 就是这样。以下是几个 Keil C51 语言中的关键字,代表了 RAM 不同区域的划分,大家先记一下。
data:片内 RAM 从 0x00~0x7F
idata:片内 RAM 从 0x00~0xFF
pdata:片外 RAM 从 0x00~0xFF
xdata:片外 RAM 从 0x0000~0xFFFF
大家可以看出来,data 是 idata 的一部分,pdata 是 xdata 的一部分。为什么还这样去区分呢?因为 RAM 分块的访问方式主要和汇编指令有关,因此这块内容大家了解一下即可,只需要记住如何访问速度更快就行了。
我们定义一个变量 a,可以这样:unsigned char data a=0,而我们前边定义变量时都没有加 data 这个关键字,是因为在 Keil 默认设置下,data 是可以省略的,即什么都不加的时候变量就是定义到 data 区域中的。data 区域 RAM 的访问在汇编语言中用的是直接寻址,执行速度是最快的。如果你定义成 idata,不仅仅可以访问 data 区域,还可以访问 0x80H~0xFF 的范围,但加了 idata 关键字后,访问的时候 51 单片机用的是通用寄存器间接寻址,速度较 data会慢一些,而且我们平时大多数情况下不太希望访问到 0x80H~0xFF,因为这块通常用于中断与函数调用的堆栈,所以在绝大多数情况下,我们使用内部 RAM 的时候,只用 data 就可以了。
对于外部 RAM 来说,使用 pdata 定义的变量存到了外部 RAM 的 0x00~0xFF 的地址范围内,这块地址的访问和 idata 类似,都是用通用寄存器间接寻址,而如果你定义成 xdata,可以访问的范围更广泛,从 0 到 64K 的地址都可以访问到,但是它需要使用 2 个字节寄存器DPTRH 和 DPTRL 来进行间接寻址,速度是最慢的。
我们的 STC89C52 共有 512 字节的 RAM,分为 256 字节的片内 RAM 和 256 字节的片外RAM。一般情况下,我们是使用 data 区域,data 不够用了,我们就用 xdata,如果希望程序执行效率尽量高一点,就使用 pdata 关键字来定义。其它型号有更大的 RAM 的 51 系列单片机,如果要使用更大的 RAM,就必须得用 xdata 来访问了。
关键字:STC89C52 单片机 RAM模式
引用地址:
STC89C52单片机RAM模式
推荐阅读最新更新时间:2024-03-16 16:25
51单片机学习:动态数码管实验
实验名称:动态数码管实验 接线说明: 实验现象:下载程序后“数码管模块”显示01234567 注意事项: ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; #define SMG_A_DP_PORT P0 //使用宏定义数码管段码口 //定义数码管位选信号控制脚 sbit LSA=P2^2; sbit LSB=P2^3; sbit L
[单片机]
单片机开发板的发展及种类的简单介绍
引言 单片机开发板是什么呢?简单来说,它是指集成了许多单片的外围器件,如LED 灯,数码管,按键,行列式按键,步进电机,伺服电机,液晶显示等等用来学习,实验,开发等使用的板子,是一种实验设备(单片机编程)。 单片机开发板是在正式批量生产产品前,对产品进行设计和开发时使用的单片机,当我们对理论知识的学习有了一定的基础,单片机开发板就是我们实践的工具(pIC单片机),通过单片机开发板我们可以做一些实验,从而掌握所学的知识。实际应用中,单片机开发板有以下优势: (1)利用一个单片机开发板就可以编制不同的程序实现各种各样的功能,不用为了一个实验焊一块电路板了. (2)在开单片机发板上设计,调试好程序,就能方便地移植
[单片机]
单片机开发基本技巧
一、 如何提高C语言编程代码的效率 邓宏杰指出,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。他强调:“ 如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。先试验一下每条C语 言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的 时候,使用编译效率最高的语句。” 他指出,各家的C编译器都会有一定的差异,故编译效率也会有所不同,优秀的嵌入式系 统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长5-20%。他说:“ 对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求你对该MCU系统的C语言 和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是
[单片机]
基于单片机的双轴光伏寻日系统设计
能源是促进经济发展和社会进步的原动力,从工业革命以来,人类所使用的主要能源为石化能源,然而其蕴藏量有限,大量的使用会造成全球环境生态和气候产生很大的变化,而太阳能是一种取之不尽、用之不竭并且无污染的清洁能源,随着人类对能源的使用从常规能源向可再生能源转移,太阳能则成为人类理想的替代能源。而目前的太阳能发电效率普遍都不高,所以如何增加太阳能发电系统的发电效率是值得研究的。 使用太阳跟踪技术,使光伏电池板始终面向光强最强的方向,可以很好的提高光伏发电系统的发电效率,据研究表明,具有双轴式光伏寻日跟踪系统的光伏发电系统,其发电效率比固定无跟踪发电系统的效率提高40%左右,文中研究的是基于AT89S52单片机的光伏双轴跟踪系统设计。
[单片机]
基于51单片机的四路抢答器仿真
当主持人按下开始按键后,开始倒计时60秒,选手开始抢答,当有选手抢答后其它选手抢答无效。 并且选手抢答后倒计时停止。 由于我没有设置新一轮按键,如果需要使用新一轮抢答可以加按键开启新一轮抢答 定时器配置代码 #include REGX52.H void Timer0_Init(void) { TMOD &= 0xF0; //配置定时器模式 TMOD |= 0x01; //设置定时器0模式 TL0 = 0x3c; //设置定时初值50ms产生一次中断 TH0 = 0xb0; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计
[单片机]
由80C552单片机构成的轴类零件温度测量系统
一、前言 零件在加工过程中由于受各种热的影响而产生变形, 从而导致原有的加工精度遭到破坏或直接引起加工误差。对于精密加工而言,热变形的影响尤为显着,由此而引起的加工误差约占总加工误差的40%以上。本文给出一种对轴类零件的温度进行较准确测量的系统组成,系统由单片机80C552为控制核心,简单可靠,精度高。同时能计算出在不同温度下轴的热变形量。 二、传感器组成及接口电路 1.传感器组成 传感器采用Pt温度传感器,如图1所示。 图1 Pt温度传感器 这种传感器是由一个直径为30 微米的铂丝绕成的线圈被夹在两层聚酰亚胺箔片之间,通过两条镍带与外界连接,其厚度只有0.3mm厚,易用于曲面的温度
[测试测量]
飞思卡尔推出基于ARM Cortex-M系列的业界速度最快的微控制器
全新的功能完备的Kinetis X系列突破典型MCU的局限,提供更高的性能、更大的内存和同类最佳的开发支持生态系统 2011年11月8日,德州奥斯汀市讯 — 飞思卡尔半导体 [NYSE: FSL)推出新的Kinetis X系列,再次刷新了微控制器(MCU)的性能标准。该系列基于ARM® CortexTM-M内核,是业界速度最快的MCU。 X系列扩展了飞思卡尔Kinetis 32位MCU产品组合的高端部分,该系列的器件集合了出色的性能、丰富的内存和集成外设,并且具备庞大的开发支持生态系统。Kinetis X系列的目标群体是那些需要为其应用程序提供更高处理能力和内存但同时又希望保留MCU的成本效率、易用性和低功耗,而不改用微处理器解
[单片机]
STM32的一些基本知识总结
Cortex-M3缩略语 AMBA:先进单片机总线架构 ADK:AMBA设计套件 AHB:先进高性能总线 AHB-AP:AHB访问端口 APB:先进外设总线 ARM ARM:ARM架构参考手册 ASIC:行业领域专用集成电路 ATB :先进跟踪总线 BE8:字节不变式大端模式 CPI:每条指令的周期数 DAP:调试访问端口 DSP:数字信号处理(器) DWT:数据观察点及跟踪 ETM:嵌入式跟踪宏单元 FPB:闪存地址重载及断点 FSR:fault状态寄存器 HTM:Core Sight AHB跟踪宏单元 ICE:在线仿真器 IDE:集成开发环境 IRQ:中断请求(通常是外中断请求) ISA:指令系统架构 ISR:中断服务例程 I
[单片机]