C51语言
C51语言与标准C语言间有许多相同地方,但也有自身特点。不同的嵌入式C语言编译系统之所以与标准C语言有不同的地方,主要是由于它们所针对的硬件系统不同。对于8051单片机,目前广泛使用的是C51语言。
C51语言基本语法与标准C相同,是在标准C的基础上进行适合8051内核单片机硬件的扩展,但与标准c又有不同之处:
- 库函数不同:
例如,在标准C中,库函数printf和scanf,常用于屏幕打印和接收字符,而在C51语言中,主要用于串行口数据的收发。
- 数据类型有一定区别:
例如,8051单片机包含位操作空间和丰富的位操作指令,因此,C51语言与标准C语言相比增加了位类型。
- C51语言变量存储模式与标准C语言中变量存储模式数据不同:
标准C最初是为通用计算机设计的,在通用计算机中只有一个程序和数据统一寻址的内存空间,而C51语言中变量的存储模式与8051单片机的各种存储器区紧密相关。
- 数据存储类型不同:
8051存储区可分为内部数据存储区、外部数据存储区以及程序存储区。
- 其他不同:
中断。标准C语言没有处理单片机中断的定义,而C51语言中有专门的中断函数。
头文件。C51语言头文件必须把8051单片机内部的外设硬件资源(如定时器、中断、I/O等)相应的特殊功能寄存器写入到头文件内,而标准C不用。
程序结构。由于8051单片机的硬件资源有限,它的编译系统不允许太多的程序嵌套。其次,标准C语言所具备的递归特性不被C51语言支持。
C51支持的基本数据
数据类型 | 位数 | 字节 | 值域 |
signed char | 8 | 1 | -128~127 |
unsigned char | 8 | 1 | 0~255 |
signed int | 16 | 2 | -32768~32767 |
unsigned int | 16 | 2 | 0~65536 |
signed long | 32 | 4 | -32768~32767 |
unsigned long | 32 | 4 | 0~4294967295 |
float | 32 | 4 | -2147483648~2147483647 |
double | 32 | 4 | +-1.75494E-38~+-3.402834E+38 |
* | 8~24 | 1~3 | 对象指针 |
bit | 1 | 0/1 | |
sfr | 8 | 1 | 0~255 |
sfr16 | 16 | 2 | 0~65536 |
sbit | 1 | 0/1 |
- 定义:临时变量只能定义在代码块的最开始,即”{“后面,且变量定义前不能有非定义语句。因为Keil能够在编译时就比较好确定栈内存,如果超过限定内存会报编译错误。(此处基于C89规范,C99没有此限制。)
- 申明:如果外部文件需要使用全局变量,使用extern来限定。
- 初始化:全局变量和局部变量,如果没有指定初始化值,默认为0。
- bit:位类型,bit指定的变量可以直接按拉寻址,所以需要特殊的内存匹配&#