51单片机数据类型大全

数据类型

在51内核的单片机里,所有变量都有相应的数据类型,C51数据类型见下表

数据类型长度值域
unsigned char单字节0~255
signed单字节-128~+128
unsigned int双字节0~65535
signed int双字节-32768~+32768
unsigned long4字节0~4294967295
signed long4字节-2147483648~+2147483648
float4字节±1.175494E-38~±3.402823E+38
*1~3字节对象地址
bit0或1
sfr单字节0~255
sfr16双字节0~65535
sbit0或1
(1)char 字符类型:

        char 类型的长度是 1 字节,通常用于定义处理字符数据的变量或常量。分无符号字符类型 unsignedchar 和有符号字符类型 signed char,默认值为 signed char 类型。unsigned char 类型用字节中所有的位来表示数值,所能表达的数值范围是 0 ~ 255。signed char 类型用字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示。所能表示的数值范围是 -128 ~ +127。unsigned char 常用于处理 ASCII 字符或用于处理≤ 255 的整型数。

(2)int 整型:

        int 整型长度为 2 字节,用于存放 1 个双字节数据。分有符号 int 整型数 signed int 和无符号整型数unsigned int,默认值为 signed int 类型。signed int 表示的数值范围是 -32 768 ~ +32 767,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。unsigned int 表示的数值范围是 0 ~ 65 535。

(2)int 整型:

int 整型长度为 2 字节,用于存放 1 个双字节数据。分有符号 int 整型数 signed int 和无符号整型数unsigned int,默认值为 signed int 类型。signed int 表示的数值范围是 -32 768 ~ +32 767,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。unsigned int 表示的数值范围是 0 ~ 65 535。

(4)float 浮点型:

        float 浮点型在十进制中具有 7 位有效数字,是符合 IEEE -754 标准的单精度浮点型数据,占用 4字节。

(5)指针型:

        指针型是一种特殊的数据类型,其本身就是一个变量,但在其中存放的是另一个数据的地址。在C51 中,指针的长度一般是 3 字节。根据所指向的变量类型的不同指针变量也有不同的类型,指针变量的类型也就表示了该指针指向的地址中的数据的类型

(6)bit 位标量:

        bit 位标量是 C51 的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是 0 就是 1,位变量的值可以取 0(假)或 1(真)。对位变量进行定义的语法

bit flag1;
bit send_en=1;
(7)sfr 特殊功能寄存器:

单片机内的各种控制寄存器、状态寄存器以及 I/O 端口锁存器、定时器、串行端口数据缓冲器是内部数据存储器的一部分,离散地分布在 80H ~ FFH 的地址空间范围内,这些寄存器统称特殊功能寄存器(Special Function Registers,SFR)。

sfr 类型的长度为 1 字节,其定义方式为

sfr 特殊功能寄存器名 = 地址常量 ;

       说明“地址常量”就是所定义的特殊功能寄存器的地址,举例如下

sfr TMOD=0x89; /* 定义定时器 / 计数器方式控制寄存器 TMOD 的地址为 89H*/
sfr P1=0x90; /* 定义 P1 口的地址为 90H*/

        注意,在关键字 sfr 后面必须是一个名字,名字可以任意选取,但应符合一般的习惯。等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H ~ 0FFH)。

(8)sfr16 16 位特殊功能寄存器:

        在新一代的 8051 单片机中,特殊功能寄存器在功能上经常组合成 16 位来使用。为了有效地访问这种 16 位的特殊功能寄存器,可采用关键字 sfrl6。sfrl6 类型的长度为 2 字节,其定义语法与 8 位 SFR相同,但 16 位 SFR 的低端地址必须作为 sfr16 的定义地址,举例如下。

sfr16 T2=0CCH; // 定义 TIMER2,其地址为 T2L=0CCH,T2H=0CDH。
(9)sbit 可寻址位:

        sbit 同样是 C51 中一种扩充数据类型,利用它能访问芯片内部的 RAM 中的可寻址位或特殊功能寄存器中的可寻址位,举例如下。PSW 是可位寻址的 SFR,其中各位可用 sbit 定义。

sbit CY=0Xd7; /* 定义进位标志 CY 的地址为 D7H*/
sbit AC=0xD0^6; /* 定义辅助进位标志 AC 的地址为 D6H*/
sbit RS0=0XD0^3; /* 定义 RS0 的地址为 D3H*/

        注意,sfr 和 sbit 只能在函数外使用,一般放在程序的开头。实际上大部分特殊功能寄存器及其可位寻址的位的定义在 reg51.h、reg52.h 等头文件中已经给出,使用时只需在源文件中包含相应的头文件,即可使用 SFR 及其可位寻址的位;而对于未定义的位,使用前必须先定义,举例如下。

#include<reg51.h>
sbit P10=P1^0;
sbit P12=P1^2;
main()
{
 P10=1;
 P12=0;
 PSW=0x08;
......
}

  • 13
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值