单片机C语言

上传人:xy****7 文档编号:59051059 上传时间:2018-11-03 格式:PPT 页数:40 大小:248KB
返回 下载 相关 举报
单片机C语言_第1页
第1页 / 共40页
单片机C语言_第2页
第2页 / 共40页
单片机C语言_第3页
第3页 / 共40页
单片机C语言_第4页
第4页 / 共40页
单片机C语言_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《单片机C语言》由会员分享,可在线阅读,更多相关《单片机C语言(40页珍藏版)》请在金锄头文库上搜索。

1、第6章 单片机C语言程序设计基础,前面一章介绍了汇编语言的单片机程序。在单片机的开发与应用中,除了汇编语言,也可以采用其他高级语言,如C语言。单片机C语言既有汇编语言的操作底层硬件的能力,又具有高级语言的许多优点。因此,在现代的单片机程序设计中广泛采用单片机C语言。本章主要介绍了单片机C语言程序设计的基础知识,包括标识符、关键字、数据类型、表达式和运算符等。熟练掌握这些知识,将为下面学习C51的函数和语句打好基础。,6.1 单片机C语言概述,对比现有的程序设计语言,C语言以其功能强大、结构清晰等优点获得广泛应用。对于学过C语言的读者来说,再学其他语言就显得轻而易举了。而在单片机程序设计中,同样

2、有应用于单片机的C语言,有时简称为C51语言。C51语言继承了C语言的结构上的优点,便于学习,又有汇编语言操作硬件的能力,因此被广泛使用于单片机程序设计中。,6.1.1 单片机C语言和汇编语言对比,汇编语言是一种面向机器的程序语言,其可以直接控制硬件,指令执行速度快,且指令的执行时间固定,因此汇编语言的执行效率很高。但其语言格式比较晦涩、可读性差、难于编写和调试,也不便于移植,影响了程序代码的共享。 与汇编语言相比,单片机C语言在结构上更易理解、可读性强,且开发速度快、可靠性好、便于移植。因此,使用单片机C语言进行单片机系统的开发,可以缩短开发周期、降低开发成本。随着单片机硬件系统的发展和产品

3、更新速度的提升,单片机的开发越来越着重于程序本身的开发效率,以便快速占领市场。因此,单片机C语言已成为目前最流行的单片机开发语言。,6.1.2 C51语言的主要特点,单片机的C51语言特点很多,总结起来主要的有以下几点: 单片机C51语言兼备高级语言与低级语言的优点,语法结构和标准C语言基本一致。其规模适中,语言简洁,便于学习。 同C语言一样,单片机C51语言提供了完备的数据类型、运算符以及函数供使用。 C51语言借鉴了ALGOL的分程序结构,是一种结构化程序设计语言。其使用一对花括号“”将一系列语句组合成一个复合语句,程序结构简单明了。 C51语言的可移植性好。对于兼容的8051系列单片机,

4、只要将一个硬件型号下的程序稍加修改,甚至不加改变,就可移植到另一个不同的硬件型号开发环境中使用。 C51语言生成的代码执行效率高,且比汇编语言的程序易于理解和共享使用。,6.2 单片机C语言在Keil Vison3中应用实例,单片机C语言(即C51语言)是运行在单片机上的程序语言,和C语言的语法结构是基本一致的。这里通过一个实例,来讲解如何在Keil Vison3集成开发环境下进行单片机C语言的程序设计。,6.2.1 创建项目,双击启动Keil Vison3集成开发环境,首先开始创建项目,操作步骤如下。,6.2.2 创建源文件,当一个单片机项目建立完毕后,现在开始进行核心的源文件的设计。具体的

5、操作步骤如下。,6.2.3 编译项目,项目及源文件建立完毕后便可以编译项目了。选择“Project”“Build target”命令,即可编译,如果程序无误,则在输出窗口中显示编译结果,如图所示。,6.2.4 仿真调试,当一个单片机项目建立并编译通过后,在下载到单片机硬件中之前,为了确保程序的执行完全符合要求,一般需要进行仿真调试。Vison3的集成开发环境提供了完善的项目仿真和调试工具,下面就介绍如何使用Vison3来进行单片机C语言程序的仿真调试。项目仿真调试之前需要确保该项目完全通过编译。仿真调试的步骤如下:,6.3 C51的标识符与关键字,同标准的C语言一样,单片机的C51程序语言也包

