KEILCx51是面向8051系列单片机及其硬件控制系统的开发工具。它定义的任何数据类型必须以一定的存储类型的方式定位在8051的存储区中,否则便没有任何的实际意义。该编译器通过将变量、常量定义成不同的存储类型(data,bdata,idata,pdata,xdata,code)的方法,将他们定位在不同的存储区中。

8051系列单片机将程序存储器(ROM,存储空间)和数据存储器(RAM,运算空间)分开,并有各自的寻址方式(针对汇编语言)。8051系列单片机在物理上有四个存储空间:1,片内程序存储空间;2,片外程序存储空间;3,片内数据存储空间;4,片外数据存储空间。

先讲数据存储器。大家都知道8051单片机数据存储器可划分为两大区域:00H~7FH为片内低128字节RAM区;80H~FFH为特殊功能寄存器区(SFR)。地址为00H~7FH的低128字节片内RAM区又可划分为三个区域:本文引用地址:http://www.eepw.com.cn/article/201611/315545.htm

A,通用寄存器区:地址(00H~1FH)通用寄存器区由4个寄存器组成:0组(00H~07H),1组(08H~0FH),2组(10H~17H),3组(18H~1FH),每个寄存器组含有8个通用寄存器:R0,R1,R2,R3,R4,R5,R6,R7,共有32个通用寄存器。

B,可位寻址区:8051系列单片机RAM的可位寻址区时字节地址位20H~2FH的16字节单元,共128位。

C,用户RAM区:8051系列单片机片内RAM的用户RAM区地址位30H~7FH。堆栈也可以设置在这里。

再讲存储类型,当我们那使用存储类型data,bdata定义常量和变量时,Cx51编译器会将它们定位在片内数据存储区中(片内RAM),不标注默认是DATA类型。当使用code 存储类型定义数据时,Cx51编译器会将其定义在代码空间(ROM或者EPPROM)。当使用 xdata 存储类型定义常量或变量时,Cx51编译器将其定位在外部数据存储空间(片外RAM)。

存储类型 与存储空间的关系

data 直接寻址片内数据存储区,访问速度快(0X00-0X7F,128字节)

bdata (bit)可位寻址片内数据存储区,允许位与字节混合访问(0X20-0X2F,16字节)

idata (indirect)间接寻址片内数据存储区,访问片内全部RAM空间(8052,256字节)

pdata (page)分页寻址外部数据存储区(256字节)由MOVX @R0访问

xdata (extend)片外数据存储区(64KB),由MOVX @ DPTR访问。

Code 代码存储区(64KB),由MOVC @DPTR访问

如上,这样就足够清晰了。uchar data x和data uchar x相等价都是在内ram区分配一个字节的变量,但是对于指针变量的声明,因涉及到指针变量本身的存储位置和指针所指向的存储区位置不同而进行相应的存储区类型关键字设置是要注意的。在MSTAR的KEIL51编译工程中,ROM SIZE=CONST+CODE <64K。

补充:长整型数与整形数差别:十进制无符号整常数的范围为0~65535,就是int型, 如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。但长整数158L和基本整常数158 在数值上并无区别,这是因为只不过一个用长整形装,一个用整形装,就像两颗蛋,一颗用小碗装,一个用大碗,但他们还是同样是蛋,在数值上并无区别!

