第三讲-C语言基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

13单片机的C语言基础C语言是一种高级程序设计语言,C语言具有汇编语言和高级语言的双重特性,既可以作为系统设计语言来编写操作系统,也可以作为应用程序设计语言来编写不依赖计算机硬件的应用程序。它的优点是可读性强和可移植性高。使用C语言来开发程序不但可以减少程序开发的时间,而且所开发出来的程序不会占据大量的程序存储器,因此许多嵌入式系统程序都使用C语言作为开发工具。目前,单片机使用C语言编写程序比较流行,特别是对于初学者,利用C语言编写单片机程序根本不用了解通用寄存器的应用过程以及内部各个部件的地址,只需记住特殊寄存器的作用就可以编写完美的程序。单片机C语言程序设计过程中,虽然出现了各种不同的C语言编译器,但使用C语言编程时仍然依照C语言格式进行。在这一节中,我们将学习单片机程序设计中常用的C语言基础知识。本节任务:1.掌握C语言程序设计的基本方法;2.掌握C语言的控制命令的使用方法;3.掌握C语言的指针、函数的使用方法;4.掌握C语言程序中嵌入汇编语言的方法。3.1.1C语言概述一、C语言简介C语言诞生于20世纪70年代初在贝尔实验室,当时的目的是作为UNIX操作系统的实现语言。随着UNIX操作系统的广泛使用,C语言也迅速得到推广。C语言在发展过程中出现了多种版本,并且得到不断的改进。各个C语言版本之间存在一些不一致的地方。美国国家标准协会(ANSI)在1983年对C语言进行了改进和扩充,制定了ANSIC标准,并于1989年再次修订。二、C语言的特点C语言可读性强和可移植性高的优点。C语言的主要特点如下:(1)C语言是一种面向过程的高级程序设计语言。(2)可移植性好,编写的程序能够适应各种平台。(3)C语言语言简洁,结构紧凑,使用方便、灵活。(4)C语言是一种模块化的程序设计语言。(5)数据处理能力强,运算符丰富。三、单片机使用C语言的基本格式在开始学习C语言之前,我们先看一个完整的单片机程序案例,该程序目的是想让单片机的P0.0口驱动一个LED明灭闪烁。本程序利用KeilC软件编写。/************************/#includeregx51.hsbitLED=P1^0;//定义LED为P1_0;voiddelay(void){inti,j;for(I=1;I=255;i++)//延时一段时间for(j=1;j=255;j++);}voidmain(void){LED=0;2while(1){delay();LED=!LED;}}/************************/从以上程序中我们看到C语言程序有以下特点:(1)C语言程序中大小写是有所区别的,基本上C语言大都是使用小写。(2)程序中每一条指令的结尾都必须加上分号“;”。每一个声明,每一个语句都必须以分号结束。但预处理命令、函数头和大括号“}”之后不能加分号。(3)C语言程序中,main()表示主程序,程序都是从该函数开始运行,所以程序中一定要有且仅有一个main()函数,但可以有多个其他函数(如min()函数等),每一个函数完成相对独立的功能,函数是C语言程序的基本模块单元。main()是函数名,后面的一对圆括号“()”用来写函数的参数,参数可以省略,但圆括号不能省略。(4)函数之后的“{”表示本函数开始,“}”表示本函数结束。(5)程序中所使用的变量一定要预先作声明,换言之,变量的声明必须放在程序的开头。(6)为了增强程序的可读性,低一层次的语句或声明通常比高一层次的语句或声明缩进若干格后书写,以体现层次结构四、编译预处理所谓预处理,是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所做的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动调用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。预处理命令都以“#”开头,每个处理命令必须单独占一行,且末尾不使用分号作为结束符。预处理命令放在源程序的首部,作用域是从当前说明的地方开始到文件结束,在文件之外就失去作用。常用的预处理命令有宏定义、条件编译和文件包含。C语言有以下一些编译指令,如表2-1-1所示。表3-1-1编译预处理编译指令说明#include包含另一个文件#define定义一个宏(macro)或是常量#undef取消一个宏或是常量的定义#asm和endasm在程序中加入汇编语言的程序#ifdef、#indef、#else和#endif用于条件式的编译#include指示编译器把它所包的文件加进来一起进行编译。#includeregx51.h是把文件regx51.h包含进来,而文件regx51.h定义所有8051的特殊用途寄存器的地址和一些经常使用的常量;另外一个文件stdio.h定义C语言经常使用的基本输入输出函数。#include之后所跟随的文件如果放在“”内就表示该文件位于include子目录中;如果被包含的文件保存在当前的工作目录中时,就必须用“”括起来。如果您使用到C语言的一些特定函数时,就必须将定义这些函数的文件包含进来一起编译。无参宏定义命令的一般格式如下#define标识符字符串3其中,“标识符”为所定义的宏名。“字符串”可以是常量、表达式、格式串等。#define命令出现在程序中所有函数的外面,宏名的有效范围为定义命令之后到本源文件结束,但可用#undef命令终止宏定义的作用域。其他编译预处理内容在后面用到时候具体讲解。五、注释为增强程序的可读性,编程人员可以在程序的每一指令后面中加入注释,这样可以让程序更容易让人阅读,一个高质量的程序,应在其源程序中加上必要的注释,在注释中也可以使用汉字进行注释。C语言的注释可以分成两种:单行注释和多行注释。单行注释格式为//注释内容以双斜线“//”开始,双斜线之后的文字都是注释,但是只能在同一行,多行注释格式为/*注释内容*/多行注释是以/*开始、以*/结束的注释,在“/*”和“*/”之间的文字都是注释。并且必须配对使用,多行注释可以占用一行,也可以占用许多行,程序编译时,不对注释做任何的处理。3.1.2数据类型一、基本数据类型C语言提供了5种基本数据类型,分别是整形(int)、单精度型(float)、双精度型(double)、字符型(char)、空类型(void),还有一些数据类型修饰符,用来扩充基本类型的意义,以便更准确地适应各种情况的需要。修饰符有long(长型)、short(短型)、signed(有符号)、unsigned(无符号)。这些修饰符与基本数据类型的关键字组合可以表示不同的数值范围以及数据所占内存空间的大小。如表2-1-2所示。表2-4-2KeilC可以使用的合法数据类型和说明数据类型数据类型说明长度数据长度bit位1位0,1char字符8位-128~127unsigned无符号字符8位0~255Signedchar有符号字符8位-128~127int整型16位-32768~32767shorint短整型16位-32768~32767unsignedint无符号整型16位0~65535signedint有符号整型16位-32768~32767longint长整型32位-2147483648~2147483647unsignedlongint无符号长整型32位0~4294967295signedlongint有符号长整型32位-2147483648~2147483647float浮点数32位0.175e-38~0.402e38double双精度浮点32位0.175e-38~0.402e38void空0位没有任何数据除了基本数据类型之外,用户也可以自己的数据类型。譬如,用户要记录时间或日期时,可以分别用不同的变量储存时、分、秒,可是年、月、日,如:charhour,minute,second,year,moth,day;但是也利用结构体自定义时间和日期等数据类型,如下所示:4/************************/typedefstruct{charhour;charminute;charsecond;}time;typedetstruct{charyear;charmonth;charday;}data;/************************/当用户定义好time和date之后,就可以声明数据类型是time和date变量,如timenow,alarm;datetoday,tmpday;实际上,C语言编译器会在数据存储器中保留适当的位置以储存这些变量,如图3-1所示。用户自定义数据类型的定义格式如下:typedefstruct{数据类型变量序列1;数据类型变量序列2;…}自定义数据类型的名称;二、标识符标识符就是编程人员为程序中的变量、常量、标示或取的名字。在C语言的每一个程序中所使用的函数和变量等都应有唯一的名称,这样才能被识别和使用。在上面的范例中,变量i和j者是用户自己取的名称,因为他们都是标识符。符号常量名、变量名、函数名、标号、数组名、文件名、结构体类型名和其他各种用户定义的对象名都是标识符。编程人员所命名的标识符发布遵守一定的命名规则,如下所述:(1)标识符只能英文字母、数字以及下划线(_)所组成。(2)标识符只能以英文字母或下划线开头。(3)标识符的长度不能超过32字符。(4)大小写英文字母是不同的。(5)保留字不能作为标识符。如:以下是合法的标识符:Num,num1,buffer_1,i,flag,以下是不合法的标识符:1num,buffer1,int。标识符在使用过程中用于标识量,可以用单词和短语来表示一定含义,避免混淆。Num和num是不同的标识符,因为C语言中大小写英文字母是不同的。三、关键字关键字是C语言使用的命令,作为关键字的每个标识符在C语言程序中都有预先定义好的特殊意义,这些关键字不能用于任何其他目的。所以不能用作变量的名字,在KeilC中的关键字除了ANSIC标准中的32个关键字外,还根据51单片机的特点扩展了相关的关键字,以下是KeilC的关键字。_at_alienbdatabreakbitcasecharcodecompactdatadefaultdodoublefarelseenumexternfloatforgotoif5idataintinlineinterruptlargelongpdata_priority_reentrantreturnsbitsfrsfr16shortsignedsizeofsmallstructtypedefusingunionunsignedvoidwhilexdata四、常量整型常量即为整型常数,可以用十进制、八进制和十六进制三种形式表示。凡是以数字0开头,由数字0~7组成的序列均作为八进制数处理;凡是以0x(或0x)开头的由数字、字符a~f(或A~F)组成的序列均作为十六进制数处理;其他情况下的数字序列均作为十进制数处理。表3-1-3各种常量使用的规则和范例各种常数规则范例十进制一般十进制格式1234二进制开头加上0b0b00110110八进制开头加上OO0123十六进制开头加上0x0Xff00无符号整数常量结尾加上U30000U长整数常量结尾加上L299L无符号长整数常量结尾加上UL320000UL浮点数的常量结尾加上F4.312F字符常量以单引号括起来‘a’字符常量以双引号括起来“Hello”在C语言程序中,可以定义一个符号来代表一个常量,这种相应的符号称为符号常量。定义符号常量的目的是为了提高程序的可读性,便于程序的调试、修改和移植。因此在定义符号常量时,所使用的符号常量名应尽可能地表达其所代表的常量的含义。在C语言中,符号常量在使用前必须先用预处理命令#define进行定义。例如:#defineTRUE1#defineFALSE0这种语句的格式是在#define后面跟一个标识符和一串字符,彼此之间用空格隔开。由于不是C语句,因此语句末不用分号。当程度被编译时,先被编译预处理。即当预处理遇到#define时,就

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功