6、含特定的标识符和关键字。因此,在进行C51程序设计时必须符合其使用的规则。,6.3.1 标识符,标识符是用来标识源程序中某个对象名称的符号。其中的对象可以是常量、变量、语句标号、数据类型、自定义函数名以及数组名等。C51的标识符的定义不是随意的,需要符合以下定义规则。 C51的标识符可以由字母、数字(09)和下划线“_”组成。 C51的标识符区分大小写,例如“num5”和“NUM5”代表两个不同的标识符。 C51的标识符第一个字符必须是小写字母(az)、大写字母(AZ)或者下划线“_”。例如“count1”、“C_1”等,都是正确的。而“5num”则是错误的标识符,在编译时系统会出现错误提示。

7、另外,有些编译系统专用的标识符是以下划线开头,为了程序的兼容性和可移植性,所以建议一般不要以下划线开头来命名标识符。 C51的标识符定义不能使用C51的关键字,也不能和用户已使用的函数名或C51库函数同名。例如“int”是不正确的标识符,“int”是关键字,所以它不能作为标识符。 C51的标识符最多可支持32个字符,不过,为了使用和理解方便,尽量不要使用过长的标识符。,6.3.2 关键字,关键字是被C51编译器已定义保留的专用特殊标识符。关键字是C51语言的一部分,如if、for、do、case等。这些关键字有固定的名称和含义,用户在C51源程序中自定义的标识符不允许与关键字相同,否则程序将无

8、法编译运行。单片机C51程序语言采用了ANSI C标准定义的32个关键字。 (详细内容请参照本书),6.4 C51的数据类型,C51的数据类型是C51语言中变量以及常量的类型。每个变量在使用之前必须定义其数据类型。C51除了继承了标准C语言中基本的数据类型int、char、short、long、float和double等外,又有自己的特点。例如在C51语言中int和short、float和double具有相同的取值范围和含义。 在C51中有以下几种基本数据类型:整型(int)、浮点型(float)、字符型(char)、无值型(void)。此外,C51语言还提供了几种聚合类型(aggregate

9、 types),包括数组、指针、结构、联合(共用体)、枚举和位域。关于几种聚合类型将在下一章中进行详细介绍。本章主要介绍几种基本类型。 C51语言中基本数据类型的字长和取值范围,如表所示。,6.4.1 常量与变量,常量就是在程序执行过程中不改变值的数据量,变量就是在程序运行过程中可以改变值的数据量。常量和变量是计算机程序处理的数据对象。 1常量 常量在程序中是不接受程序修改的固定值,C51中的常量可为任意数据类型。 2变量 变量在程序中是可以被程序修改的数据量。一个完整的变量应该有类型说明符以及变量标识符。C51编译器在单片机内存中单独划分一定的存储单元,用来存放该变量的值。,6.4.2 整型

10、数据,整型数据是整数类型的数据。整型数据是最常用的数据类型,下面就介绍整型数据的说明、整型变量的定义以及整型常量的表示。 1整型数据说明 2整型变量定义 定义整型变量的一般格式是“类型说明符 变量标识符,变量标识符”。示例如下。 int a, b; /定义a、b为有符号短整型变量 unsigned long c, d; /定义c、d为无符号长整型变量 3整型常量表示 整型常量及整型常数可以表示十进制、八进制、十六进制的整数值。按不同的进制区分,整型常数有三种表示方法。,6.4.3 浮点型数据,浮点型数据是用于表示包含小数点的数据类型。下面分别介绍在C51语言中浮点型数据的说明、浮点型数据的定义

11、以及浮点型常量的表示。 1浮点型数据说明:C51中支持如下三种类型的浮点数,即float类型、double类型和long double类型。只不过,在C51语言中不具体区分这三种类型,都被当作float类型对待。因此,这三种浮点类型有相同的精度和取值范围。浮点类型的变量字长为4个字节共32位二进制数,取值范围为3.4x10-383.4x10+38。另外,在C51语言中,浮点型数据均为有符号浮点数,而没有无符号浮点数。 2浮点型变量定义:浮点型变量的一般定义格式是“类型说明符 变量标识符,变量标识符”。同整型数据一样,浮点型变量也可以同时定义多个。 3浮点型常量表示:浮点型常量通常称为实型常量,

