- 打卡等级:以坛为家I
- 打卡总天数:358
- 最近打卡:2025-05-09 06:12:04
高级会员
- 积分
- 861
|
本帖最后由 newlined 于 2024-9-11 10:11 编辑
对32G手册的第10章(存储器)一直没有学的透彻,在这里开一学习笔记贴,边学边记。我一直以为单片机,地址非常重要。如果有理解不对的地方,还请大家指出,谢谢。
1:32G 系列单片机提供 24 位寻址空间,最多能够访问 16M 的存储器(8M 数据存储器+8M 程序存储器), 地址从00:0000H到7F:FFFFH是数据存储区,占用8M;80:0000H到FF:FFFFH是程序存储区,占用8M。
2: 其中数据存储区又分为2部分,edata占用00:0000H-00:FFFF 共64K,xdata占用01:0000H-7F:FFFFH 共8M-64K
3:edata区域在C语言代码中使用“edata”关键字声明变量, xdata区域在C语言代码中使用“xdata”关键字声明变量。
在汇编语言中:edata区域
edata区域可以分为00H-1FH:寄存器组(R0~R7),可以通过RS0,RS1选择
20H~7FH: 直接寻址(也可以间接访问)(都可以位寻址)
80H~FFH: 间接寻址,例如要访问80H 通过以下语句 MOV R0,#80H;MOV A,@R0 ;那么80H的内容就到了A
直接寻址,例如要访问80H 通过以下语句 MOV R0,EDATA 80H
100H~0FFFH 间接访问, MOV WR0, #WORD0 100H; MOV R11,@WR0
MOV DPTR ,#100H; MOV A @DPTR;
MOV WR0,@WR4(目标操作数为字寄存器)
100H~0FFFH 直接访问, MOV R0,EDATA 100H;(目标操作数为字节寄存器);
堆栈访问,就是把堆栈设定在100H~0FFFH时 比如 STACK EQU 100H; MOV SPX,#STACK;
PUSH SPX ; POP SPX
xdata区域:
以上办法中比较难的部分由liuzongguang老师和zxcv1973老师提供,非常感谢
希望大家集思广益,看看有多少种访问edata和xdata区域的方法。
|
|