c51中存储类型code-data
C51中data,idata,xdata 区别

dATa: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
idATa: 固定指前面0x00-0xff的256个RAM,其中前128和dATa的128完全相同,只是因为访问的方式不同。
idA Ta是用类似C中的指针方式访问的。
汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idATa做指针式的访问效果很好)xdA Ta: 外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
pdA Ta: 外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx 读写。
这个比较特殊,而且C51好象有对此BUG, 建议少用。
但也有他的优点,具体用法属于中级问题,这里不提。
startup.a51的作用,和汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char dATa xxx="100";,那startup.a51中就会有相关的赋值。
如果没有=100,startup.a51就会把他清0。
(startup.a51==变量的初始化)。
这些初始化完毕后,还会设置SP指针。
对非变量区域,如堆栈区,将不会有赋值或清零动作。
有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。
比如掉电保护的时候想保存一些变量, 但改startup.a51来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff处就可实现。
, 为什么还要去改? 可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性。
bit是在内部数据存储空间中20H .. 2FH 区域中一个位的地址,这在DATA的20H以后以字节形式出现,可互相参照。
另外加上8051 可寻址的SFR,但刚刚试过,只是00H--7FH起作用,也就是说当数据有变化时颜色变红,以后的从80H到--FFH就不是位寻址区了,是位寻址的特殊寄存器,如涉及到了可位寻址的那11个当然会有反应。
C51的数据类型

C51的数据类型标题:C51的数据类型引言概述:C51是一种常用的单片机,对于程序员来说,了解C51的数据类型是非常重要的。
本文将详细介绍C51的数据类型,包括基本数据类型、派生数据类型、数组、结构体和枚举类型。
一、基本数据类型1.1 位类型(bit):C51中的位类型只能存储0或1,用于表示逻辑真假。
1.2 无符号整型(unsigned int):用于表示正整数,范围为0~65535。
1.3 有符号整型(int):用于表示带符号的整数,范围为-32768~32767。
二、派生数据类型2.1 字符型(char):用于表示一个字符,范围为-128~127。
2.2 浮点型(float):用于表示带有小数点的数值,精度较高。
2.3 双精度型(double):用于表示双精度浮点数,精度更高。
三、数组3.1 一维数组:用于存储相同类型的数据,通过下标访问数组元素。
3.2 多维数组:可以是二维、三维甚至更高维度的数组,用于存储复杂的数据结构。
3.3 数组名:数组名是数组的首地址,可以用来访问数组元素。
四、结构体4.1 结构体定义:用于存储不同类型的数据,通过成员名访问结构体成员。
4.2 结构体数组:可以定义结构体数组,每个元素都是一个结构体变量。
4.3 结构体指针:可以定义指向结构体的指针,方便对结构体成员进行操作。
五、枚举类型5.1 枚举定义:用于定义一组有序的常量,方便程序员使用。
5.2 枚举变量:可以定义枚举变量,取值为定义的枚举常量。
5.3 枚举类型转换:可以将枚举类型转换为整型,方便进行运算。
结论:通过本文的介绍,读者可以更加深入地了解C51的数据类型,包括基本数据类型、派生数据类型、数组、结构体和枚举类型。
掌握这些知识可以帮助程序员更好地编写C51程序,提高代码的质量和效率。
希望本文能对读者有所帮助。
C51数据类型和存储空间

