admin 管理员组

文章数量: 887021


2024年1月28日发(作者:特斯拉事件幕后推手)

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中它的长度一般为 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,优点是访问速度快,缺点是空间有限,只适用于小程序。

2. Compact 模式

所有缺省变量均位于外部RAM区的一页(256Byte)。

3. Large 模式

所有缺省变量可放在多达 64KB 的外部RAM 区,优点是空间大,可存变量多,缺点是速度较慢。

四、 变量的存储种类

1. auto:默认

2. register:编译器尽量将变量放在寄存器中。

3. extern:全局变量,可以在多个文件中使用。

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: 生命有符号类型类型

void: 声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)

default: 开关语句中的“其他”分支

goto: 无条件跳转语句

sizeof: 计算数据类型长度

volatile: 说明变量在程序执行中可被隐含地改变

do: 循环语句的循环体

while: 循环语句的循环条件

static: 声明静态变量

if: 条件语句

六、

_at_

alien

bdata

bit

code

compact

data

idata

interrupt

large

pdata

_priority_

reentrant

sbit

sfr

sfr16

small

_task_

using

xdata

为变量定义存储空间绝对地址

声明与PL/M51兼容的函数

可位寻址的内部RAM

位类型

ROM

使用外部分页RAM的存储模式

直接寻址的内部RAM

间接寻址的内部RAM

中断服务函数

使用外部RAM的存储模式

分页寻址的外部RAM

RTX51的任务优先级

可重入函数

声明可位寻址的特殊功能位

8位的特殊功能寄存器

16位的特殊功能寄存器

内部RAM的存储模式

实时任务函数

选择工作寄存器组

外部RAM

C51扩展关键字


本文标签: 数据 变量 声明