8051 FLASH架构

8051 架构最容易卡的点:不同存储器是互相独立的地址空间,地址编号可以重复,靠指令区分访问哪一块,不是像 ARM 那样单一地址总线。

汇编指令决定走哪条总线,地址数字重复完全没关系,硬件上分开。 举例子: 8bit 地址 0x10 和 16bit 地址 0x0010,不是同一个地方。

2. EEPROM 00H~7FH 和 data RAM 00H~7FH 重叠?

EEPROM 根本不走 MOV/MOVX 总线! 它不属于 RAM 地址空间,是独立的 IAP 存储域。 想要读 EEPROM,是写特定 SFR 寄存器、触发 IAP 操作,MOV 指令永远访问不到 EEPROM。 所以它的 00~7FH 只是 EEPROM 自己内部的编号,和 RAM 地址无关。

极简对照表

表格

存储区域 地址范围 访问指令 / 方式 C51 修饰符 空间类型
data RAM 00H~7FH MOV direct data 片内快速 RAM
idata RAM 00H~0FFH MOV @R0/@R1 idata 片内 RAM
XRAM(图标注:外部 RAM) 0000H~02FFH MOVX @DPTR xdata 片上 XRAM(768 字节)
EEPROM 00H~7FH IAP 寄存器读写 无,不能直接指针访问 非易失存储,掉电保存参数
Program Flash 0000H~3FFFH MOVC code 程序代码区

一句话比喻

MOV 是1 号通道 ,房间号 00~FF

MOVX 是2 号通道 ,房间号 0000~02FF

IAP 是3 号独立通道 ,房间号 00~7FH 通道完全分开,就算房间编号一样,也不是同一个房间。

工程上最容易踩的坑

❌ 错误想法:(unsigned char xdata *)0x00 读 EEPROM ✅ 真相:这个写法走 MOVX,读到的是XRAM 的 0x0000 地址,不是 EEPROM! EEPROM 必须调用厂商给的 IAP 读写函数。

  1. ✅ data/idata RAM(右侧,00H~7FH / 80H~0FFH) 指令:MOV

  2. ✅ 片内 XRAM(图上叫外部 RAM:0000H ~ 02FFH,xdata) 指令:MOVX @DPTR

  3. ✅ EEPROM(左侧,00

    1. XRAM:0000H~02FFH 和 data RAM:00H~7FH 数字重叠?

    看着数字都有00、7F,但是指令不一样,访问的是两套硬件

  4. MOV 0x00, A → 访问【data RAM 00H】(8bit 短地址,00~FF)

  5. MOVX DPTR=#0x0000, MOVX A,@DPTR → 访问【XRAM 0000H】(16bit 地址,0000~02FF)

相关推荐
普通人619 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
猫猫不是喵喵.1 天前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
fish_zzzz5 天前
笔记-论数据结构2
1024程序员节
普通人66 天前
PHP文件读写完全指南
开发语言·php·1024程序员节
Martina_03216 天前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
星云_byto7 天前
CSS布局
人工智能·机器学习·目标跟踪·1024程序员节
张小姐的猫9 天前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
工业HMI实战笔记10 天前
印刷电路板HMI:SMT贴装的元件定位界面
制造·设计规范·设计语言·1024程序员节
Martina_032111 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
橙光成长11 天前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节