当前位置: 首页 > news >正文

51单片机——存储类型

主要内容:区分data,bdata,idata,pdata,xdata,code

8051系列单片机存储器结构的特点:ROM和RAM独立编址

8051系列单片机将程序存储器(ROM)和数据存储器(RAM)分开,并有各自的寻址机构和寻址方式。8051系列单片机在物理上有四个存储空间:

  • 片内程序存储器空间        内ROM——51-->4KB        52-->8KB
  • 片外程序存储器空间        外ROM——最大可扩展到64KB
  • 片内数据存储器空间        内RAM——51-->128B        52-->256B
  • 片外数据存储器空间        外RAM——最大可扩展到64KB

关键字存储器类型地址范围与存储空间的对应关系
data内部RAM0x00~0x7F直接寻址片内数据存储区,访问速度快(128字节)
bdata内部RAM0x20~0x2F可位寻址片内数据存储区,允许位与字节混合直接访问(16字节)
idata内部RAM0x00~0xFF间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节)
pdata外部RAM0x00~0xFF分页寻址片外数据存储区(256字节)由 MOVX @R0 间接访问
xdata外部RAM0x00~0xFFFF片外数据存储区(64K),由 MOVX @DPTR 间接访问
code64K  ROM0x0000~0xFFFF代码存储区(64K),由 MOVC @DPTR 指令访问

data:00H~7FH        片内RAM,访问低128字节,地址为00H~7FH的低128字节片内RAM区又可以划分为三个区域:①通用寄存器区②可位寻址区③用户RAM区(堆栈也可以设在这里)

bdata:20H~2FH        16个字节可使用,每个字节的8位可以单独使用,16×8位=128位 可使用

idata:片内RAM,访问高128字节

pdata:片外RAM,0000H~00FFH,访问低256字节,一般不使用

xdata:片外RAM,0000H~FFFFH,可以访问全部区域

code:ROM

pdata用 MOV @Ri,A 写数据        用 MOV A,@Ri 读数据

xdata用 MOV @DPTR,A 写数据        用 MOV A,@DPTR 读数据

0000H~00FFH既可以用pdata也可以用xdata,但是00FFH以上必须用xdata

当使用code存储类型定义数据时,C51编译器会将其定义在代码空间(ROM或EPROM),这里存放着指令代码和其它非易变信息,调试完成的程序代码被写入8051单片机的片内ROM/EPROM或片外EPROM中。在程序执行过程中,不会有信息写入这个区域,因为程序代码是不能进行自我改变的。

当使用xdata存储类型定义常量、变量时,C51编译器会将其定位在外部数据存储空间(片外RAM),该空间位于片外附加的8K,16K,32K或64K RAM芯片中(如一般常用的6264,62256等等)。其最大可寻址范围为64K。在使用外部数据区的信息之前,必须用指令将它们移动到内部数据区中,当数据处理完之后,将结果返回到片外数据存储区。片外数据存储区主要用于存放不常使用的变量,或收集等待处理的数据,或存放要被发往另一台计算机的数据。

pdata存储类型属于xdata类型,它的一字节地址(高8位)被妥善保存在P2口中,用于I/O操作。

idata存储类型可以间接寻址内部数据存储器(可以超过127个字节)。

访问片内数据存储器(data,bdata,idata)比访问片外数据存储器(xdata,pdata)相对要快一些,因此可将经常使用的变量置于片内数据存储器,而将规模较大的,或不常使用的数据置于片外数据存储器中。

C51存储类型及其大小和值域
存储类型长度(bit)长度(byte)值域范围
data810~255        8bit
idata810~255        8bit
pdata810~255        8bit
code1620~65535        16bit
xdata1620~65535        16bit

变量的存储类型定义举例:

char data varl;                             /* item1 */
bit bdata flags;                            /* item2 */
float idata x,y,z;                          /* item3 */
unsigned int pdata dimension;               /* item4 */
unsigned char xdata vector[10][4][4];       /* item5 */

[注释] 

item1:字符变量char varl被定义为data存储类型,C51编译器将把该变量定位在8051片内数据存储区中(地址:00H~0FH)。

