与标准的ANSI C相比,C51程序在头文件、数据类型、数据的存储类型、中断处理以及库函数等方面都有一定差异,主要原因是单片机程序更服从于硬件系统。
1.系统硬件头文件
MCS-51系列单片机厂家有多个,它们的差异在于内部资源如定时器、中断、I/O等数量以及功能的不同。对于使用者来说,只需要将相应功能寄存器的头文件加载在程序内,就可实现所具有的功能。因此,Keil C51系列的头文件集中体现了各系列芯片的不同资源及功能。如MCS-51架构的单片机系统头文件为reg51.h,增强型51系列单片机由于内部增加了定时器T2,因此要用到的头文件为reg52.h。程序设计时,程序须包含reg51.h或reg52.h头文件。
2.数据类型
MCS-51系列单片机包含位操作空间和位操作指令,单片机片内寄存器也可以由用户定义,因此Keil C51在标准C语言数据类型的基础上,扩展了bit、sbit、sfr、sfr164种数据类型声明,以便能够灵活地进行操作。
另外,由于MCS-51系列单片机有片内、片外程序存储器,还有片内、片外数据存储器,因此Keil C51中增加了数据存储类型操作指令。C语言最初是为通用计算机设计的,在通用计算机中只有一个程序和数据统一寻址的内存空间,标准C语言并没有提供这部分存储器地址范围的定义。(www.xing528.com)
3.Keil C51的库函数
由于标准C语言中存的库函数不适于嵌入式处理器系统,因此这些函数库没有被Keil C51采用,如字符屏幕和图形函数。有一些标准C语言库函数可以在Keil C51继续使用,但这些库函数都必须针对MCS-51系列单片机的硬件特点进行相应的开发,与标准C语言库函数相比,在构成与用法上有很大的不同。例如库函数printf和scanf,在标准C语言中,这两个函数通常用于屏幕打印和接收字符,而在Keil C51中,它们主要用于串行数据的收发。
4.单片机的程序结构
由于MCS-51系列单片机的硬件资源有限,所以它的编译系统不允许太多的程序嵌套。标准C语言所具备的递归特性也不被Keil C51支持。在C51中,要使用递归特性,必须用reentrant进行声明。
在Keil C51中还定义了与单片机中断处理有关的关键字,这一点与标准C语言有较大差异。从数据运算操作、程序控制语句以及函数的使用上来说,Keil C51与标准C语言几乎没有什么明显的差别。如果程序设计者具备了有关标准C语言的编程基础,只要注意Keil C51与标准C语言的不同之处,并熟悉MCS-51系列单片机的硬件结构,就能够较快地掌握Keil C51的编程方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。