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 和⽆符号整型数unsign
ed 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中它的长度⼀般为1~3 个字节。
6.bit 位标量
bit位标量是c51编译器的⼀种扩充数据类型,利⽤它可定义⼀个位标量,但不能定义位指针,也不能定义位数组。它的值是⼀个⼆进制位,不是0 就是1,类似⼀些⾼级语⾔中的Boolean 类型中的True 和False。
7.sfr 特殊功能寄存器
sfr 也是⼀种扩充数据类型,点⽤⼀个内存单元,值域为0~255。利⽤它能访问51 单⽚机内部的所有特殊功能寄存器。如⽤sfr P1 = 0x90 这⼀句定P1 为P1 端⼝在⽚内的寄存器,在后⾯的语句中⽤以⽤P1 = 255(对P1 端⼝的所有引脚置⾼电平)之类的语句来操作特殊功能寄存器。
8.sfr16 16 位特殊功能寄存器
sfr16 占⽤两个内存单元,值域为0~65535。sfr16和sfr⼀样⽤于操作特殊功能寄存器,所不⼀样的是它⽤于操作占两个字节的寄存器,如定时器T0和T1。
9.sbit 可寻址位
sbit 同样是单⽚机c语⾔中的⼀种扩充数据类型,利⽤它能访问芯⽚内部的RAM 中的可寻址位或特殊功能寄存器中的可寻址位。如先前定义了sfr P1 = 0x90; //因P1 端⼝的寄存器是可位寻址的,所以能定义sbit P1_1 = P1^1; //P1_1 为P1 中的P1.1 引脚// 同样我们能⽤P1.1 的地址去写,如sbit P1_1 = 0x91;
这样在以后的程序语句中就能⽤
P1_1 来对P1.1 引脚进⾏读写操作了。通常这些能直接使⽤系统供给的预处理⽂件,⾥⾯已定义好各特殊功能寄存器的简单名字,直接引⽤能省去⼀点时间,我⾃⼰是⼀直⽤的。当然您也能⾃⼰写⾃⼰的定义⽂件,⽤您认为好记的名字
⼆、存储区域
keil C51存储区域分为程序存储区和数据存储区2⼤类型。
1.程序存储区(Pragram Area)
欲将声明的数据存放在程序存储区域,可以使⽤关键字“code”说明。
例unsigned char code i=10;则表⽰i为⽆符号字符型数据存放区域为程序存储区。
2.数据存储区(Data Memory)
数据存储区域分为内部数据存储区、外部数据存储区域和特殊功能寄存器寻址区。
1)内部数据存储区域(Internal Data Memory):可以使关键字"data、iadta、bdata"做相应
说明。
register: 寄存器区,四组寄存器R0~R7
bdata:可位寻址区,寻址范围为0X20~0X2F。
data:直接寻址区,声明的数据存储范围为内部RAM低128字节0X00~0X7F。
例unsigned char data i=10;则表⽰i为⽆符号字符型数据存放区域为数据存储区域(RAM)的低128字节范围内。
idata:间接寻址区,声明的数据存储范围为整个内部RAM区0X00~0XFF。
例unsigned char idata i=10;则表⽰i为⽆符号字符型数据存放区域为数据存储区域(RAM)内。
2)外部数据存储区(External Data Memory):可以使⽤关键字"pdata、xdata"进⾏说明。
pdata:主要⽤于紧凑模式,能访问1页(256字节)的外部RAM,即在访问使⽤,pdata 定义的数据时,不会影响P2⼝的输出电平(在访问某些⾃⾝内部扩展的外部RAM 时本⾝就不会影响I/O端⼝)。
例unsigned char pdata i;则表⽰i为⽆符号字符型数据存放区域为外部数据存储区域(RAM)内(只能
在⼀页范围内)具体操作哪⼀页,可由其他i/o⼝设定。
xdata:可访问64k的外部数据存储区,地址范围0X0000~0XFFFF,同pdata⼀样在访问芯⽚⾃⾝内部扩展的RAM时也不会影响I/O端⼝。
例unsigned char pdata i;则表⽰i为⽆符号字符型数据存放区域为外部数据存储区(RAM)。
3)特殊功能寄存器寻址区域(Speciac Function Register Memory)-SFR:8051提供128字
节的SFR寻址区,该区域可以字节寻址,字寻址,能被8整除的地址单元还可以位寻址。该区域⽤于控制定时器、计数器、串⼝等外围接⼝。使⽤时可⽤关键字“sfr、sfr16、sbit”做相应的声明。
例字节寻址sfr P0=0x80;为P0 ⼝地址为80H,“=”后0X00~0XFF 之间的常数。
字寻址sfr16 T2=0XCC;指定Timer2 ⼝地址T2L=0XCC T2H=0XCD。
位寻址sbit EA=0xAF;指定第0xAF 位为EA,即中断允许
三、存储模式
存储模式
在使⽤C51时有时我们并没有明确指定所定义的数据的存储类型,然⽽依然正确。这是由于存储模式决定了没有明确指定存储类型的变量,函数参数等的缺省存储区域。
1.Small模式
所有缺省变量参数均装⼊内部RAM,优点是访问速度快,缺点是空间有限,只适⽤于⼩程序。
www.doczj/doc/da48779f51e79b8968022640.html pact 模式
所有缺省变量均位于外部RAM区的⼀页(256Byte)。
www.doczj/doc/da48779f51e79b8968022640.html rge 模式
所有缺省变量可放在多达64KB 的外部RAM 区,优点是空间⼤,可存变量多,缺点是速度较慢。
四、变量的存储种类
1.auto:默认
<:全局变量,可以在多个⽂件中使⽤。
4.static:使得局部变量的寿命与程序相同;使得全局变量只在⽂件内有效。
五、关键字
ANSI C 关键字
auto: ⾃动变量
double: 双精度类型
int: 声明整型类型
struct: 声明结构体类型
break: 跳出当前循环
else: 条件语句否定分⽀(与 if 连⽤)
long: 声明长整型类型
switch :⽤于开关语句
case: 开关语句分⽀
enum: 声明枚举类型
register: 声明寄存器变量
typedef: ⽤以给数据类型取别名(当然还有其他作⽤)
char: 声明字符型类型
extern: 声明变量是在其他⽂件正声明(也可以看做是引⽤变量)
return: ⼦程序返回语句(可以带参数,也看不带参数)
union: 声明联合数据类型
const: 声明只读变量
float: 声明浮点型类型
short: 声明短整型类型
unsigned: 声明⽆符号类型类型
continue: 结束当前循环,开始下⼀轮循环
for: ⼀种循环语句(可意会不可⾔传)
signed: ⽣命有符号类型类型
float数值范围
void: 声明函数⽆返回值或⽆参数,声明⽆类型指针(基本上就这三个作⽤)?default: 开关语句中的“其他”分⽀goto: ⽆条件跳转语句
sizeof: 计算数据类型长度
volatile: 说明变量在程序执⾏中可被隐含地改变
do: 循环语句的循环体
while: 循环语句的循环条件
static: 声明静态变量if: 条件语句
六、C51扩展关键字