关于单片机存储器的问题,idata,data,badata,xdata,pdata,code,片内存储区,片外存储区关于51单片机内存问题,一直是个疑惑大家的问题,因为51单片机是个很另类的单片机。
下面我给楼主讲解一下:51单片机之所以另类,是因为,他寻址内存的空间,不是靠总线,是用指令的方式。
51单片机有以下几个内存模块组成:1】ROM或者Flash,叫程序存储区,你写的程序是存在这里面的,上电后从这里面执行。
程序存储区也分为片内和片外,一般来说,现在的51很多已经做到了64K,所以很少有外扩片外Flash或者片外的Rom了,Flash或者Rom不管是片内还是片外的,只能用来定义常量,是用code来修饰,也就是说,用code来修饰的东西,在程序运行过程中,不能修改;2】RAM有------内部RAM的低128位(00-7F),对应C语言就是data,比如我定义一个变量,data unsigned char Var = 0;那么,这个Var变量就是放在内部的低128位Ram中-------内部RAM的高128位(80-FF),对应C语言就是idata,比如我定义一个变量,idata unsigned char V ar = 0;那么,这个Var变量就是放在内部的高128位Ram中-------特殊功能寄存器(SFR)(80-FF),对应C语言就是Sfr比如我定义一个变量,Sfr unsigned char Var = 0x90;那么,这个Var变量就是放在内部的特殊功能寄存器中,这是你对Var操作,相当于操作一个特殊的寄存器,但是小心,不能随便定义Sfr变量,很危险------外部RAM 64K(0000-FFFF)外部的RAM可以扩展到65536个,但是前256个算是一页,这一页比较特殊,是用pdata来修饰的,当然,也可以用xdata来修饰。
除了第一页的256个以外的其他65280个空间,只能用xdata来修饰;回过头来讨论pdata和xdata,这两个都能修饰外部Ram的第一页,但是,Pdata只能修饰第一页,即最前面的256个外部Ram,那么,这最前面的256个到底用Pdata还是Xdata好的呢?答案:是Pdata,因为Xdata修饰的变量,用的是DPTR寻址,Pdata用的是R0和R1.DPTR因为是16位的,所以可以覆盖整个的64K外部Ram,R0和R1是8位,所以只能寻址最前面的256个,也就是外部Ram的第一页,但是,用R0寻址,比DPTR快一倍,代码也小的很多。
C51基本结构与数据

单片机技术
一、C51程序结构 程序结构
C51语言程序采用函数结构,每个C51语言程序由一个 语言程序采用函数结构,每个 语言程序采用函数结构 语言程序由一个 或多个函数组成。 或多个函数组成。
单片机技术
1. C51的一般格式 的一般格式
类型 函数名(参数表) 函数名(参数表) 参数说明; 参数说明; { 数据说明部分; 数据说明部分; 执行语句部分; 执行语句部分; }
单片机技术
C51的一般格式 的一般格式
中函数分为两大类: (1) C51中函数分为两大类:库函数、用户定义函数。 ) 中函数分为两大类 库函数、用户定义函数。 (2) 函数在程序中的三种形态:函数定义、函数调用和函数 ) 函数在程序中的三种形态:函数定义、 说明。 说明。 (3) 函数定义:包括函数类型、函数名、形式参数说明等, ) 函数定义:包括函数类型、函数名、形式参数说明等, 函数名后面必须跟一个圆括号(),形式参数在()内定义。 (),形式参数在()内定义 函数名后面必须跟一个圆括号(),形式参数在()内定义。 包括, (4)函数体:由一对花括号“{}”包括,在“{}”的内容就是函 )函数体:由一对花括号“ 包括 的内容就是函 数体。如果一个函数内有多个花括号,则最外层的一对“ 之 数体。如果一个函数内有多个花括号,则最外层的一对“{}”之 间的部分为函数体的内容。 间的部分为函数体的内容。 (5) 函数体内的两个组成部分,声明语句用于对函数中用到 ) 函数体内的两个组成部分, 的变量进行定义,也可能对函数体中调用的函数进行声明。 的变量进行定义,也可能对函数体中调用的函数进行声明。执行 语句由若干语句组成,用来完成一定功能。 语句由若干语句组成,用来完成一定功能。 (6)仅有一对“{}”,这种函数称为空函数。 )仅有一对“ ,这种函数称为空函数。 (7) 每个语句和数据定义的最后必须以分号结束。 ) 每个语句和数据定义的最后必须以分号结束。
C51的数据存储详解

C51的存储种类和存储器类型1.自动变量(auto)char chr=‘a’;等价于auto char chr=‘a’;注意自动变量的作用域在main函数和复合语句中分别定义了一个同名的字符型自动变量并输出,结果证明复合语句中自动变量的作用域仅限于符合语句中。
#include"stdio.h"void main(){char chr='a';{char chr='b';printf("%c\n",chr);}printf("%c\n",chr);}程序运行结果为ba复合语句说明:复合语句把多个语句用括号{}括起来组成的一个语句称复合语句。
在程序中应把复合语句看成是单条语句,而不是多条语句,例如{x=y+z;a=b+c;printf("%d%d",x,a);}是一条复合语句。
复合语句内的各条语句都必须以分号“;”结尾;此外,在括号“}”外不能加分号。
2.外部变量(extern)C51语言允许将大型程序分解为若干个独立放入程序模块文件,各个模块可以分别进行编译然后再连接在一起,在这种情况下,如果某个变量要在其他程序模块文件中使用,只要在一个程序文件中将该变量定义为全局变量,而在其他程序模块文件中使用“extern”说明该变量是已经被定义过的变量就可以了。
在整个程序中都具有相同名字的外部变量只能在一处进行定义和初始化。
#include"stdio.h"char chr_1='a';void main(){extern char chr_2;printf("%c\n",chr_1);printf("%c\n",chr_2);}char chr_2='b';程序运行结果abchr-1是一个全局变量,不需要使用extern进行声明,而chr-2在定义前被使用,因此使用前必须使用extern进行声明。
C51中data,idata,xdata,pdata的区别

