首页 理论教育C51程序简介及特点

C51程序简介及特点

【摘要】:通过对上述程序的分析,可以初步了解到C51程序采用的是一种结构化的程序设计思想,它以函数形式组织程序的基本结构。C51程序的结构示意图如图4-17所示。单片机的C51语言和标准C语言相比,又有不同的特点。

单片机是一种可编程的器件,我们需要将程序预先编写好,并保存到单片机的存储器中,单片机才能按照预先的设定执行程序。

最初人们使用机器码(0与1组合)来给单片机编写程序,后来开始使用汇编语言来编写程序,汇编语言和单片机的硬件结合性好,代码简洁高效,使用汇编语言开发的程序在单片机存储空间有限的环境里能大显身手。随着近年来FLASH存储器技术被大量地应用,单片机的存储空间已经不再是瓶颈,使用汇编语言开发程序的优势已经不复存在,而C语言因其具有描述能力强、可移植性好、逻辑缜密、模块化结构等诸多优点,非常适合大型程序的开发,近年来在嵌入式系统的程序开发中被越来越广泛地应用。

C语言有着悠久的历史和众多用户群。1970年,美国贝尔实验室的Ken Thompson以BCPL语言为基础,设计出既简单又接近硬件的B语言,并且用B语言编写了第一个UNIX操作系统。1972年,美国贝尔实验室的D.M.Ritchie在B语言的基础上设计出一种新的语言,并且以BCPL语言的第二个字母作为这种语言的名字,即C语言。1977年,D.M.Ritchie发表了不依赖于具体机器系统的C语言编译文本——《可移植的C语言编译程序》,使C语言程序可以使用在任意架构的处理器上,只要该处理器具有对应的C语言编译器和库,然后将C源代码编译、链接成目标二进制文件之后即可在目标处理器上运行。

1982年,很多有识之士和美国国家标准学会(ANSI)为了使C语言健康地发展下去,成立了C标准委员会,建立了C语言的标准。1989年,ANSI发布了第一个完整的C语言标准ANSI X3.159#1989,简称“C89”,也就是我们经常说的“ANSI C”,C语言从此步入了规范化的道路。

在给单片机开发应用程序时,使用C语言编写代码已经是一种趋势,本项目对C语言进行一个总体上的介绍,深入的学习要在后续项目中结合实施具体的任务来完成。

4.2.1 C51程序的认识

1位LED信号灯闪烁控制的C语言源程序:

第一行:文件包含的语句是C51程序的预处理部分,用“#include”定义。预处理部分放在程序的头部,所引用的文件也称为“头文件”,头文件的作用是将另外一个文件中的内容包含到当前文件中,头文件通常会将一些常用函数的库文件、用户自定义的函数或者变量包含进来。

关文件“reg51.h”的作用是将单片机一些特殊功能寄存器包含在其中,便于用户直接使用。例如,程序第3行“sbit led1=P1^0;”中的P1不是普通变量名,而是51单片机中的寄存器,它的地址是0x90。

第二行:宏定义语句“#define”,这个命令作用是用一个标识符(宏名)来表示一个字符串,其格式为:

#define标识符(宏名)字符串

本例中的意思是用“unit”来表示“unsigned int”,unsigned int是C51的一种数据类型,在程序中凡是有“unit”的位置,编译时全部被替换为“unsigned int”。

第三行:位定义,sbit是C51的位定义关键字,本句的意思是定义一个位变量led1,同时给其赋值为P1^0的值。

第四行:定义变量i和j,变量类型为无符号整形,C51的变量都是先定义后使用。

第五行至十六行:main()为主函数,程序执行时,先执行main()函数,在main()中调用其他函数。项目2和项目3中调用了延时函数delay()。

通过对上述程序的分析,可以初步了解到C51程序采用的是一种结构化的程序设计思想,它以函数形式组织程序的基本结构。

4.2.2 C51程序的基本结构

1.源程序的构成

一个C51源程序由一个和几个函数组成,每一个函数功能相对独立。每个C51源程序有且仅有一个主函数main(),程序的执行部是从主函数开始并在主函数结束。C51程序的结构示意图如图4-17所示。

图4-17 C51程序结构示意图

一个函数由两部分组成:函数定义和函数体。函数定义部分包含函数类型、函数名、函数的参数及参数的类型。函数后面的一对大括号“{}”内的部分为函数体,它由函数中使用的变量的数据类型和函数功能部分组成。

函数名称前的void为函数类型,void表示空类型,无返回值。

前面几个任务中的源程序由两个函数构成:主函数main()和延时函数delay()。主函数名是由编译系统决定的,必须用main表示,其他函数名由用户命名。关于函数的更多介绍在后续项目介绍。

2.语句结束标志

C语言语句必须以“;”结束,一条语句可以多行书写,也可以一行书写多条语句。

3.注 释

