五、C语言的标识符和关键字
一个完整的PIC单片机C语言程序,通常由包含文件(即头文件1,变量定义、变量说明、函数定义、函数体和注释等六部分等组成。
1.C语言的标识符
所谓标识符,实际上是一些由程序编写者自定义的名称,类似于PIC单片机汇编语言中给寄存器(RAM)的命名。C语言中所用到的变量名、函数名、数组名、文件名等都是由标识符组成的。
标识符是由一串字母(常指英语字母)、数字和下线符(或称下划线)组成的字符串。标识符的第一个字符必须是字母或下线符。按照惯例,以下线符开头的标识符是系统程序专用的,程序员最好不用。程序员可将下线符作为分段符使用,如SUM_1。
同一字母的大小写被视为不同的标识符。即同一字母的大小写是不同的标识符。
不同的C编译器对标识符的长度有不同的限制。为了避免所编写的源文件能被所有C编译器认可,可将标识符的长度限定在8个字符以内(即1个字节)。
标识符的命名(即自定义),最好简捷、含意清晰、便于阅读,如用deIay表示延时;用sum表示求和;用loop表示循环等。
2.C语言的关键字
关键字,又称保留字,是指那些已由系统作了特殊定义、具有特定含义的标识符。,程序员编写C程序时,可用关键字来对所用函数参数进行说明、定义一些物理量,它们是C语言语句的重要组成部分,有的还直接组成简单语句。因此,用户是不能将此类标识符(关键字)作为自定义标识符使用的。
C语言的关键字分为三类,即数据类、程序控制类和预处理类,如表1所示。
表1
表1中所列关键字,读者在编写C程序时,将逐步学会其使用。
六、C语言的数据类型
在编写C语言程序时,首先要涉及的是数据描述和功能描述。数据是实现功能的过程,功能是数据运算(或处理)的结果,没有数据,C程序就无法实现单片机规定的功能,可见数据在C语言程序中的重要性。
C语言的数据类型,有基本型、构造型、指针型三类。对此,笔者将在使用时逐一介绍。
1.标准型
标准型数据属于基本型数据,是由C语言本身提供的基本数据类型,结构简单、使用频率高。下面以实例对C语言程序中的标准型数据予以说明。
标准型数据又分为整型数据、实型数据和字符型数据三种,每种数据又有常量和变量之分。笔者将其分类以表格形式列出,既可供初学者编写C语言程序时查找,亦可与本文中实例程序的注释进行对比学习,以加深对标准型数据的理解。
(1)整型常量。
整型常量,是指在程序运行过程中数值保持不变的量,在编写C程序时,整型常量用关键字const进行定义。表2给出了各种常量的类型、表示方法及示例说明。
表2
(2)整型变量。
整型变量。是指在程序运行过程中数值会改变的量。整型(即整数类型)变量的基本型是lnt。
Int可以保存一个整数,并允许在_nl前加上基本型、短整型、长整型,以及无符号型等四种整型类型。下面分别加以说明1)基本型:标志是int。
2)短整型:标志是shortint。
3)长整型:标志是long int。
4)无符号型:存储单元中,全部二进制位均用来存放整数自身。而不包括符号位。无符号型又分为无符号整型、无符号短整型、无符号长整型三种。
①无符号整型:标志是unsigned int:
②无符号短整型:标志是unsigned short int;
③无符号长整型:标志是unsigned Iong int。
以上C语言变量的要点,是相关的关键字,以及每个整型变量的取值范围,即长度(二进制位个数)。
PlC单片机C语言的整型变量、数据名称、取值范围如表3所示。表中的内容,在编写C程序时经常使用,初学者应熟练掌握。
表3
说明:1.表3列出了整型变量的取值范围。例如,从表3中可以看出,无符号长整型变量unsigned long int的最大取值可达10位数,将其用于延时函数,仅用一条循环语句,延时便可达20小时以上(参看下文中的实例2)。2.对于表3中的字符型(char)、浮点型(float)和双精度型doable等整型变量,将在本连载后续文章的程序使用到时进行说明。
七、C语言的控制循环语句
在C语言程序中,会用到多种功能语句。控制循环语句(下称循环语句)便是其中之一。
C语言的循环语句有三种,即while语句、do while语句和for语句。循环语句一般由循环控制条件来控制循环的重复次数。如果控制条件没有完成,要想终止循环,可在循环体中用间断语句break、返回语句retum,或者用继续语句continue来终止当前循环周期中的操作,使控制进入其他程序段。下面逐一进行介绍,并通过程序实例来说明其应用,以利大家加深理解。
1.while语句
(1)格式:while(条件表达式)
(2)功能:程序运行时,先判断条件表达式,当条件表达式的值为非零(即为“真”)时,执行while语句中的内嵌语句,即先判断条件表达式,再执行语句。当条件表达式为零时,退出循环;若表达式一开始就为0,其while语句一次也不执行;若条件表达式恒为1,则程序在while体内一直循环。
(3)程序实例2
1)硬件电路和功能硬件电路同《PIC单片机C语言程序设计(1)》一文的图1(见《电子制作》2009年第10期)。图中的RA0口外接的微动开关KO,作为程序的起动开关。KO未按下时。单片机系统处于等待状态,按一次KO,系统依次进行以下工作:RBO口外接的LEDO点亮→延时→LEDO熄灭→RB2外接的LED2点亮→延时→LED2灭→RB4外接LED4点亮→延时→LED4灭→执行间断语句break终止循环→点亮RB6外接的LED6→回到等待状态,直到RA0外接的微动开关KO再次按下,再重复上述过程。
2)源文件清单。
本实例2的程序清单如下(源文件名PIC02.C):
说明:
① 上述程序中,关键字break、continue和return等组成的简单语句的使用是略有区别的。具体区别如下:
间断语句break:程序运行到此就终止循环,跳出while(1)的循环体,执行该循环体紧接在后面的语句:
· 继续语句continue:如果把该程序中的break语句换成继续语句continue。程序运行到此便立即执行由while(1)开始功能的程序,即程序在该循环体内不断地运行,等效于不用continue;语句;·return语句:当把该程序中的break换成return语句时,程序运行到此就会立即返回主程序运行。
读者学习C语言时,一定要将实例2源程序中的关键字“break”分别用“coutinue”和“return”代换并运行程序,同时观察使用三种不同的关键字时LED指示灯的不同状态,方能体会出三者的差异。
② 关于带形式参数(简称形参)的延时函数。
实例2所用的延时函数与实例1不同。实例1(见《电子制作》2009年第10期)用的是无参数函数,功能简单,一个函数完成一定的延时。实例2用的是有参数延时函数,一个函数可完成不同的延时(如上述实例2 中的延时1、延时2、延时3、延时4)。这是因为,带形参函数(如实例2中的延时函数v0id delay(K))可以借助参数的传递功能来完成不同时间的设置,这是汇编语言所无法做到的。由此可见,采用C语言可大大简化程序的编写工作。
鉴于形参对熟悉汇编语言的设计人员来说是一个全新的概念,有关C语言的函数参数传递功能,我们在后续的文章中还将进一步介绍,以加深大家对其的理解。