c51语言中数据的存储类型,C51-数据存储类型相关推荐

  1. c语言怎么同时输入两个字符,解决C语言中使用scanf连续输入两个字符类型的问题...

    昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include int main() { char ch1,ch2; printf("Input for ch1:/n& ...

  2. IT之路-C语言中五大内存区及变量的存储类型、简单shell脚本(上).ZCSDN-2017.7.18

    今天我干了啥,首先是眯瞪一会儿,然后一上午就过去了.为什么我会迷瞪一会儿,因为昨天晚上玩了一个小时的骑马与砍杀, 我的笔记本i5-3230M-2.60GHz  双核 4G运存 NVIDIA GEFOR ...

  3. c51转汇编语言窗口,在C51语言中如何嵌入汇编语言

    keil C 语言中嵌入汇编语言进行混合编程,方法如下: 1.在C 文件中要嵌入汇编代码片以如下方式加入汇编代码 #pragma ASM ; Assembler Code Here #pragma E ...

  4. python语言中包含的标准数据类型_Python对象——标准类型的分类

    如果让我们最啰嗦的描述标准类型,我们也许会称它们是Python 的"基本内建数据对象原始类型". z "基本",是指这些类型都是Python 提供的标准或核心类 ...

  5. c51语言 延时程序值怎么算,C51的延时计算

    C语言的延时计算 今天碰到这个问题,想想大家也可能用得上,就转过来了,希望对大家有用 C51中精确的延时与计算的实现 C51由于其可读性和可移植性很强,在单片机中得到广泛的应用, 但在某些时候由于C5 ...

  6. 怎么用C51语言实现50ms延时,单片机入门-C51语言实现简单的红绿LED交通灯控制

    原标题:单片机入门-C51语言实现简单的红绿LED交通灯控制 视频教程如下: 本文介绍了用C51语言实现十字路口交通灯控制: 四个路口各有红.绿2个LED,模拟交通灯的控制,即东西走向的灯变红,南北走 ...

  7. c语言中什么运算符可以求出数据字节数,C语言的数据类型及其运算符

    一.数据类型 (一).变量与常量 1.变量 (1).定义:其值在其作用域内可以改变的量称为变量.一个变量应该有一个名字,在内存中占据一一定的存储空间.变量在使用前必须要定义,每个变量都有自己的地址.变 ...

  8. 在 Swift 语言中更好的处理 JSON 数据:SwiftyJSON

    SwiftyJSON能够让在Swift语言中更加简便处理JSON数据. With SwiftyJSON all you have to do is: ? 1 2 3 4 let json = JSON ...

  9. C语言中未显示声明函数返回值的类型

    C语言中如果未显示声明函数返回值的类型或函数的形式参数类型,它就默认返回整型.这种声明在C语言中叫做隐式声明.例如: / //main.c /#include<stdio.h>divide ...

最新文章

  1. LB负载均衡集群 - NAT
  2. 面试的算法2(C语言)(整理)
  3. VC++环境OpenSSL简单编程入门
  4. CodeForces - 1368E Ski Accidents(拓扑排序)
  5. linux c 指针数组定义数组长度,C/C++指针数组和 迪士尼源码搭建下载 数组指针...
  6. 船员能力评估计算机软件系统,船舶动力电力训练系统操作水平综合评估算法研究...
  7. 读书笔记:《时间投资法》之三
  8. 存放有数组的list排序
  9. Linux基础_Hadoop环境搭建必备
  10. 【Elasticsearch】关于 Analyzers 的一切,第2部分
  11. C语言小知识---特殊的字符串
  12. nowcoder猜想c语言筛子,剑指 Offer 50 道经典算法题视频讲解
  13. java课程设计签到系统_学生课堂签到系统设计及实现.doc
  14. Ace Admin 使用教程
  15. SHELL脚本PPT脚本
  16. word无法加载mathtype.wll
  17. python发html邮件_在python中如何制作发送HTML格式的邮件?
  18. Qt实现最小化窗口到托盘图标
  19. 【文献阅读】SoccerNet: A Scalable Dataset for Action Spotting in Soccer Videos
  20. vs编译时WinSock2.h级ws2def.h大量报错

热门文章

  1. python getattr()函数
  2. html卡死手机,手机页面加载地图,双手操作放大,APP卡死
  3. 疫情期间广泛运用的远程诊断音视频技术
  4. 计算机桌面怎么能添加文字,怎么在电脑桌面上添加文字
  5. 计算机网络相关术语概念名词汇总总结集合——摘自《计算机网络--自顶向下》第四章
  6. 作为技术团队TL,如何运用OKR提高团队产出
  7. B1094 谷歌的招聘 (20 分)
  8. python绘图:散点图
  9. 周易六十四卦——需卦
  10. 周易六十四卦——大过卦