dATa: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
idATa: 固定指前面0x00-0xff的256个RAM,其中前128和dATa的128完全相同,只是因为访问的方式不同。
idA Ta是用类似C中的指针方式访问的。
汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idATa做指针式的访问效果很好)xdA Ta: 外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
pdA Ta: 外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx 读写。
这个比较特殊,而且C51好象有对此BUG, 建议少用。
但也有他的优点,具体用法属于中级问题,这里不提。
startup.a51的作用,和汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char dATa xxx="100";,那startup.a51中就会有相关的赋值。
如果没有=100,startup.a51就会把他清0。
(startup.a51==变量的初始化)。
这些初始化完毕后,还会设置SP指针。
对非变量区域,如堆栈区,将不会有赋值或清零动作。
有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。
比如掉电保护的时候想保存一些变量, 但改startup.a51来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff处就可实现。
, 为什么还要去改? 可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性。
bit是在内部数据存储空间中20H .. 2FH 区域中一个位的地址,这在DATA的20H以后以字节形式出现,可互相参照。
另外加上8051 可寻址的SFR,但刚刚试过,只是00H--7FH起作用,也就是说当数据有变化时颜色变红,以后的从80H到--FFH就不是位寻址区了,是位寻址的特殊寄存器,如涉及到了可位寻址的那11个当然会有反应。
单片机C语言中的data,idata,xdata,pdata,code

单片机C语言中的data,idata,xdata,pdata,code
从数据存储类型来说,8051 系列有片内、片外程序存储器,片内、片外数
据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应
code、data、xdata、idata 以及根据51 系列特点而设定的pdata 类型,使用不同的存储器,将使程序执行效率不同,在编写C51 程序时,最好指定变量的存储
类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。
与ANSI-C 稍有不同,它只分SAMLL、COMPACT、LARGE 模式,各种不同的模式对应
不同的实际硬件系统,也将有不同的编译结果。
在51 系列中data,idata,xdata,pdata 的区别:
data:固定指前面0x00-0x7f 的128 个RAM,可以用acc 直接读写的,速度最快,生成的代码也最小。
idata:固定指前面0x00-0xff 的256 个RAM,其中前128 和data 的128 完全相同,只是因为访问的方式不同。
idata 是用类似C 中的指针方式访问的。
汇编中的语句为:mox ACC,@Rx.(不重要的补充:c 中idata 做指针式的访问效果很好) xdata:外部扩展RAM,一般指外部0x0000-0xffff 空间,用DPTR 访问。
pdata:外部扩展RAM 的低256 个字节,地址出现在A0-A7 的上时读写,用movx ACC,@Rx 读写。
这个比较特殊,而且C51 好象有对此BUG,建议少用。
但也有他的优点,具体用法属于中级问题,这里不提。
单片机C 语言unsigned charcodetable[]code 是什么作用?。
C51关键字数据类型及存储类型总结