item2:位变量flags被定义为bdata存储类型,C51编译器将把该变量定位在8051片内数据存储区(RAM)中的位寻址区(地址:20H~2FH)。

item3:浮点变量x,y,z被定义为idata存储类型,C51编译器将把该变量定位在8051片内数据存储区,并只能用间接寻址的方法进行访问。

item4:无符号整型变量dimension被定义为pdata存储类型,C51将把该变量定位在片外数据存储区(片外RAM),并用操作码MOVX @Ri 访问。

item5:无符号字符三维数组变量unsigned char vcctor[10][4][4]被定义为xdata存储类型,C51编译器将其定位在片外数据存储区(片外RAM)中,并占据10×4×4=160个字节存储空间,用于存放该数组变量。

存储模式及说明
存储模式说明
SMALL参数及局部变量放入可直接寻址的片内存储器(最大128字节,默认存储类型是DATA),因此访问十分方便。另外所有对象,包括栈,都必须嵌入片内RAM。栈长很关键,因为实际栈长依赖于不同函数的嵌套层数。
COMPACT参数及局部变量放入分页片外存储区(最大256字节,默认的存储类型是PDATA),通过寄存器R0和R1(@R0,@R1)间接寻址,栈空间位于8051系统内部数据存储区中。
LARGE参数及局部变量直接放入片外数据存储区(最大64K,默认存储类型为XDATA)使用数据指针DPTR来进行寻址。用此数据指针进行访问效率较低,尤其是对两个或多个字节的变量,这种数据类型的访问机制直接影响代码的长度。另一不方便之处在于这种数据指针不能对称操作。

相关文章:

51单片机——存储类型

主要内容:区分data,bdata,idata,pdata,xdata,code 8051系列单片机存储器结构的特点:ROM和RAM独立编址 8051系列单片机将程序存储器(ROM)和数据存储器(RAM)分开,并有各自的寻址机构和寻址方式。…...

python19-if和match的美

课程:B站大学 记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化 分支语句那些事儿 if 条件判断if...else 判断语句if...elif...else 多重条件分支嵌套也能在 e…...

期权有哪些用处?期权和期货比优势在哪?

期权如同金融市场的“瑞士军刀”,既能防御风险,又能主动出击。相较于期货的“刚性对决”,期权更像“柔性博弈”——通过策略组合在不确定性中捕捉确定性收益。 期权有哪些用处? 期权的核心价值在于其非对称性——买方风险有限&am…...

【html期末作业网页设计】

html期末作业网页设计 作者有话说项目功能介绍 网站结构完整代码网站样图 作者有话说 目前,我们的项目已经搭建了各页面的基本框架,但内容填充还不完善,各页面之间的跳转逻辑也还需要进一步优化。 我们深知,一个好的项目需要不断…...

ComfyUI AnimeDiff动画参数总结

ComfyUI AnimeDiff动画参数总结 一、动画生成核心参数 参数名称建议值/范围作用说明备注步数(Steps)15-25控制AI计算迭代次数,越高细节越精细,但耗时更长推荐20步,显存不足可降至15步CFG值7.0-8.5提示词对画面的控制…...

基于Three.js的多视图3D Tiles同步可视化技术解析

文章目录 基于Three.js的多视图3D Tiles同步可视化技术解析一、技术背景与价值二、核心实现原理2.1 视口分割算法2.2 视角同步机制三、关键代码解析3.1 渲染管线优化3.2 3D Tiles加载四、交互系统实现4.1 多视图事件分发4.2 射线拾取优化五、性能优化方案5.1 渲染性能指标5.2 W…...

7、什么是死锁,如何避免死锁?【高频】

(1)什么是死锁: 死锁 是指在两个或多个进程的执行时,每个进程都持有资源,并都在等待其他进程 释放 它所需的资源,如果此时所有的进程一直占有资源而不释放,就导致了死锁。 死锁只有同时满足 四…...

自动化学习-使用git进行版本管理

