单片机C语言简介.ppt
《单片机C语言简介.ppt》由会员分享,可在线阅读,更多相关《单片机C语言简介.ppt(101页珍藏版)》请在三一办公上搜索。
1、第7章 51单片机C语言简介,7.1 C语言的基本知识 7.2 C51程序设计的基本语法 7.3 C51程序设计 7.4 函数 7.5 模块化程序设计 7.6 C51编程实例,7.1 C语言的基本知识,7.1.1 C语言的特点与程序结构 以前计算机的系统软件主要是用汇编语言编写的,对于单片机应用系统来说更是如此。由于汇编语言程序的可读性和可移植性都较差,采用汇编语言编写单片机应用系统程序的周期长,而且调试和排错也比较困难。为了提高编制计算机系统和应用程序的效率,改善程序的可读性和可移植性,最好采用高级语言编程。C语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作,并且采用C语言编写的
2、程序能够很容易地在不同类型的计算机之间进行移植。与其它计算机高级语言相比,C语言具有它自身的特点:1语言简洁,使用方便灵活。2可移植性好。3表达能力强。4可进行结构化程序设计。5可以直接操作计算机硬件。6生成的目标代码质量高。,尽管C语言具有很多的优点,但和其它任何一种程序设计语言一样,也有其自身的缺点,如不能自动检查数组的边界,各种运算符的优先级别太多,某些运算符具有多种用途等。C语言程序是由若干个函数单元组成的,每个函数都是完成某个特殊任务的子程序段。组成一个程序的若干个函数可以保存在一个源程序文件中,也可以保存语言源程序文件的文件名由程序设计人员根据某种俗成规则自己确定,其扩展名统一为“
3、.C”。如A1-1.C、A2-1.C。C语言程序的开始部分通常是预处理命令,如程序中通常遇到的include命令。这个预处理命令通知编译器在对程序进行编译时,将所需要的头文件读入后再一起进行编译。一般在“头文件”中包含有程序在编译时的一些必要的信息,通常C语言编译器都会提供若干个不同用途的头文件。头文件的读入是在对程序进行编译时才完成的。,名门棋牌官网 1PK1棋牌公社官网 编辑整理,C语言程序是由函数所组成的。一个完整的C语言程序应包含一个主函数main()和若干个其它功能的函数。函数之间可以相互调用,但main()函数只能调用其它的功能函数,而不能被其它函数所调用。功能函数可以是C语言编译
4、器提供的库函数,也可以由用户按实际需要自行编写的函数。不管main()函数处于程序中的什么位置,程序总是从main()函数开始执行。一个函数必须预先定义或声明后才能调用。函数定义或声明位于源程序的预处理命令之后的开始位置。函数定义部分包括有函数的存储类型、返回值数据类型、函数名、形式参数说明等,函数名后面必须跟一个圆括弧(),形式参数说明在圆括弧()内进行。函数也可以没有形式参数,如main()。函数的位置比较自由。可以由程序设计人员安排在函数定义后的任意位置。函数由函数名和一对花括弧“”组成,在“”里面的内容就是函数体,如果一个函数有多个“”,则最外面的一对“”为函数体的范围。,函数体的内容
5、为若干条语句,一般有两类语句,一类为说明语句,用来对函数中将要用到的变量进行定义;另一类为执行语句,用来完成一定的功能或算法处理。有的函数体仅有一对“”,其中既没有变量定义语句,也没有执行语句,这也是合法的,称为“空函数”。C语言源程序可以采用任何一种编辑器来编写,既可以是windows环境下的编辑器,如记事本(NOTEPAD)或写字板(WORDPAD),也可以是DOS环境下的编辑器,如EDIT或PE等。C语言程序的书写格式十分自由。一条语句可以写成一行,也可以写成几行;还可以在一行内写多条语句;但是需要注意的是,每条语句都必须以分号“;”作为结束符。,另外,C语言区分大小写字母,C语言编译器
6、在对程序进行编译时,对于程序中同一个字母的大小写作为不同的变量来处理。虽然C语言程序不要求具有固定的格式,但我们在实际编写程序时还是应该遵守一定的规则,一般应按程序的功能以“缩格”形式来写程序,同时还应在适当的地方加上必要的注释。注释对于比较大的程序来说是十分重要的,这有利于修改与读懂程序。C语言本身没有输入输出功能,C语言程序的输入和输出是通过函数调用来实现的。Franklin C51编译器提供的输入输出库函数 scanf和 printf是通过 8051单片机的串行口实现的,在程序中使用这种输入输出库函数之前必须先对8051单片机的串行口进行初始化。但是对于单片机应用系统来说,由于具体要求的
7、不同,应用系统的输入输出方式多种多样,不可能一律采用串行口作输入和输出。因此应该根据实际需要,由应用系统的研制人员自己来编写满足特定需要的输入输出函数,这一点对于单片机应用系统的开发研制人员来说是十分重要的。,7.1.2 C语言的标识符和关键字,C语言的标识符是用来标识源程序中某个对象名字的。这些对象可以是函数、变量、常量、数组、数据类型、存储方式、语句等。一个标识符由字符串、数字和下划线等组成,第一个字符必须是字母或下划线,通常以下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不要使用以下划线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只
8、有前面32个字符在编译时有效,因此在编写源程序时标识符的长度不要超过 32个字符。程序中对于标识符的命名应当简洁明了,含义清晰,便于阅读理解,如用标识符“max”表示最大值,用“TIMER0”表示定时器0等。关键字是一类具有固定名称和特定含义的特殊标识符,又称为保留字。在编写C语言源程序时一般不允许将关键字另作别用,换句话说就是对于标识符的命名不要与关键字相同。在C语言中,ANSI C标准一共规定了32个关键字,表 7.1按用途列出了 ANSI C标准的关键字。,表 7.1 ANSI C标准的关键字,C51编译器除了支持ANSI C标准关键字以外,还扩展了如表7.2所示的关键字:表7.2C51
9、编译器的扩展关键字,7.1.3 单片机C51程序的编译连接与调试,Franklin C51交叉编译器是专为8051系列单片机设计的C语言编译器,它能在IBM PC及其兼容机上运行,使用非常方便。为了保证编译器能正常工作,PC机应具有512K以上的内存、一个软盘驱动器、一个硬盘,采用MSDOS 3.0以上版本的操作系统。Franklin C51以软件包的形式提供,软件包中主要有C51交叉编译器、A51交叉汇编器、L51连接定位器、OHS51代码转换器和 dScope一51软件仿真调试器以及其它一些实用软件程序。如果在PC机的硬盘C:上安装C51编译器,在安装之前应对PC机的配置文件CONFIG.
10、SYS和自动批处理文件AUTOEXEC.BAT作如下修改:CONFIG.SYS:FIELS 20 BUFFER 20 AUTOEXEC.BAT:SET C51LIB=C:C51LIB SET C51INC C:CSIINC SET PATH=C:C51BIN,这样修改之后,C51编译器会当头文件不在当前目录时,能从C:C51INC子目录中找到头文件;L51连接器会自动为所有的编译模式及算术(尤其是浮点运算)功能从C:C51LIB于目录中找到所需要的库文件。C51编译器可根据不同的硬件环境由4个文件做出修改。下列配置文件包括在C51软件包中:STARTUP.A51:C51编译器的启动程序,所有的
11、栈指针和存贮器,只要需要,将被初始化。INT.A51:在文件中已明确初始化了的变量作初始化。如果系统装了“看门狗”,该文件可包含附加的“看门狗”刷新。PUTCHAR.C:函数“printf”、“puts”等的字符输出核心程序,该程序可根据用户硬件加以修改(如LCD显示)。GETKEY.C:函数“getchar”、“scanf”等的字符输入核心程序,该程序可根据硬件加以修改(如矩阵键盘),所有文件都包含在C运行库中,因此,不能在连接时指定调用。如果用户改变一个文件,可将其编译后与其它目标文件一起连接,因而不必改动运行库。库中原文件自动忽略。例:L51 MYMODUL1.OBJ,MYMODUL2.
12、OBJ,STARTUP.OBJ,PUTCHAR.OBJ 上例将用户建立的STARTUP.OBJ和PUTCHAR.OBJ连接起来。用C语言编写的程序必须通过编译和连接之后,才能生成可执行代码。C51编译器由命令“C51”启动,例如以EXI2.C为文件名的程序编译命令如下;C51 EXI2.C CODE DEBUG(回车),C51是编译器启动命令,EXI2.C是程序文件名,CODE和DEBUG是编译控制指令。输入完命令后回车,即可进人编译过程。如果编译过程中未发现错误,屏幕上会显示出:C51 COMPILATION COMPILETE,0 WARING(S),0 ERROR(S)并产生列表文件 E
13、XI2.LST和目标文件 EXI2.OBJ。如果编译中发现任何错误,则不产生目标文件,而将所有的错误信息都在列表文件中表示出来。编译控制指令CODE使列表文件的后面附加一个汇编语言文件。编译控制指令DEBUG使目标文件中包含有进行源程序调试时需要的各种符号信息。目标文件中还包含有可再定位的目标码,以供 L51连接器作进一步的处理。C51编译器提供了许多不同控制指令可以完成各种编译控制功能。,7.2 C51程序设计的基本语法,C语言是一种程序设计语言,采用C语言进行程序设计时,需要遵循一定的语法规则。7.2.1 C语言的数据类型 C语言的数据结构是以数据类型出现的,数据类型可分为基本数据类型和复
14、杂数据类型,复杂数据类型由基本数据类型构造而成。C语言中的基本数据类型有char,int,short,long,float和double。对于C51编译器来说,short型与int型相同,double型与float型相同。分别说明如下:1 char 字符类型。有 signed char和 unsigned char之分,默认值为 signed char。对于 signed char型数据,其字节中的最高位表示该数据的符号,“0”表示正数,“l”表示负数。负数用补码表示。所能表示的数值范围是-128127;unsigned char型数据,是无符号字符型数据,其字节中的所有位均用来表示数据的数值
15、,所表示的数值范围是 0255。,2 int 整型。有signed int和unsigned nit之分,默认值为signed int。signed int是有符号整型数,字节中的最高位表示数据的符号,“0”表示正数,“1”表示负数。所能表示的数值范围是-32768+32767。unsigned int是无符号整型数,所表示的数值范围是065535。3 long 长整型。有signed long和unsigned long之分,默认值为signed long。它们的长度均为四个字节。singed long是有符号的长整型数据,字节中的最高位表示数据的符号,“0”表示正数,“1”表示负数。数值的
16、表示范围是2147483648 2147483647;unsigned long是无符号长整型数据,数值的表示范围是04294967295。,4float 浮点型。它是符合IEEE754标准的单精度浮点型数据,在十进制中具有7位有效数字。float型数据占用四个字节(2位二进制数)。需要指出的是,对于浮点型数据除了有正常数值之外,还可能出现非正常数值。根据IEEE标准,当浮点型数据取以下数值(16进制数)时即为非正常值:FFFFFFFFH非数(NaN);7F800000H正溢出(INF);FF800000H负溢出(INF);另外,由于8051单片机不包括捕获浮点运算错误的中断向量,因此必须由用
17、户自己根据可能出现的错误条件用软件来进行适当的处理。,5*指针型。指针型数据不同于以上四种基本数据类型,它本身是一个变量,但在这个变量中存放的不是普通的数据而是指向另一个数据的地址。指针变量也要占据一定的内存单元,在C51中指针变量的长度一般为3个字节。指针变量也具有类型,其表示方法是在指针符号“*”的前面冠以数据类型符号。如 char*Pointl;表示 Pointl是一个字符型的指针变量。指针变量的类型表示该指针所指向地址中数据的类型。使用指针型变量可以方便地对8051单片机的各部分物理地址直接进行操作。6bit 位标量。这是C 51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能
18、定义位指针,也不能定义位数组。,7sfr 特殊功能寄存器。这也是C 51编译器的一种扩充数据类型,利用它可以访问8051单片机的所有内部特殊功能寄存器。sfr型数据占用一个内存单元,其取值范围0255。8sfr16 16位特殊功能寄存器。它占用两个内存单元,取值范围是065535。9sbit 可寻址位。这也是C51编译器的一种扩充数据类型,利用它可以访8051单片机内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。,在C语言程序中的表达式或变量赋值运算中,有时会出现运算对象的数据不一致的情况,C语言允许任何标准数据类型之间的隐式转换。隐式转换按以下优先级别自动进行:bit char int
19、long float signed unsigned 转换时由低向高进行,而不是数据转换时的顺序。一般来说,如果有几个不同类型的数据同时参加运算,先将低级别类型的数据转换成高级别类型,再作运算处理,并且运算结果为高级别类型数据。C51编译器除了能支持以上这些基本数据之外,还能支持一些复杂的构造型数据,如结构类型、联合类型等。,7.2.2 常量 常量是在程序执行过程中其值不能改变的量。常量的数据类型有整型、浮点型、字符型和字符串型等,C51编译器还扩充了一种位(bit)标量。分别说明如下:1整型常量 整型常量就是整型常数,可表示为以下几种形式:十进制整数;十六进制整数:以 0X开头的数是十六进制
20、数,ANSI C标准规定十六进制数的数字为09,再加字母af;长整数:在数字后面加一个字母L就构成了长整数。2浮点型常量 浮点型常量有十进制表示形式和指数表示形式。十进制表示形式又称定点表示形式,由数字和小数点组成。如 0.3141、31.41、314.1及0.0都是十进制数表示形式的浮点型常量。,在这种表示形式中,如果整数或小数部分为0可以省略不写,但必须有小数点。指数表示形式为:数字数字e 数字 其中,中的内容为可选项,可有可无,但其余部分必须有。3字符型常量 字符型常量是单引号内的字符,如a、b等。对于不可显示的控制字符,可以在该字符前面加一个反斜杠字符“”组成专用转义字符。利用转义字符
21、可以完成一些特殊功能和输出时的格式控制。4字符串型常量 字符串型常量由双引号“”内的字符组成。当双引号内的字符个数为0时,称为空串常量。需要注意的是,字符串常量首尾的双引号是界限符,当需要表示双引号字符串时,可用转义字符来表示为:“”。,如:“I say:“goodbye!”字符串为I say:“goodbye!”另外,C语言将字符串常量作为一个字符类型数组来处理,在存储字符串常量时,要在字符串的尾部加一个转义字符0作为该字符串常量的结束符。因此不要将字符常量与字符串常量混淆。5位标量 这是C51编译器的一种扩充数据类型。位标量用关键字“bit”来定义,它的值是一个二进制位。一个函数中可以包含
22、“bit”类型的参数,函数的返回值也可为“bit”型。另外,不能定义位指针,也不能定义位数组。7.2.3 变量及其存储模式 和常量相比,变量是另一种量,在程序执行过程中其值能不断变化。每一个变量都必须有一个标识符作为它的变量名。在使用一个变量之前,必须先对该变量进行定义,指出它的数据类型和存储模式,以便编译系统为它分配相应的存储单元。在C51中对变量进行定义的格式如下:,存储种类数据类型存储器类型变量名表;其中,“存储种类”和“存储器类型”是可选项。变量的存储种类有四种:自动(auto)、外部(extern)、静态(static)和寄存器(register)。在定义一个变量时如果省略存储种类选
23、项,则该变量将为自动(auto)变量。定义一个变量时除了需要说明其数据类型之外,C51编译器还允许说明变量的存储器类型。Franklin C51对于每个变量可以准确地赋予其存储器类型,从而可使之能够在单片机系统内准确地定位。定义变量时如果省略“存储器类型”选项,则按编译模式SMALL、COMPACT或LARGE所规定的默认存储器类型确定变量的存储区域,不能位于寄存器中的参数传递变量和过程变量也保存在默认的存储器区域。C51编译器的三种存储器模式(默认的存储器类型)对变量的影响如下:,1.SMALL 变量被定义在 8051单片机的内部数据存储器中,因此对这种变量的访问速度最快。另外,所有的对象,
24、包括堆栈,都必须嵌入内部数据存储器,而堆栈的长度是很重要的,实际栈长取决于不同函数的嵌套深度。2.COMPACT 变量被定义在分页外部数据存储器中,外部数据段的长度可达256字节。这时对变量的访问是通过寄存器间接寻址(MOVX Ri)进行的,堆栈位于8051单片机内部数据存储器中。采用这种编译模式时,变量的高 8位地址由 P2口确定。因此,在采用这种模式的同时,必须适当改变启动程序 STARTUPA51中的参数:PDATASTART和PDATALEN;用L51进行连接时还必须采用连接控制命令PDATA来对P2口地址进行定位,这样才能确保P2口为所需要的高8位地址。3.LARGE 变量被定义在外
25、部数据存储器中(最大可达64K字节),使用数据指针DPTR来间接访问变量。这种访问数据的方法效率是不高的,尤其是对于2个或多个字节的变量,用这种数据访问方法相当影响程序的代码长度。另外一个不方便之处是这种数据指针不能对称操作。,需要特别指出的是,变量的存储种类与存储器类型是完全无关的。例如:static unsigned char data x;*在内部数据 存储器中定义一个静态无符号字符型变量x*int y;*定义一个自动整型变量y,它的存储器 类型由编译模式确定*为了能够直接访问这些特殊功能寄存器,C51编译器扩充了关键字 sfr和 sfr16,利用这种扩充关键字可以在C语言源程序中直接对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言 简介
链接地址:https://www.31ppt.com/p-6103485.html