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扩展关键字
版权声明:本文标题:C51关键字 数据类型 及 存储类型总结 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1706409411h506110.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论