C51关键字数据类型及存储类型总结C51关键字数据类型及存储类型总结⼀、数据类型1.char 字符类型char 类型的长度是⼀个字节,通常⽤于定义处理字符数据的变量或常量。
分⽆符号字符类型unsigned char 和有符号字符类型signed char,默认值为signed char 类型。
unsigned char 类型⽤字节中所有的位来表⽰数值,所能表达的数值范围是0~255。
signed char 类型⽤字节中最⾼位字节表⽰数据的符号,“0”表⽰正数,“1”表⽰负数,负数⽤补码表⽰。
所能表⽰的数值范围是-128~+127。
unsigned char 常⽤于处理ASCII 字符或⽤于处理⼩于或等于255 的整型数。
2.int 整型int 整型长度为两个字节,⽤于存放⼀个双字节数据。
分有符号int 整型数signed int 和⽆符号整型数unsigned int,默认值为signed int 类型。
signed int 表⽰的数值范围是-32768~+32767,字节中最⾼位表⽰数据的符号,“0”表⽰正数,“1”表⽰负数。
unsigned int 表⽰的数值范围是0~65535。
3.long 长整型long 长整型长度为四个字节,⽤于存放⼀个四字节数据。
分有符号long 长整型signed long 和⽆符号长整型unsigned long,默认值为signed long 类型。
signed int 表⽰的数值范围是-2147483648~+2147483647,字节中最⾼位表⽰数据的符号,“0”表⽰正数,“1”表⽰负数。
unsigned long 表⽰的数值范围是0~4294967295。
4.float 浮点型float 浮点型在⼗进制中具有7 位有效数字,是符合IEEE-754 标准的单精度浮点型数据,占⽤四个字节。
因浮点数的结构较复杂在以后的章节中再做详细的讨论。
5.指针型指针型本⾝就是⼀个变量,在这个变量中存放的指向另⼀个数据的地址。
第3章参考答案

第3章 C51语言编程基础1.C51在标准C的基础上,扩展了哪几种数据类型?2.C51有哪几种数据存储类型?其中数据类型“idata,code,xdata,pdata”各对应AT89S51单片机的哪些存储空间?3.说明3种数据存储模式(1)SMALL模式(2)COMPACT模式(3)LARGE模式之间的差别。
4.编写C51程序,将片外2000H为首地址的连续10个单元的内容,读入到片内40H到49H单元中。
5.do-while构成的循环与while循环的区别是什么?参考答案1. C51在标准C的基础上,扩展了4种数据类型:bit、sfr、sfr16、sbit。
2. 数据存储类型有:data、bdata、idata 、xdata 、pdata、code,其中“idata,code,xdata,pdata”各自对应的AT89S51单片机存储空间如下:idata:片内RAM的256字节,必须间接寻址的存储区;code:程序存储区,使用DPTR寻址;xdata:片外64kb的ram空间,使用@DPTR间接寻址;pdata:片外ram的256字节,使用@Ri 间接寻址。
3.(1)SMALL模式。
在该模式下,所有变量都默认位于51单片机内部的数据存储器,这与使用data指定存储器类型的方式一样。
在此模式下,变量访问的效率高,但是所有数据对象和堆栈必须使用内部RAM。
(2)COMPACT模式。
当使用本模式时,所有变量都默认在外部数据存储器的1页内,这与使用pdata指定存储器类型是一样的。
该存储器类型适用于变量不超过256字节的情况,此限制是由寻址方式决定的,相当于使用数据指针@Ri进行寻址。
与SMALL模式相比,该存储模式的效率比较低,对变量访问的速度也慢一些,但比LARGE模式快。
(3)LARGE模式。
在LARGE模式中,所有变量都默认位于外部数据存储器,相当于使用数据指针@DPTR 进行寻址。
通过数据指针访问外部数据存储器的效率较低,特别是当变量为2字节或更多字节时,该模式要比SMALL和COMPACT产生更多的代码。
第二讲 常量与变量,C51数据的存储类型与8051存储器结构