12、其值可以表示为十进制。浮点型常量的值由整数部分、尾数部分和指数部分组成。一般情况下,在不加说明的情况下,浮点型常量为正值。如果表示负值,需要在常量前使用负号。例如28.57、-57.63、-7.2e-16、8.265。,6.4.4 字符型数据,字符型变量是用来存放字符的变量类型。字符型变量只能存放一个字符。在信息的传递中,字符、文字等是经常用到的。下面介绍C51中的字符型数据的定义和使用等。 1字符型变量定义:在C51语言中,可以定义两种类型的字符型变量:有符号字符变量和无符号字符变量。字符型变量的定义格式示例如下: char a: /定义a为有符号字符变量 unsigned char b;

13、/定义b为无符号字符变量 2字符常量表示:字符常量是指用一对单引号括起来的一个字符。其中单引号只起定界作用,并不表示字符本身,例如F,7,!等。在C51语言中,字符常量单引号中的字符不能是单引号()和反斜杠()。如果需要使用这两个字符,则需要采用转义字符来表示,这将在后面介绍。 3转义字符:转义字符用于表示ASCII码字符集中不可打印的控制字符和特定功能的字符。转义字符是C51语言中表示字符的一种特殊形式。,6.4.5 指针型数据,指针型数据是指向变量所存放地址的数据类型。指针型数据是一种特殊的数据类型,根据所指的变量类型不同,可以分为整型指针、浮点型指针、字符型指针、结构型指针和联合指针。在

14、C51语言中,指针型变量的定义格式如下: int *i; /定义整型指针变量 float *f; /定义浮点型指针变量 char *c; /定义字符型指针变量 struct *stu; /定义结构型指针变量 union *uni; /定义联合指针变量,6.4.6 无值型数据,无值型数据是一个特殊的类型,其字节长度为0。在C51语言中,无值型主要有两个用途: 定义一个同一类型指针,该指针可根据需要动态分配内存。 在定义和使用函数时,明确地表示这个函数不返回任何值。 无值型数据的声明示例如下: void *buf; /buf被定义为无值型指针,6.5 C51的变量作用域,变量作用域是在程序中变量起

15、作用的范围。C51语言中,使用变量前需要首先声明该变量。由于C51程序中可以包含多个函数和程序文件,因此使用变量时,需要注意变量有效作用范围的问题,即变量的作用域。,6.5.1 基本规则,在C51语言中规定,在块结构中进行定义的变量,其有效使用范围只在该块结构内。其中,块结构是任何以花括号括起来的一段程序,通常称为复合语句。在C51程序中,一些函数和语句是以一对花括号“”和“”来构成的,这也是块结构的一种,示例如下: #include /头文件 void main() /主函数 int i; /定义整型变量 i=23; /变量赋值 if(i%2=0) /判断是否是偶数,如果是执行下面的语句 i

16、nt j; /定义整型变量 j=2; /变量赋值 printf(“i=%d“,i); /输出变量i,正确 printf(“j=%d“,j); /输出变量j,错误 ,6.5.2 自动变量,自动变量是以关键字auto标识的变量类型。其声明格式为“auto 类型说明符 变量标识符,变量标识符”。自动型变量可以在如下两种情况下使用。 在函数的内部进行定义,其作用域的范围为该函数的内部,在该函数之外变量无效。 在程序块中声明,其作用域的范围为该程序块。 在编译C51程序时,自动型变量根据变量类型动态分配存储空间。动态分配的过程是,在程序执行到该函数时,为其自动分配存储空间,当该函数执行完毕后,立即结束该变量的存储空间,即该自动型变量消失。这便是为什么在函数内部定义的变量,不能在函数外引用的原因。,6.5.3 外部变量,外部变量一般定义在所有函数的外部,即整个程序文件的最前面,也称为全局变量。外部变量

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号