目录 一、为什么要学习git 二、git是什么 三、git如何使用 1、git的下载安装和配置 2、git常用的命令 3、gitee远程仓库的使用 (1)注册 (2)创建仓库 (3)配置公钥(建立电脑和git…...

前端大文件上传

一、切片上传技术原理 切片上传是把大文件分割成多个较小的切片,分别上传这些切片,最后在服务器端将它们合并成完整文件。这种方式能有效应对网络不稳定导致的上传失败问题,还可利用多线程并行上传,提升上传效率。 二、前端实现…...

【网络】实现电脑与笔记本电脑之间的直接网络连接

要实现电脑与笔记本电脑之间的直接网络连接,可以通过有线或无线两种方式。以下是详细的步骤指南: 一、有线直连(通过网线) 1. 准备工具 网线:使用交叉网线(适用于旧设备)或普通直连网线&#…...

“深入浅出”系列之音视频开发:(12)使用FFmpeg实现倍速播放:技术细节与优化思路

一、前言 在音视频处理领域,倍速播放是一个常见的需求,尤其是在视频播放器、在线教育平台等场景中,用户常常需要以不同的速度播放视频内容。然而,实现一个高质量的倍速播放功能并不容易,尤其是在处理音频时&#xff0…...

qt作业day2

1:在注册登录的练习里面,追加一个QListWidget 项目列表 要求:点击注册之后,将账号显示到 listWidget上面去 以及,在listWidget中双击某个账号的时候,将该账号删除 .h #ifndef WIDGET_H #define WIDGET_H …...

Qt:day1

一、作业 写1个Widget窗口,窗口里面放1个按钮,按钮随便叫什么; 创建2个Widget对象: Widget w1, w2; w1.show(); w2不管; 要求: 点击 w1.btn,w1隐藏,w2显示; 点击 w2.btn&…...

基于微信小程序的停车场管理系统的设计与实现

第1章 绪论 1.1 课题背景 随着移动互联形式的不断发展,各行各业都在摸索移动互联对本行业的改变,不断的尝试开发出适合于本行业或者本公司的APP。但是这样一来用户的手机上就需要安装各种软件,但是APP作为一个只为某个公司服务的一个软件&a…...

详细Linux基础知识(不断完善)

终端类型分类 1. 物理终端 直接连接到计算机的硬件设备2. 虚拟终端 通过快捷键切换的文本模式界面: Ctrl + Alt + F1 # 登录窗口 Ctrl + Alt + F2 # 当前图形界面 Ctrl + Alt + F3 # 虚拟命令终端 Ctrl + Alt + F4-F6 # 备用虚拟终端3. 图形终端 模拟终端:图形环境中的…...

类和对象-继承-C++

1.定义 面向对象的三大特征之一&#xff0c;为了减少重复的代码 2.语法 class 子类 &#xff1a;继承方式 父类 &#xff08;子类也叫派生类&#xff0c;父类也称为基类&#xff09; 例&#xff1a;class age&#xff1a;public person&#xff1b; #include<iostrea…...

初阶数据结构(C语言实现)——3顺序表和链表(1)

目录 【本节目标】1. 线性表2.顺序表2.1概念及结构2.2 接口实现2.2.0 动态顺序表2.2.1 顺序表初始化SLInit&#xff08;&#xff09;2.2.2 销毁和打印2.2.3 尾插SLPushBack&#xff08;&#xff09;2.2.4 尾删SLPopBack&#xff08;&#xff09;2.2.5 头插2.2.6 头删2.2.7 插入…...

nuxt常用组件库html-validator、@nuxtjs/i18n、@nuxt/image、@unocss/nuxt使用解析

html-validator 主要用于自动验证nuxt服务器呈现的HTML(SSR和SSG)&#xff0c;以检测可能导致水合错误的HTML常见问题&#xff0c;有助于减少水合错误&#xff0c;检测常见的可访问性错误。 安装 npx nuxilatest module add html-validator配置 若自动更新nuxt.config.ts配置文…...

4G工业路由器在公交充电桩中的应用与优势

随着电动公交车的普及&#xff0c;公交充电桩的稳定运行和高效管理是交通营运部门最关心的问题。4G工业路由器凭借其卓越的数据采集和通讯能力&#xff0c;成为实现充电桩智能化管理的关键。 公交充电桩运维管理需求概述&#xff1a; 1.实时性&#xff1a;实时监控充电状态、剩…...

matlab 四维数据可视化(已解决)

虽然这不是传统意义上的“4维可视化”&#xff0c;但你可以通过在三维空间中表示两个维度来间接展示4维数据。例如&#xff0c;你可以使用颜色来表示第四个维度。 clc clear close all% 假设X, Y, Z为你的三维数据&#xff0c;C为第四维数据 X rand(100, 1); Y rand(100, 1);…...

歌曲分类和流行度预测

1. 项目介绍 本项目从kaggle平台上下载了数据集&#xff0c;该数据集包含了3万多首来自Spotify API 的歌曲&#xff0c;共有23个特征。首先对数据集进行预处理&#xff0c;如重复行、缺失值、标准化处理等。再对预处理后的数据进行探索性分析&#xff0c;观察各变量的分布情况&…...

经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑

背景 对于一些内部使用的管理系统来说&#xff0c;可能没有引入Redis&#xff0c;又想基于现有的基础设施处理并发问题&#xff0c;而数据库是每个应用都避不开的基础设施之一&#xff0c;因此分享个我曾经维护过的一个系统中&#xff0c;使用数据库表来实现事务锁的方式。 之…...

oracle decode

1. 基本语法 DECODE(expression, search1, result1, search2, result2, ..., default_result) expression &#xff1a;需要比较的表达式或列。search1, search2, ... &#xff1a;要匹配的值。result1, result2, ... &#xff1a;当 expression 等于 search 时返回的结果。def…...

让后台界面布局更灵活:在GrapesJS中复刻Java的五区式布局

当你想要在可视化编辑器中做一个类似Java BorderLayout 的五区布局&#xff0c;却发现市面上大多只能“简单拼接”而难以自由扩展时&#xff0c;你或许就需要一个更灵活的布局管理器来帮忙。本篇文章就从这个痛点开始&#xff0c;带你一步步揭秘如何用 GrapesJS 自定义并实现一…...

【网络安全 | 漏洞挖掘】分享21个基础漏洞案例

未经许可,不得转载。 文章目录 案例1:绕过500状态码案例2:修改前端实现任意文件上传案例3:Nmap扫描端口命令案例4:绕过限制实现任意文件读取案例5:删除任意目录文件案例6:锁定任意账户案例7:重置任意用户密码案例8:接管任意账户方法一方法二案例9:功能校验机制绕过案…...

期权适合什么类型的投资者交易?

财顺小编本文主要介绍期权适合什么类型的投资者交易&#xff1f;期权适合的投资者类型需结合其风险偏好、投资目标及市场判断能力综合评估。 期权适合什么类型的投资者交易&#xff1f; 1. 风险管理型投资者&#xff08;稳健型&#xff09; 适用场景&#xff1a;持有股票、大…...

浅谈C++/C命名冲突

前言 在这里我会简要地介绍产生命名冲突的原因&#xff0c;和C中处理命名冲突的方法&#xff0c;同时和C语言的解决办法进行比较。 相信你在阅读完之后一定会有收获。对于我们来说&#xff0c;了解编译器的编译链接过程才能更好的理解编译器是如何报错的&#xff0c;更能让我们…...

【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架

【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架 1. 引言 本教程旨在帮助嵌入式开发小白从零开始&#xff0c;学习如何在STM32F407微控制器上实现一个基于串口的数据接收程序。该程序能够通过判断数据头来接收一串数据&#xff0c;并将其存储到缓冲区中…...

C# OnnxRuntime部署DAMO-YOLO香烟检测

目录 说明 效果 模型信息 项目 代码 下载 参考 说明 效果 模型信息 Model Properties ------------------------- --------------------------------------------------------------- Inputs ------------------------- name&#xff1a;input tensor&#xff1a;Floa…...

探索Elasticsearch:索引的CRUD

在企业环境中&#xff0c;Elasticsearch的索引CRUD&#xff08;创建Create、读取Read、更新Update、删除Delete&#xff09;操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要&#xff0c;尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。 目录…...

C++:多态与虚函数

1.虚函数&#xff0c;在函数前加virtual即可。有虚函数时&#xff0c;父类指针指向父类对象时就会使用父类的成员&#xff0c;指向子类对象时就可以使用子类成员&#xff0c;进而我们引入了多态的概念。 2.多态&#xff1a;父类指针指向子类的对象&#xff0c;通过父类指针调用…...

【Python 数据结构 2.时间复杂度和空间复杂度】

Life is a journey —— 25.2.28 一、引例&#xff1a;穷举法 1.单层循环 所谓穷举法&#xff0c;就是我们通常所说的枚举&#xff0c;就是把所有情况都遍历了的意思。 例&#xff1a;给定n&#xff08;n ≤ 1000&#xff09;个元素ai&#xff0c;求其中奇数有多少个 判断一…...

【Qt QML】QML鼠标事件(MouseArea)

QML鼠标事件全面解析 一、MouseArea基础概念 在 QML 中,鼠标事件是处理用户与界面元素交互的重要部分。QML 提供了多种方式来处理鼠标事件,MouseArea 是 QML 中用于处理鼠标事件的核心元素,它可以覆盖在其他元素之上,捕获鼠标操作并触发相应的信号。 1、基本用法 import …...

医脉云枢:中医药典籍知识图谱与非遗传承多维可视化系统

核心优势&#xff1a; "医脉"直击主题&#xff0c;"云枢"体现技术前瞻性 "非遗传承"呼应二十大文化政策 "多维"涵盖3D模型、时间轴、地图等多种可视化形式 技术栈&#xff1a;Vue Flask Element UI ECharts MySQL 同时参考了…...

vue 和 react 底层采用的 diff 算法的区别

Vue 3 和 React 在底层 Diff 算法上的实现确实有一些区别&#xff0c;主要体现在设计理念、性能优化策略以及具体实现方式上。以下是对两者 Diff 算法差异的详细分析&#xff1a; 1. 总体设计理念 Vue 3 的 Diff 算法 Vue 3 的虚拟 DOM Diff 算法基于“双端比较”思想&#xff…...

养老小程序方案详解居家养老小程序系统

养老小程序&#xff0c;上门居家养老小程序&#xff0c;用户端护工端小程序&#xff0c;管理后台。php开发语言&#xff0c;可源码搭建&#xff0c;二次开发或者定制开发。 一 用户端&#xff1a;小程序 核心功能模块&#xff1a;用户完善个人健康档案&#xff0c;在线选择服…...

Tauri跨平台开发问题及解决方案深度解析(React版)

Tauri跨平台开发问题及解决方案深度解析&#xff08;React版&#xff09; 一、环境配置与项目初始化难题&#xff08;React适配&#xff09; 1.1 React项目初始化 推荐模板&#xff1a; # 使用ReactTypeScript模板 npm create tauri-applatest -- --template react-ts# 项目…...

【OMCI实践】omci.lua脚本文件(独家分享)

引言 omci.lua文件是Wireshark的OMCI协议解析插件的核心组件。它配合BinDecHex.lua&#xff0c;可以解析OMCI协议的数据包&#xff0c;提取出消息类型、受管实体标识、受管实体属性等关键信息&#xff0c;并以人类可读的形式显示在Wireshark的解码视图中&#xff0c;方便研发人…...

React高级内容探索

flushSync确保了DOM立即更新 flushSync让你强制React同步刷新提供回调中的任何更新&#xff0c;这确保了DOM立即更新 flushSync是DOM更新之后的&#xff0c;像vue中的nextTick&#xff1a; import { useState,useRef} from "react" import { flushSync} from &quo…...

前端水印实现方式

一、简介 简单来说&#xff0c;前端水印就是在网页或应用程序的前端界面上添加的一种标记&#xff0c;通常是文本、图标或图案等形式。它就像给你的数字内容贴上了一个独特的 “标签”&#xff0c;用于标识内容的归属、防止未经授权的使用和传播。比如&#xff0c;一些在线图片…...

【新手入门】SQL注入之getshell(木马)

木马介绍 木马其实就是一段程序&#xff0c;这个程序运行到目标主机上时&#xff0c;主要可以对目标进行远程控制、盗取信息等功能&#xff0c;一般不会破坏目标主机&#xff0c;当然&#xff0c;这也看黑客是否想要搞破坏。 按照功能分类:远控型、破坏型、流氓软件型、盗取信…...

Git操作指南:分支合并、回退及其他重要操作

在软件开发的协作过程中&#xff0c;Git 作为一款强大的版本控制系统&#xff0c;能帮助开发者高效管理代码的各个版本和分支。本文将详细介绍 Git 中常见的分支合并、取消本地修改、回退操作等&#xff0c;并提供通俗易懂的解释和步骤指南。 一、分支合并 分支合并是 Git 工…...

Vue 3 引入全局状态管理 pinia

什么是全局状态管理? 所有页面全局共享的变量&#xff0c;而不是局限在某一个页面中。适合作为全局状态的数据: 已登录用户信息 (每个页面几乎都要用) Pinia 是一个主流的状态管理库&#xff0c;相比于 Vuex 来说使用更简单&#xff0c;可参考 入门文档 开始 | Pinia 进行引…...

SQL 中为什么参数多了not in 比 in 慢多了,怎么优化

开发工作中&#xff0c;我发现一个现象&#xff0c;比喻下面的两个语句&#xff1a; select * from shangpin where spdm in (1,2,3,...); select * from shangpin where spdm not in (1,2,3,...); 当参数比较少的时候还看不出来什么&#xff0c;但是遇到参数上了几百几千&am…...

[密码学实战]Java生成SM2根证书及用户证书

前言 在国密算法体系中,SM2是基于椭圆曲线密码(ECC)的非对称加密算法,广泛应用于数字证书、签名验签等场景。本文将结合代码实现,详细讲解如何通过Java生成SM2根证书及用户证书,并深入分析其核心原理。 一、证书验证 1.代码运行结果 2.根证书验证 3.用户证书验证 二、…...

API接口:企业名称、注册号、统一社会信用代码、企业类型、成立日期和法定代表人等数据 API 接口使用指南

API接口&#xff1a;企业名称、注册号、统一社会信用代码、企业类型、成立日期和法定代表人等数据 API 接口使用指南 本文详细介绍一种基于 Web 搜索方式实现的企业信息查询接口&#xff0c;适用于数据补全、企业资质验证、信息查询等场景。文章内容涵盖接口功能、请求参数、返…...

版图自动化连接算法开发 00004 ------ 给定一个点,添加一个中间点实现 Manhattan 方式连接两个给定的坐标点

版图自动化连接算法开发 00004 ------ 给定一个点,添加一个中间点实现 Manhattan 方式连接两个给定的坐标点 引言正文引言 必读文章 ------ 版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点。 此处,我们对给定点的坐标进行一下限制,因为是只添加一个点,因…...

医疗行业电脑终端如何防病毒——火绒企业版杀毒软件

医疗物联网技术广泛应用&#xff0c;使得医院网络空间中增加了诸多新型终端设备。这些设备类型多样、型号各异&#xff0c;风险暴露面积大。火绒安全对医疗机构终端安全出现的问题、不足、需求等&#xff0c;提出整体解决方案。 医疗行业终端安全防护痛点 系统老旧 医院、区…...

【入门Web安全之前端学习的侧重点和针对性的建议】

入门Web安全之前端学习的侧重点和针对性的建议 一、HTML&#xff1a;理解攻击载荷的载体二、CSS&#xff1a;次要但需警惕点击劫持三、JavaScript&#xff1a;渗透测试的核心重点四、浏览器工具&#xff1a;渗透测试的实战武器五、学习建议与资源六、总结&#xff1a;渗透测试者…...

2024年中国城市统计年鉴(PDF+excel)

2024年中国城市统计年鉴&#xff08;PDFexcel&#xff09; 说明&#xff1a;包括地级县级市 格式&#xff1a;PDFEXCEL 《中国城市统计年鉴》是一部全面反映中国城市发展状况的官方统计出版物&#xff0c;包括各级城市的详细统计数据。这部年鉴自1985年开始出版&#xff0c;…...