1 8 8 16 16 32 32 32 64 24
—— 1 1 2 2 4 4 4 8 3
存储空间0~65535
表2-1 C51数据类型的取值范围 数据类型的取值范围
2011-3-13 6
第二讲 常量与变量,C51数据的存储类型与8051 存储器结构
数据类型 char int long int short int unsigned int float double 常量举例 \n为转 义字符 21、123 、2100 、-234 a、\n、9 35000、-34 10、-12、90 10000、987、40000 123.23、4.34e-3 123.23、12312333、-0.9876234 表2-2 常量的数据类型举例
8
第二讲 常量与变量,C51数据的存储类型与8051 存储器结构
存储类型 data idata pdata xdata code 长度( ) 长度(bit) 8 8 8 16 16 长度( 长度(byte) ) 1 1 1 2 2 值域范围 0~255 0~255 0~255 0~65535 0~65535
2011-3-13
3
第二讲 常量与变量,C51数据的存储类型与8051 存储器结构 二、C51数据的存储类型(见P54):
图2-1 8051单片机存储器结构 单片机存储器结构
2011-3-13 4
第二讲 常量与变量,C51数据的存储类型与8051 存储器结构
双精度浮点型double位型bit字符型char整型int长整型long浮点型float数组类型array结构体类型struct共用体union枚举enum基本类型构造类型指针类型空类型nop数据类型2012913wwwscetcnet第二讲常量与变量c51数据的存储类型与8051存储器结构数据类型长度bit长度byte值域范围bit01unsignedchar0255signedchar128127unsignedint16065535signed3276832767unsignedfloat3204294967295signedfloat3221474836482147483647float321176e38340e386位数字double641176e38340e3810位数字一般指针24存储空间065535表21c51数据类型的取值范围2012913wwwscetcnet第二讲常量与变量c51数据的存储类型与8051存储器结构数据类型常量举例charint211232100234longint3500034shortint101290unsignedint1000098740000float12323434e3double123231231233309876234义字符表22常量的数据类型举例2012913wwwscetcnet第二讲常量与变量c51数据的存储类型与8051存储器结构存储类型与存储空间的对应关系data直接寻址片内数据存储区访问速度快128字节bdata可位寻址片内数据存储区允许位与字节混合访问16字节idata间接寻址片内数据存储区可访问片内全部ram地址空间256字节pdata分页寻址片外数据存储区256字节由movxri访问xdata寻址片外数据存储区64k字节有movxdptr访问code寻址代码存储区64k字节有movcdptr访问表23c51存储类型与mcs51单片机存储空间的对应关2
C51数据类型

C51数据类型概述:C51是一种基于8051微控制器的编程语言,拥有多种数据类型用于存储不同类型的数据。
了解C51数据类型对于编写高效且可靠的嵌入式系统程序至关重要。
本文将介绍C51中常用的数据类型及其特性。
一、基本数据类型:1. 位(bit):C51中最小的数据类型,只能存储0或1两个值。
2. 无符号整数(unsigned int):用于存储非负整数,范围为0到65535。
3. 有符号整数(int):用于存储带符号整数,范围为-32768到32767。
4. 字符型(char):用于存储字符数据,范围为-128到127。
二、扩展数据类型:1. 无符号长整数(unsigned long):用于存储较大的非负整数,范围为0到4294967295。
2. 有符号长整数(long):用于存储较大的带符号整数,范围为-2147483648到2147483647。
3. 单精度浮点数(float):用于存储小数,范围为-3.4E38到3.4E38,精度为6位小数。
4. 双精度浮点数(double):用于存储更大范围和更高精度的小数。
三、其他数据类型:1. 枚举类型(enum):用于定义一组常量,可以为常量赋予不同的整数值。
示例:enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};Weekday today = Wednesday;2. 数组类型(array):用于存储多个相同类型的数据,通过索引访问。
示例:int numbers[5] = {1, 2, 3, 4, 5};int firstNumber = numbers[0]; // 访问数组的第一个元素3. 结构体类型(struct):用于定义包含多个不同类型的数据的自定义类型。
示例:struct Person {char name[20];int age;};struct Person john;strcpy(, "John");john.age = 25;4. 联合类型(union):用于在相同的内存位置存储不同类型的数据。
单片机原理及接口技术(C51编程)(第2版)-习题答案汇总

单片机答案第1章思考题及习题1参考答案一、填空1. 除了单片机这一名称之外,单片机还可称为或。
答:微控制器,嵌入式控制器。
2。
单片机与普通微型计算机的不同之处在于其将、、和三部分,通过内部连接在一起,集成于一块芯片上。
答:CPU、存储器、I/O 口、总线3. AT89S51单片机工作频率上限为 MHz.答:24MHz。
4。
专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低和提高 .答:成本,可靠性。
二、单选1。
单片机内部数据之所以用二进制形式表示,主要是A.为了编程方便B.受器件的物理性能限制C.为了通用性D.为了提高运算速度答:B2. 在家用电器中使用单片机应属于微计算机的。
A.辅助设计应用B.测量、控制应用C.数值计算应用D.数据处理应用答: B3. 下面的哪一项应用,不属于单片机的应用范围。
A.工业控制 B.家用电器的控制 C.数据库管理 D.汽车电子设备答:C三、判断对错1. STC系列单片机是8051内核的单片机。
对12。
AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、1个中断源、1个定时器(且具有捕捉功能)。
对3. 单片机是一种CPU.错4。
AT89S52单片机是微处理器。
错5. AT89S51片内的Flash程序存储器可在线写入(ISP),而AT89C52则不能。
对6. 为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。
对7. 为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。
对8. 单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能则是DSP的长处。
对第2章思考题及习题2参考答案一、填空1. 在AT89S51单片机中,如果采用6MHz晶振,一个机器周期为。
答:2µs2. AT89S51单片机的机器周期等于个时钟振荡周期。
单片机中的各个存储区符号及用法

