html5如何划分区域,10.4 51单片机 RAM 区域的划分
前边介绍单片机资源的时候,我们提到过 STC89C52 共有512字节的 RAM,是用来保存数据的,比如我们定义的变量都是直接存在 RAM 里边的。但是单片机的这512字节的 RAM 在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。
51单片机的 RAM 分为两个部分,一块是片内 RAM,一块是片外 RAM。标准51的片内 RAM 地址从 0x00H~0x7F 共128个字节,而现在我们用的51系列的单片机都是带扩展片内 RAM 的,即 RAM 是从 0x00~0xFF 共256个字节。片外 RAM 最大可以扩展到 0x0000~0xFFFF 共 64 K 字节。这里有一点大家要明白,片内 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到 64 K 的地址都可以访问到,但是它需要使用2个字节寄存器 DPTRH 和 DPTRL 来进行间接寻址,速度是最慢的。
我们的 STC89C52 共有512字节的 RAM,分为256字节的片内 RAM 和256字节的片外 RAM。一般情况下,我们是使用 data 区域,data 不够用了,我们就用 xdata,如果希望程序执行效率尽量高一点,就使用 pdata 关键字来定义。其它型号有更大的 RAM 的51系列单片机,如果要使用更大的 RAM,就必须得用 xdata 来访问了。
html5如何划分区域,10.4 51单片机 RAM 区域的划分相关推荐
- 最大化使用51的RAM空间
目录 初衷 使用bit定义变量,或"降级"变量的类型 减小缓存的大小 将大型的数组放在外部RAM 真正能用于产品的代码为非阻塞代码,需要做分层和隔离,为此使用了队列结构,另外为了标 ...
- 51单片机的工作寄存器R0~R7位于内部RAM什么位置
转自:https://zhidao.baidu.com/question/1495509806096353459.html 51单片机的工作寄存器一共有32个,为RAM中的00H--1FH单元,分为4 ...
- 10 51单片机汇编:让定时器产生中断(使用Keil模拟器)[系列教程之10]
10 51单片机汇编:让定时器产生中断(使用Keil模拟器)[系列教程之10] 该系列主仓库地址:https://gitee.com/langcai1943/8051-from-boot-to-app ...
- 51单片机ROM和RAM
文章目录 @[TOC](文章目录) 一.51单片机的程序存储器结构 1.内部结构 2.程序存储器的7个特殊地址 二.51单片机的数据存储器 1.片内数据存储器 2.片外数据存储器 提示:以下是本篇文章 ...
- protues仿真扩展51单片机片外RAM的方法
protues仿真扩展51单片机片外RAM的方法 由于protues仿真stc89c52的单片机时,是使用相近的at89c52.而AT89C52只有256B的RAM,并不能储存巨大的变量.所以,需要更 ...
- 10.4.4 51单片机控制系统8个LED“跑马灯”实验
10.4.4 51单片机控制系统8个LED"跑马灯"实验 仿真+代码 方法一 利用数组 #include"reg52.h"#define u8 unsigned ...
- 51单片机外扩RAM,ROM操作。
这是51单片机内置的功能,可以让我们少写很多时序,让代码变的整洁好看. 这里先拓展点小知识:RAM,ROM的区别,地址数据总线,控制总线. 1.RAM是一种掉电会丢失数据的可读可写的存储器.//其实题 ...
- 51单片机+直流电机PWM 10级调速控制
51单片机+直流电机PWM 10级调速控制 Proteus仿真演示 示例程序代码 #include <STC89C5xRC.H> typedef unsigned char u8; typ ...
- 单片机c语言访问片外存储器,教你给51单片机扩展片外RAM
原标题:教你给51单片机扩展片外RAM 上一文中扩展了单片机的程序存储器,4KB存储空间提升到64KB.其实,4K的代码空间还凑合,但是51自带的256B数据存储空间使用起来还真紧张,其中留给用户的连 ...
最新文章
- Face ID 上手体验信息汇总:面部解锁流畅,原理移植AR让人憧憬
- MVC新手教程三:Entity Framework 4.0 来实现MVC的增删改查功能,10分钟搞定
- Vue2.0+vuex+H5实现音乐播放及歌曲切换功能的方法及原理解释
- 最简单的nginx教程 - 如何把一个web应用部署到nginx上
- jconsole查看连接数_在JConsole和VisualVM中查看DiagnosticCommandMBean
- 【转】C++指针详解!!!!
- java string不为空_java如何正确判断String为空
- [转载]Memcached缓存服务的简单安装
- MySQL服务器安装完之后如何调节性能
- volley浅析(磨砺营马剑威Android)
- Linux用scp实现无密码传输文件和目录(使用密钥)
- Mac 用快捷键选取文字,省时省力提高工作效率
- 计算机二级C语言题库(60套真题+刷题软件)2022年9月份新题第二套
- 科学计算机使用的软件,科学计算器软件有哪些?2020好用的科学计算器推荐
- dispatch_group_async
- csapp 大作业 hello的自白
- CDH安装时报错:/opt/cloudera/parcels/.flood/.../CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel does not exist
- RecyclerView让置顶项置顶
- 第7章第24节:双图排版:两张图片的一大一小对比排版 [PowerPoint精美幻灯片实战教程]
- 如何使用Windows File Recovery工具在 Windows 10 上恢复丢失的文件
热门文章
- 分享WCF聊天程序--WCFChat
- linux服务器文件索引inodes满了
- Thinkphp5 分页带参数(亲测)
- git 撤销对工作区中文件的修改
- php轻量级的性能分析工具xhprof的安装使用
- rocketmq 消费者不能调用其他服务_Spring Cloud Alibaba RocketMQ - 构建异步通信的微服务...
- python中数组的维度_Python数组维度问题
- PHP对抗web扫描器的脚本技巧
- android返回后屏幕旋转了,Android recovery 模式下屏幕显示旋转
- 如何在群晖服务器上启用plex远程访问,如何在Synology NAS上更新Plex | MOS86