ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

51单片机 idata pdata xdata

2022-08-24 12:04:42  阅读:248  来源: 互联网

标签:idata 字节 RAM 51 单片机 寻址 寄存器 128 堆栈


1 内部RAM

 

内部RAM共256个字节,分为两个部分,低128字节和高128字节,低128字节是传统51单片机的地址,既可以直接寻址也可以间接寻址,高128位是在8052中扩展的,这部分RAM和特殊功能寄存器使用相同的逻辑地址(80H到FFH),但是在物理上是独立的,在使用时通过不同的寻址方式加以区分,高128字节的RAM只能间接寻址,特殊功能寄存器只能直接寻址

低128字节的RAM成为通用RAM区,通用 RAM 区又可分为工作寄存器组区,可位寻址区,用户 RAM区和堆栈区。工作寄存器组区地址从 00H~1FH 共 32 字节单元,分为 4 组,每一组称为一个寄存器组,每组包含 8 个 8 位的工作寄存器,编号均为 R0 ~ R7,但属于不同的物理空间。通过使用工作寄存器组,可以提高运算速度。 R0~R7 是常用的寄存器,提供 4 组是因为 1 组往往不够用。程序状态字 PSW 寄存器中的 RS1 和RS0 组合决定当前使用的工作寄存器组。

可位寻址区的地址从 20H ~ 2FH 共 16 个字节单元。 20H~2FH 单元既可像普通 RAM 单元一样按字节存取,也可以对单元中的任何一位单独存取,共 128 位,所对应的逻辑位地址范围是 00H~7FH。位地址范围是00H~7FH,内部 RAM 低 128 字节的地址也是 00H~7FH,从外表看,二者地址是一样的,实际上二者具有本质的区别;位地址指向的是一个位,而字节地址指向的是一个字节单元,在程序中使用不同的指令区分。

内部 RAM 中的 30H~FFH 单元是用户 RAM 和堆栈区。一个 8 位的堆栈指针(SP),用于指向堆栈区。单片机复位后,堆栈指针 SP 为 07H,指向了工作寄存器组 0 中的 R7,因此,用户初始化程序都应对 SP 设置初值,一般设置在 80H 以后的单元为宜。堆栈指针是一个 8 位专用寄存器。它指示出堆栈顶部在内部 RAM 块中的位置。系统复位后, SP 初始化位 07H,使得堆栈事实上由 08H 单元开始,考虑 08H~1FH 单元分别属于工作寄存器组 1~3,若在程序设计中用到这些区,则最好把 SP 值改变为 80H 或更大的值为宜。 STC8 系列单片机的堆栈是向上生长的,即将数据压入堆栈后, SP 内容增大。

在Keil编程中,高128字节使用许增加 idata 关键字进行间接寻址

直接寻址,表示访问特殊功能寄存器
MOV 0x90, #0x00
间接寻址,表示访问高128字节的RAM
MOV R0, #0x90H,
MOV @R0, #0x00
当一个变量增加idata时,将会生成间接寻址的汇编代码

2 外部RAM

外部RAM在Kernel中使用xdata表示,其中pdata表示xdata的低256个字节 C 语言中定义变量为 pdata 类型后,编译器会自动将变量分配在xdata的 0000H~00FFH 区域,并使用 MOVX @Ri, A 和 MOVX A, @Ri 进行访问,默认情况下xdata使用DPTR进行访问

如这个声明,假如i的地址为0x19,则 xdata int i = 0 生成如下汇编
MOV DPTR,#0x0019
CLR A
MOVX @DPTR, A

如这个声明,假如j的地址为0x19,则 pdata int j = 0 生成如下汇编 MOV R0, #0x19 CLR A MOVX @R0, A

变量在各个RAM区域中使用的指令不一样,导致性能不一样,根据机器码的长度我们大致可以知道,xdata > pdata > idata > data(默认)

 

标签:idata,字节,RAM,51,单片机,寻址,寄存器,128,堆栈
来源: https://www.cnblogs.com/sudochen/p/16619348.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有