为了提高程序的可读性,便于理解程序代码的含义,按照程序书写的规范要求在代码后面要添加一些注释,说明程序在“做什么”,解释代码的目的、功能和采用的方法。注释语言必须准确、易懂且简洁。

注释的方式有两种:一种是采用“/*……*/”的格式;另外一种是采用“//……”格式。前者可以注释多行,后者只能注释一行。

(1)文件注释:必须说明文件名、功能等相关信息。重要文件,还要加上文件创建人、创建日期和版本信息等。

文件注释放在文件的顶端,用“/*……*/”的格式包含;每个注释文本的分项名称就对齐。建议注释文本每行缩进4个空格,如下:

(2)函数注释:C语言程序是由函数组成的,每一个函数功能是相对独立的。所以,常常在函数头部加注释说明函数名称、函数功能、入口参数等内容。

函数头部注释在每个函数的顶端,用“/*……*/”的格式包含,如下:

(3)代码注释:通常放在被注释的右方,采用“//……”格式。注释部分左对齐。(www.chuimin.cn)

4.2.3 单片机C51语言的特点

51系列单片机支持汇编语言、C语言编程。C语言是一种编译型程序设计语言,它具备各种高级语言的特点,同时又具备汇编语言的功能。51系列单片机中应用的C语言简称为C51语言。

C51语言有很多优点:不需要了解单片机的指令系统,仅需要对单片机存储器结构有初步了解;不同存储器的寻址及数据类型等细节问题由编译器管理;程序结构化明显;系统提供了很多标准的库函数,应用方便;整个系统的开发便于维护与管理。

单片机的C51语言和标准C语言相比,又有不同的特点。

(1)C51语言与C语言定义的库函数不同。

(2)C51语言中的数据类型和C语言的数据类型有一定的区别。

(3)C51语言中的变量和C语言的变量的存储模式不同。

(4)C51语言与C语言的输入/输出处理不同。

(5)C51语言与C语言在函数使用方面有一定的区别。

C51交叉编译器提供了51系列单片机用C语言编程的方法。它具备了C语言编程的特点,但它运行于单片机技术开发平台。它具有C语言结构清晰的优点,同时还具备汇编语言的硬件操作能力,这也是目前单片机开发系统中C51语言被广泛应用的原因。

4.2.4 C51语言的标识符与关键字

C51语言和任何高级语言一样,有规定的标识符、关键字和语法规则。

1.标识符

标识符用于标识源程序中某一个对象的名称,对象可以是函数、变量、常量、数据类型、存储方式或语句等。

标识符的名称可以是一个字符,也可以是多个字符。第一个字符必须是字母或下划线,后跟字母、数字、下划线的组合。标识符区分大小写。长度不得大于32个字符,而通常是前8个字符有效。例如,a、 a、a12等都是标识符。但是1、1a、?a、&a1等都不是合法的标识符。标识符的命名除了满足字符组合方面的原则外,还要遵循下述原则。

1)一致性

同一个模块内部的标识符命名要一致。例如,如果规定变量的首字母大写,用全部大写表示常量,那么整个模块内都应该这么写。

2)准确性

用词要准确,避免概念模糊或形式相近的标识符。例如,定义Total表示合计要比随意用一个变量来表示要明确得多。myFun、temp等模糊概念的变量要避免。

3)长度短,信息多

在保持准确性的前提性,要力争长度短,信息多,即用最短数目的字符数表示尽可能多的信息。例如,用Total表示合计,而不用TotalOfNumbers。

2.关键字

用C51语言编程时,有一组特殊意义的字符串,即“关键字”。这些关键字是C51已经定义的具有固定名称和特定含义的特殊标识符,也称保留字,源程序中用户自己命名的标识符不和关键字重名。C51语言的关键字可以分为以下两大类。

1)由ANSI(美国国家标准学会)标准定义的关键字

(1)数据类型关键字。用于定义变量、函数或其他数据结构的类型,例如:int、unsigned char等。

(2)控制语句关键字。程序中起控制作用的语句,例如:while、if、case等。

(3)预处理关键字。表示预处理命令的关键字,例如:include、define等。

(4)存储类型关键字。表示存储类型的关键字,例如:auto、extern、static等。

(5)其他关键字。例如:sizeof、const等。

2)C51编译器扩充关键字

(1)访问51系列单片机内部寄存器的关键字。C51编译器扩充了关键字sfr和sbit,用于定义单片机的特殊功能寄存器和能进行位寻址的某一位。

定义特殊功能寄存器。例如“sfr P1=0x90”,即定义地址为“0x90”的特殊功能寄存器的名称为P1。

定义特殊功能寄存器中的某一位。例如“sbit LED2=P1^2”,即定义了P1.2(特殊功能器P1的第2位)为LED2。

(2)51系列单片机存储类型的关键字。常见的C51编译器支持的存储器类型关键字见表4-2。

表4-2 存储器类型关键字