3.1.2 C51语言的基本数据类型
当给单片机编程时,单片机也要运算,而在单片机的运算中,“变量”数据的大小是有限制的,不能随意给一个变量赋任意的值,因为变量在单片机的内存中是要占据空间的,变量大小不同,所占据的空间就不同。所以在设定一个变量之前,必须要给编译器声明这个变量的类型,以便让编译器提前从单片机内存中分配给这个变量合适的空间。C51语言中常用的数据类型如表3-1所示。
表3-1 C51语言中常用的数据类型
1.char字符类型
char类型的长度是1字节,通常用于定义处理字符数据的变量或常量。分无符号字符类型unsigned char和有符号字符类型signed char,默认值为signed char类型。unsigned char类型用字节中所有的位来表示数值,所能表达的数值范围是0~255。signed char类型用字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示。所能表示的数值范围是—128~+127。unsigned char类型常用于处理ASCII字符或用于处理小于或等于255的整型数。
注:正数的补码与原码相同,负二进制数的补码等于它的绝对值按位取反后加1。
2.int整型
int整型长度为2字节,用于存放一个双字节数据。int整型分有符号int整型数(signed int)和无符号整型数(unsigned int),默认值为signed int类型。signed int类型表示的数值范围是—32768~+32767,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。unsigned int类型表示的数值范围是0~65535。
当定义一个变量为特定的数据类型时,在程序使用该变量时不应使它的值超过数据类型的值域。
3.long长整型
long长整型长度为4字节,用于存放一个4字节数据。long长整型分有符号long长整型(signed long)和无符号长整型(unsigned long),默认值为signed long类型。signed int类型表示的数值范围是—2147483648~+2147483647,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。unsigned long类型表示的数值范围是0~4294967295。
4.float浮点型
float浮点型在十进制中具有7位有效数字,是符合IEEE 754标准的单精度浮点型数据,占用4字节。
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一样用于操作特殊功能寄存器,不一样的是sfr16用于操作占2字节的寄存器,如定时器/计数器T0和T1。
9.sbit可寻址位
sbit同样是单片机C语言中的一种扩充数据类型,利用它能访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。如果前面定义了sfr P1=0x90,因P1口的寄存器是可位寻址的,所以能定义P1口中的P1.1引脚,用指令sbit P1_1=P1^1定义P1_1为P1口中的P1.1引脚。
同样我们能用P1.1的地址去写,如sbit P1_1=0x91,这样在以后的程序语句中就能用P1_1来对P1.1引脚进行读写操作了。通常这些能直接使用的、由系统提供的预处理文件中已定义好各特殊功能寄存器的简单名字。