第7章 单片机的c语言程序设计_第1页
第7章 单片机的c语言程序设计_第2页
第7章 单片机的c语言程序设计_第3页
第7章 单片机的c语言程序设计_第4页
第7章 单片机的c语言程序设计_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7 单片机的C语言程序设计,2,教学目的,熟悉C51的程序结构掌握C51的数据类型、存储类型及函数等概念了解C51与标准C的不同之处熟悉C51的开发工具Keil C51,7.1 51的程序结构,与汇编语言相比,C51在功能、结构性、可读性、可维护性及可移植性上有明显的优势 。C51程序结构与一般C语言没有差别。,4,C51的特点:1C51在吸取了汇编语言精华的基础上又有所改进 2C51继承和发扬了高级语言的长处 3C51的可移植性好 4生成的代码质量高,在代码效率方面可以和汇编语言相媲美,51的程序结构,3.151的程序结构,5,C51程序的结构一个C51程序大体上是一个函数定义的集合,在这个集合中仅有一个名为main的函数(主函数)。 函数定义由类型、函数名、参数表和函数体四部分组成。函数的一般格式如下: 类型 函数名(参数表) 参数说明; 数据说明部分; 执行语句部分; ,51的程序结构,3.151的程序结构,6,编写C51程序时应注意以下几点:1.一个C51程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何。2C语言程序的书写格式十分自由。一条语句可以写成一行,也可以写成几行,还可以在一行内写多条语句。但每条语句都必须以分号“;”作为结束符。3C语言对大小字母敏感,C语言编译器编译程序时对同一个字母的大小写作为不同的变量来处理。4可以用/*/对C程序中的任何部分作注释。程序加上必要的注释,可增加程序的可读性。,51的程序结构,3.151的程序结构,7.2 数据类型、存储类型及存储模式,数据类型常量和变量C51的存储类型及存储模式特殊功能寄存器、并行接口及位变量的定义,8,数据类型 可分为基本数据类型和构造数据类型。构造数据类型由基本数据类型构造而成。C51的数据类型分类如下所示:,数据类型、存储类型及存储模式,3.2 数据类型、存储类型及存储模式,9,C51编译器能识别的数据类型,10,常量和变量 C语言中的数据有常量、变量之分。 常量在程序运行的过程中,其值不能改变的量称为常量。C语言支持4种常量:整数常量、浮点数常量、枚举量常量、字符常量。 变量在程序执行过程中,其值能不断变化的量。使用一个变量之前必须进行定义,用一个标识符作为变量名并指出它的数据类型和存储类型,以便编译系统为它分配相应的存储单元。,数据类型、存储类型及存储模式,3.2 数据类型、存储类型及存储模式,11,C51中变量定义的格式如下: 数据类型 存储器类型 变量名表 其中,存储器类型是可选项。 例如: char data var;,12,C51的存储类型及存储模式 51系列单片机的存储器采用哈佛结构。即其程序存储器和数据存储器分开,并有各自的寻址机构和寻址方式。以AT89C52为例,其具体结构如图所示。,数据类型、存储类型及存储模式,3.2 数据类型、存储类型及存储模式,13,C51的存储类型及存储模式 C51在定义变量、常量时,将通过不同的存储类型将它们定位在不同的存储区中。存储类型与AT89C51单片机实际存储空间的对应关系如表所列。,数据类型、存储类型及存储模式,3.2 数据类型、存储类型及存储模式,14,15,存储模式,C51编译器允许采用三种存储模式:小编译模式SMALL、紧凑编译模式COMPACT、大编译模式LARGE。,16,例如,如果我们用char bian语句定义一个字符型变量,变量名为bian。在使用SMALL存储模式下,变量bian被放置在片内RAM存储区,即变量bian被自动定义为DATA存储类型;在使用COMPACT存储模式下,变量bian则被放置在片外RAM存储区的某一页,即变量bian被自动定义为PDATA存储类型;在使用LARGE存储模式下,变量bian被放置在片外RAM存储区的64KB空间,即变量bian被自动定义为XDATA存储类型。,17,特殊功能寄存器的定义 AT89C52单片机中除了程序计数器PC和4组通用寄存器组(R0R7)之外,其他所有寄存器均称为特殊功能寄存器(SFR),它们分散在片内RAM区的高128B中,它们只能采用直接寻址方式访问。 为了能直接访问这些SFR,C51扩充了类型说明符sfr、sfr16、sbit。利用它们可在C语言源程序中直接对AT89C52单片机的特殊功能寄存器进行定义。定义方法如下:sfr 特殊功能寄存器名=地址常数sfr16特殊功能寄存器名=地址常数例如: sfr P0 = 0x80; sfr16 DPTR= 0x82;/即DPTR低8位地址为0x82,高8位为0x83,数据类型、存储类型及存储模式,3.2 数据类型、存储类型及存储模式,18,并行接口的定义 AT89C52单片机内部有4个8位并行口,即SFR中的P0-P3。这些内部并行口既可进行字节寻址,也可进行位寻址。,数据类型、存储类型及存储模式,3.2 数据类型、存储类型及存储模式,sfr P0 = 0x80; /* 定义单片机P0口,片内SFR,字节地址为080H */sfr P1 = 0x90; /* 定义单片机P1口,片内SFR,字节地址为090H */sfr P2 = 0xA0; /* 定义单片机P2口,片内SFR,字节地址为0A0H */sfr P3 = 0xB0; /* 定义单片机P3口,片内SFR,字节地址为0B0H */,19,位变量的定义1.定义位变量的语法如下:bit check_bit ;/*将变量check_bit定义为位变量*/2.函数可包含类型为bit的参数,也可将其作为返回值。3 .可位寻址对象的定义和访问(分两步)例如 :bdata char temp; /先把temp 定义为char类型 sbit temp3=temp3;/再把temp3为temp的第3位,数据类型、存储类型及存储模式,3.2 数据类型、存储类型及存储模式,7.3 运算符、函数及程序流程控制,C51的运算符C51的函数C51的流程控制语句,21,C51的运算符1.C51的赋值运算符和算术运算符(+、-、*、/、%)2.C51的关系运算符(、=、 )5.自增减运算6.复合运算符(10种),运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,22,C51的函数 函数是C语言中的一种基本模块,一个C语言程序就是由若干个模块化的函数所构成的。 1.函数的分类从用户使用角度划分,函数分为标准库函数和用户自定义函数。用户自定义函数是指用户根据任务自己编写的函数。从函数定义的形式上可划分为三种形式:无参数函数、有参数函数和空函数。,运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,23,C51的函数 2.函数的定义无参数函数的定义返回值类型 函数名() 函数体语句有参数函数的定义返回值类型 函数名(形式参数列表) 形式参数类型说明 函数体语句空函数的定义返回值类型 函数名() ,运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,24,C51的函数 3.函数的参数和返回值形式参数和实际参数形参:定义函数时,位于函数名后面圆括号中的变量名称为“形式参数”。实参:调用函数时,主调用函数名后面括号中的表达式称为“实际参数”。参数的返回值通过函数调用使主调用函数获得一个确定的值,这就是函数的返回值。函数的返回值是通过return语句获得的。,运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,25,C51的函数 4.函数的调用调用的形式为:函数名(实际参数表列); 函数的调用方式有三种:1.函数调用语句:即把被调用函数名作为调用函数的一个语句,如func( ) 2.被调用函数作为表达式的运算对象:如x=2*func(a,b) 3.被调用函数作为另一个函数的实际参数:如x=min(a,func(a,b);,运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,26,C51的函数 5.对被调用函数的说明在调用一个函数之前,应对该函数的类型进行说明,即“先说明,后调用”。被调用函数必须是已经存在的函数(库函数或用户自定义函数)。6.函数变量的存储方式函数变量按其有效作用范围可划分为局部变量和全局变量。变量按其存储方式可分为四种存储种类,分别是自动变量(auto)、外部变量(extern)、静态变量(static)和寄存器变量(register),这些存储种类与变量的关系为:内部变量可定义为自动变量、静态变量或寄存器变量,外部变量可定义为全局变量或静态变量。,运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,27,C51的流程控制语句 C语言有三种基本结构:顺序结构、选择结构与循环结构。,运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,顺序结构流程图,28,C51的流程控制语句,运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,选择结构流程图,其中选择结构又派生出串行多分支结构和并行多分支结构,,29,C51的流程控制语句,运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,循环结构流程图,循环结构又分为“while”型循环结构和“do while”型循环结构。,30,C51的流程控制语句 1.选择语句ifC语言提供了3种形式的if语句:(1)if (条件表达式) 语句;(2)if (条件表达式) 语句1; else 语句2;(3)if (条件表达式1) 语句1; else if (条件表达式2) 语句2; else if (条件表达式3) 语句3; else if (条件表达式m) 语句m; else 语句n;,运算符、函数及程序流程控制,3.3运算符、函数及程序流程控制,31,【例7-1】if-else if语句举例。int abc;char xyz;if (abc =1)xyz = 0x00;else if(abc =2)xyz = 0x20;else if(abc 联合元素,C51的构造数据类型,3.4 C51的构造数据类型,39,枚举 枚举数据类型是一个有名字的某些整数型常量的集合。这些整数型常量是该类型变量可取的所有的合法值。枚举定义应当列出该类型变量的可取值。定义枚举类型变量的一般格式为:enum 枚举名 枚举值表列 变量表列; enum weekday 1,2,3,4,5,6,7 x1,x2;,C51的构造数据类型,3.4 C51的构造数据类型,40,指针 指针是C语言的一个重要概念,也是特色之一。使用指针可以有效地表示复杂的数据结构,直接处理内存地址,而且可以更有效地使用数组。 指针的概念 变量的指针就是变量的地址 指针变量的定义指针变量定义的一般形式如下:类型标示符 *指针变量名指针变量的引用 通过举例说明。应注意的是:“*”在指针变量定义时和在指针运算时所代表的含义是不同的。C51的指针类型,C51的构造数据类型,3.4 C51的构造数据类型,41,指针 C51的指针类型C51编译器支持“基于存储器”的指针和“一般”指针两种类型。基于存储器的指针:在编译时一般被“行内”编码,无须库调用。即指针所指的对象所在的存储空间由定义时C源代码中的存储类型决定。该指针只占用1-2个字节。一般指针:包含3个字节。其中2个字节偏移量(即指针的地址)和1个字节存储器类型。为了表示这种指针必须用长整数来定义存储类型。,C51的构造数据类型,3.4 C51的构造数据类型,42,指针 基于存储器的指针 该指针不但指出了指针本身的存储类型(缺省时由编译时的存储模式决定),而且还明确的指出了指针所指向的对象变量的存储类型(不能缺省)。基于存储器的指针长度短,速度快,但因为它所指的对象变量有确定的存储器空间,所以这类指针缺乏兼容性。一般指针定义指针时若未明确指明指针所指对象变量的存储类型,则该指针为一般指针。定义一般指针的方法与标准C语言相同。,C51的构造数据类型,3.4 C51的构造数据类型,43,指针 对比一般指针和基于存储器的指针,可得出以下结论:基于存储器的指针长度短,运行速度快。而一般指针由于其所指对象变量的存储器空间位置只有在运行期间才能确定,编译器在编译期间无法优化存储方式,必须生成一般代码以保证能对任意空间的对象进行存取,所以一般指针所产生的代码运行速度较慢。一般指针可用于存取任何变量而不必考虑变量在AT89C52存储器空间的位置,函数可利用一般指针来存取位于任何存储空间的数据。因此一般指针的兼容性较好。而基于存储器的指针所指的对象有确定的存储器空间,因此缺乏兼容性。,C51的构造数据类型,3.4 C51的构造数据类型,7.5 Keil C51简介,项目文件的建立、设置与目标文件的获得程序的调试,45,项目文件的建立、设置与目标文件的获得1.启动Vision2并创建一个项目2.创建新的源文件3.项目的详细设置4.编译和链接程序,Keil C51简介,3.6 Keil C51简介,46,程序的调试1.常用调试命令2.在线汇编3. 断点设置4.程序调试窗口存储器窗口观察窗口反汇编窗口串行窗口,Keil C51简介,3.6 Kei

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论