前边介绍单片机资源的时候,我们提到过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 来访问了。
关键字:51单片机 RAM 区域
引用地址:
如何对51单片机RAM不同的区域进行划分
推荐阅读最新更新时间:2024-11-09 12:01
欧盟通过新规 2025年区域内高速公路普及快速电动汽车充电器
欧洲理事会过了新规定,旨在为电动汽车车主在欧洲旅行提供更多便利,同时帮助减少有害温室气体的排放。新规定将在三个方面使电动汽车和货车车主受益: 它通过扩大欧洲主要公路沿线的电动汽车充电基础设施来减少对续航里程的焦虑,使"加油"付款变得更容易 ...
[新能源]
51单片机之74HC138译码器控制数码管进行100s计数
/** I use a timer in my code to control the time I use 138decoder int the hardware **/ #include reg51.h #define uint unsigned int #define uchar unsigned char sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; uchar code tab_1 ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar tab_2 ; uchar counter=0,tim
[单片机]
51单片机小白零基础教程——点亮第一个小灯以及流水灯
一、LED灯电路图分析 (1)LED灯的描述 LED灯:LED全称为发光二级管,可以将电能转换为光能,可以将电信号转为光信号的发光器件。 此图片中LED1-LED8为单片机开发板上的0603型号的贴片LED灯。 此图片为LED灯在电路图中的符号,要想导通LED就必须给二极管正向流过工作电流,LED的基本工作特性为正向导通,反向截止。 (2)LED灯在电路图中的分析 J9:跳线帽,只有合上跳线帽,2引脚和1引脚才相通,拔掉J9,5V的电压只能在2引脚,到不了1引脚。 RL6、RL7:限流电阻,防止流过LED灯的电流太大,而导致LED灯的烧毁。 我们从图中可以发现LED灯的阳极连接在一起,这种接法被称为共阳极接
[单片机]
基于51单片机的简易时钟设计
功能: 1、使用 单片机 内部定时器实现时分秒计时 2、能够设置闹钟时间 3、闹钟时间到,蜂鸣器响 4、使用LCD1602显示时间 部分程序: #include reg51.h #include lcd1602.h #define uchar unsigned char #define uint unsigned int sbit beep=P3^2;//蜂鸣器 sbit k1=P1^0;//按钮 sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3; sbit k5=P1^4; sbit k6=P1^5; sbit k7=P1^6; sbit k8=P1^7; uchar shi=11,fen=5
[单片机]
C51单片机的IO口介绍(下)
上一篇文章我们对C51的IO简单的介绍了一下,现在我们来简单了解C51的IO的结构 这里我们学习一下比较常见的单片机的IO模式,分别是准双向,开漏输出和推挽输出 (这里要提一嘴,我们用的STC88C52RC是没有推挽输出功能的,STC公司后续推出的一些机型才有推挽输出功能) 接下来我们来看看这几种模式 1.准双向 看看下面的原理图,机内信号通过一个非门取反后送入一个MOS管,MOS管负责控制这个IO的高低电平,配合内部上拉电阻完成高低电平的输出 为了方便我们分析,我们把这个MOS管看成一只NPN三极管。区别是三极管靠电流导通,MOS管靠电压导通 结合前面我们讲过的知识,对于一只NPN三极管,基极b电压比集电极c电压
[单片机]
C51单片机interrupt和using的使用
8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM;独立的 64K 字节可寻址数据和代码区。中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务 处理程序。中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量。8051的中断向量表如下: 中断源 中断向量 上电复位 0000H 外部中断0 0003H 定时器0 溢出 000BH 外部中断1 001
[单片机]
美光车规级内存和存储解决方案配套理想L9
全球汽车内存领先供应商Micron Technology Inc.(美光科技股份有限公司)近日宣布,其车规级高性能LPDDR5 DRAM内存和基于3D TLC NAND技术的UFS 3.1产品已被应用于理想汽车最新推出的全尺寸智能旗舰SUV车型——理想L9。美光LPDDR5和UFS 3.1解决方案可助力理想L9的高级驾驶辅助系统(ADAS)实现最高L4级自动驾驶。得益于美光完整的产品组合,理想L9智能座舱系统还集成了美光车规级LPDDR4和UFS 2.1技术,为用户提供出色的娱乐和用户界面体验。此外,理想L9跨域控制单元还搭载了美光的NOR闪存和eMMC技术,以确保整体系统的稳健性,并缩短系统启动时间。 理想L9全尺寸智
[汽车电子]
基于51单片机的呼出异味气体检测仪设计方案
本设计由STC89C52单片机电路+LCD1602液晶显示电路+MQ-2甲烷传感器模块电路+MQ-3酒精传感器模块电路+MQ-9 CO传感器电路+A/D采样PCF8591电路+蜂鸣器报警电路+LED指示灯电路+按键电路+蓝牙模块电路+电源电路组成。 1、LCD1602液晶实时显示当前的甲烷浓度、酒精浓度和CO浓度。 2、如果甲烷浓度或酒精浓度或CO浓度超过设定的阈值,则蜂鸣器报警,否则蜂鸣器不报警。 3、如果甲烷浓度超过设定的阈值,则红灯亮,否则红灯灭。 4、如果酒精浓度超过设定的阈值,则绿灯亮,否则绿灯灭。 5、如果甲CO浓度超过设定的阈值,则黄灯亮,否则黄灯灭。 6、可以通过按键设置煤气浓度、酒精浓度和CO浓度的阈值。
[单片机]