单片机以其体积小、质量轻、成本低、功耗低等特点广泛应用于各个领域。C语言作为一种简洁高效的编译型高级语言,具备可读性好、可靠性高、运算速度快、编译效率高、可移植性好、有功能丰富的函数库等特点,并且可以直接实现对系统硬件的控制。
当前,许多单片机硬件开发人员纷纷舍弃了汇编语言,而改用单片机C语言进行系统编程。汇编语言有执行效率高的优点,但其可移植性和可读性差,并且它本身就是一种编程效率低下的低级语言,这些都使它的编程和维护极不方便,从而导致整个系统的可靠性也较差。而使用C语言进行嵌入式系统的开发,有着汇编语言编程不可比拟的优势。
【编程、调试灵活方便】 C语言作为高级语言的特点决定了它灵活的编程方式。它具有丰富的数据结构类型,可以根据需要采用整型、实型(又称为浮点数型)、字符型、数组类型、指针类型、结构类型、联合类型、枚举类型等多种数据类型实现各种复杂数据结构的运算。C语言的语法规则不太严格,程序设计的自由度较大,程序的书写格式自由灵活。同时,当前几乎所有系列的嵌入式系统都有相应的C语言级别的仿真调试系统,使得它的调试十分方便。
【生成的代码编译效率高】 过去长期困扰人们的所谓“高级语言产生代码太长,运行速度太慢,因此不适合单片机使用”的缺点经过多家公司艰苦不懈的努力,已被大幅度地克服,终于在20世纪90年代开始趋于成熟,现已成为专业化的单片机高级语言。目前,单片机上C语言的代码长度已经做到了汇编水平的1.2~1.5倍。代码长度在4KB以上的程序,C语言的优势更能得到发挥。至于执行速度的问题,只要有好的仿真器的帮助,找出关键代码,进一步用人工优化,就可以很简单地达到十分完美的程度。
【完全模块化】 C语言以函数作为程序设计的基本单位,一种功能由一个函数模块完成,这相当于汇编语言中的子程序。数据交换可以方便地约定实现,这样十分有利于多人协同进行大系统项目的合作开发;同时,由于C语言的模块化开发方式,使得用它开发的程序模块可不经修改就被其他项目所用,可以很好地利用现成的大量C程序资源与丰富的库函数,从而最大程度地实现资源共享。
【可移植性好】 由于不同系列的嵌入式系统C语言编译工具都是以1983年的ANSI C作为基础进行开发的,因此,一种C语言环境下所编写的C语言程序,只需将部分与硬件相关的地方进行适度修改,就可以方便地移植到另外一种系列上。对于许多单片机开发人员来说,以前大都使用汇编语言或C51进行8051单片机的系统开发,若一下子改用PIC单片机,由于PIC单片机也有一套汇编指令集,如果再学PIC汇编指令集,这样会花费大量的时间,若采用C语言进行PIC单片机编程,则只需将C51下编写的程序改写头文件,同时做少量的程序修改,即可方便地移植到PIC系列上。也就是说,基于C语言环境下的嵌入式系统能基本达到平台的无关性。
【便于项目维护管理】 用C语言开发的代码便于开发小组计划项目、灵活管理、分工合作,以及后期维护,基本上可以杜绝因开发人员变化而给项目进度或后期维护或升级带来影响,从而保证了整个系统的高品质、可靠性及可升级性。
【可以直接操作单片机硬件】 C语言具有直接访问单片机物理区域的能力,可以直接访问片内或片外存储器。当一下子改用PIC单片机时,程序开发人员即使并不完全懂得PIC单片机的具体硬件,也能够编出符合硬件实际专业水平的程序。
PIC单片机既可以采用汇编语言开发,也可以采用C语言开发。由于PIC10、PIC12、PIC16等系列的8位单片机片内程序区较小,Microchip公司没有推出针对这些中、低档系列PIC单片机的C语言编译器,而只提供针对PIC18、PIC24、dsPIC、PIC32系列单片机的C语言编译器MCC(MCC18/MCC30/MCC32)。但很多专业的第三方公司提供众多支持PIC单片机的C语言编译器,常见的有HITECH、CCS等公司。HITECH公司(现已成为Microchip旗下的一家全资子公司)的PICC编译器稳定可靠,编译生成的代码效率高,在用PIC单片机进行系统设计和开发的工程师群体中得到了广泛认可。
HI-TECH PICC是一款高效的C编译器,支持Microchip PICmicro 10/12/14/16/17系列控制器。它是一款强劲的标准C编译器,完全遵守ISO/ANSI C,支持所有的数据类型(包括24 and 32 bit IEEE标准浮点类型)。由于PIC单片机特殊的堆栈结构,使得HI-TECH PICC不支持函数的递归调用。PIC单片机中的堆栈是硬件实现的,其深度已随芯片固定,无法实现需要大量堆栈操作的递归算法;另外,在PIC单片机中实现软件堆栈的效率也不是很高。为此,HI-TECH PICC编译器采用一种“静态覆盖”技术,以实现对C语言函数中的局部变量分配固定的地址空间。经过这样处理后产生出的机器代码效率很高。当代码量超过4KB后,C语言编译出的代码长度与全部用汇编代码实现的差别已经不是很大(<10%),当然前提是在整个C代码编写过程中需时时注意所编写语句的效率。
本书中所使用的MPLAB-IDE软件包中默认情况下已经安装了HI-TECH PICC LITE V9.60PL1版本的编译器。此编译器是HI-TECH PICC的精简版本,能够支持PIC16F877、PIC16F877A、PIC16F873等几款常见芯片的C语言源代码编译,但是有ROM和RAM的使用限制: 目标文件ROM使用量小于2KB; 目标文件RAM仅能使用Bank0和Bank1(2个体256B); 目标文件优化程度低,占用ROM/RAM较多。
但是,这些限制不影响初学者对PIC单片机C语言的学习,所以本书还是以此版本为例介绍PIC单片机C语言的基础和编程。如果用于实际项目的开发,建议购买正版HI-TECH PICC编译器或使用更高版本的精简版,那样就可以利用所有单片机的资源并充分发挥编译器的优化能力。
CCS PIC虽然也是一款高效的C语言编译器,但因为头文件不同,所以它的程序和HITECH PICC、MCC都不一样,三者的程序不能混着编译,比如针对CCS PIC编写的程序只能用CCS PIC的编译器编译,用HI-TECH PICC编译可能报错。