单片机C语言code与data的作用单片机C语言unsigned char code table[] code 是什么作用?code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVC(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思。
程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data 区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面,放到rom里面改动不了。
附:c51中的存储类型code :程序存储区(64KB),data :可直接寻址的内部数据存储区(128B)idata:不可直接寻址的内部数据存储区(256B)bdata:可位寻址内部数据存储区(16B)xdata:外部数据存储区(64KB)pdata:分页的外部数据存储区本文来自CSDN博客,转载请标明出处:/erazy0/archive/2009/09/20/4573196.aspxdata ---> 可寻址片内rambdata ---> 可位寻址的片内ramidata ---> 可寻址片内ram,允许访问全部内部rampdata ---> 分页寻址片外ram (MOVX @R0) (256 BYTE/页)xdata ---> 可寻址片外ram (64k 地址范围)code ---> 程序存储区 (64k 地址范围),对应MOVC @DPTRconst 表示本数组不可修改数组为常量数组code 表示本数组生成后是在ROM区中同样不可修改idata 表示数组生成后在在0x00~0xff的256个RAM中,使用指针寻址具体的参考下面data,bdata,idata,pdata,xdata,code存储类型与存储区bit是在内部数据存储空间中 20H .. 2FH 区域中一个位的地址,或者 8051 位可寻址 SFR 的一个位地址。
C51编译器的数据存储格式及编程技巧分享

C51编译器的数据存储格式及编程技巧分享Data Storage Formats数据存储格式这一部说明可用的数据类型的存储格式。
Cx51提供了几种数据存储格式如下:Data Type Bits Bytes Value Rangebit 1 —0 to 1signed char 8 1 -128 to +127unsigned char 8 1 0 to 255enum 8 / 16 1 or 2 -128 to +127 or -32768 to +32767signed short 16 2 -32768 to +32767unsigned short 16 2 0 to 65535signed int 16 2 -32768 to +32767unsigned int 16 2 0 to 65535signed long 32 4 -2147483648 to 2147483647unsigned long 32 4 0 to 4294967295float 32 4 ±1.175494E-38 to ±3.402823E+38data *,idata *,pdata * 8 1 0x00 to 0xFFcode*,xdata * 16 2 0x0000 to 0xFFFFgeneric pointer 24 3 Memory type (1 byte); Offset (2 bytes)0 to 0xFFFF其他数据类型如结构体和联合,可以包含上表中类型。
所有的元素都按顺序分配,并且按8051家簇的8bit字节对齐。
Bit Variables位变量Bit类型的数量以使用单个位存放。
位指针和位数组是不允许使用的。
Bit对象总是放在8051CPU内部数据存储器的位可寻址区。
如果可能的话,BL51 连接器/定位器会覆盖位对象Signed and Unsigned Characters,Pointers to data,idata,and pdataChar类型的变量存入在一个字节内部。
C51关键字 数据类型 及 存储类型总结

C51关键字数据类型及存储类型总结一、数据类型1.char 字符类型char 类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。
分无符号字符类型unsigned char 和有符号字符类型signed char,默认值为signed char 类型。
unsigned char 类型用字节中所有的位来表示数值,所能表达的数值范围是0~255。
signed char 类型用字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示。
所能表示的数值范围是-128~+127。
unsigned char 常用于处理ASCII 字符或用于处理小于或等于255 的整型数。
2.int 整型int 整型长度为两个字节,用于存放一个双字节数据。
分有符号int 整型数signed int 和无符号整型数unsigned int,默认值为signed int 类型。
signed int 表示的数值范围是-32768~+32767,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。
unsigned int 表示的数值范围是0~65535。
3.long 长整型long 长整型长度为四个字节,用于存放一个四字节数据。
分有符号long 长整型signed long 和无符号长整型unsigned long,默认值为signed long 类型。
signed int 表示的数值范围是-2147483648~+2147483647,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。
unsigned long 表示的数值范围是0~4294967295。
4.float 浮点型float 浮点型在十进制中具有7 位有效数字,是符合IEEE-754 标准的单精度浮点型数据,占用四个字节。
因浮点数的结构较复杂在以后的章节中再做详细的讨论。
5.指针型指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。
C51语言复习题参考答案

一、单项选择题:(每小题2分,共10分。
在每小题备选答案中选出一个正确答案,并将正确答案的代码填在题中括号内。
选对得分,不选、选错均不得分。
) 1.利用下列( D D )关键字可以改变工作寄存器组)关键字可以改变工作寄存器组 A 、interrupt B 、sfr C 、while D 、using 2.C51中一般指针变量占用( C C )字节存储。
字节存储。
A 、一个 B 、两个 C 、三个 D 、四个、四个3.使用宏来访问绝对地址时,一般需包含的库文件是(.使用宏来访问绝对地址时,一般需包含的库文件是( B ) A 、reg51.h B 、absacc.h C 、intrins.h D 、startup.h 4.执行#define PA8255 XBYTE[0x3FFC]; PA8255=0x7e; 后存储单元0x3FFC 的值是(A )A 、Ox7e B 、8255H C 、未定、未定 D 、7e 5.设有int i int i;则表达式;则表达式i=1,++i,++i||++i,i 的值为的值为 (C ) A 、1 B 、2 C 、3 D 、4 6.设有int a[ ]={10,11,12},*p=&a[0]int a[ ]={10,11,12},*p=&a[0];则执行完;则执行完;则执行完*p++;*p+=1;*p++;*p+=1;*p++;*p+=1;后后a[0],a[1],a[2]a[0],a[1],a[2]的值依的值依次是次是 (C )A 、10,11,12 B 、11,12,12 C 、10,12,12 D 、11,11,12 7.设有int i int i;则表达式;则表达式i=1,++i,i||++i,i 的值为的值为 (B ) A 、1 B 、2 C 、3 D 、4 二、判断题:(每小题1分,共10分。
正确的在括号内打“√”,错误的打“×”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机C 语言code 与data 的作用
单片机C 语言unsigned char code table[] code 是什么作用?
code 的作用是告诉单片机,我定义的数据要放在ROM (程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVC(好像是),因为C 语言中没办法详细描述存入的是ROM 还是RAM (寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data 是存入RAM 的意思。
程序可以简单的分为code (程序)区,和data (数据)区,code 区在运行的时候是不可以更改的,data 区放全局变量和临时变量,是要不断的改变的,cpu 从code 区读取指令,对data 区的数据进行运算处理,因此code 区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code 区也可以放在rom 里面,也可以放在ram 里面,也可以放在flash 里面(但是运行速度要慢很多,主要读flash
比读ram 要费时间),因此一般的做法是要将程序放到flash 里面,然后load 到 ram 里面运行的;DA TA 区就没有什么选择了,肯定要放在RAM 里面,放到rom 里面改动不了。
附:
c51中的存储类型
本文来自CSDN 博客,转载请标明出处:/erazy0/archive/2009/09/20/4573196.aspx
data ---> 可寻址片内ram
bdata ---> 可位寻址的片内ram
idata ---> 可寻址片内ram ,允许访问全部内部ram
pdata ---> 分页寻址片外ram (MOVX @R0) (256 BYTE/页) xdata ---> 可寻址片外ram (64k 地址范围)
code ---> 程序存储区 (64k 地址范围),对应MOVC @DPTR const 表示本c51中存储类型
数组不可修改数组为常量数组
code 表示本数组生成后是在ROM区中同样不可修改
idata 表示数组生成后在在0x00~0xff的256个RAM中,使用指针寻址
具体的参考下面
data,bdata,idata,pdata,xdata,code存储类型与存储区
bit是在内部数据存储空间中20H .. 2FH 区域中一个位的地址,或者8051 位可寻址SFR 的一个位地址。
code是在0000H .. 0FFFFH 之间的一个代码地址。
data是在0 到127 之间的一个数据存储器地址,或者在128 .. 255 范围内的一个特殊功能寄存器(SFR)地址。
idata是0 to 255 范围内的一个idata 存储器地址。
xdata 是0 to 65535 范围内的一个xdata 存储器地址。