您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第6章 80C51单片机的C51程序设计.ppt
学习目的(1)理解C语言程序在结构上的特点和书写格式上的要求。(2)掌握数据类型的概念,了解C51语言能够处理的数据类型。(3)了解C51语言基本运算符及其特点,掌握运算符的优先级和结合性。(4)理解算术表达式、关系表达式、逻辑表达式的特点,能熟练计算表达式。(5)掌握if语句swith语句的语法。能编写选择结构的程序。掌握for语句、while语句、do-while语句的使用语法及方法,能进行循环程序设计。(6)理解数组的概念,能定义、初始化一维数组、二维数组及字符数组,进行相关程序设计。(7)理解函数的概念,能根据需要定义一个函数,能正确调用一个函数。理解主调函数和被调用函数参数传递过程,掌握函数形参传递数组元素的方法。(8)理解指针的概念,能区别指针变量和变量的指针。理解指针与数组的关系,熟练使用指针指向一维、二维数组,理解指针表达数组元素的几种表现形式。(9)理解80C51内部资源(端口、中断、定时/计数器、串行口)的应用。学习重点和难点(1)C51的数据类型、存储类型、C51的运算符和表达式及其规则。(2)表达式语句、复合语句、条件语句、while循环语句、do-while循环语句、for循环语句的语法及常用算法。(3)数组的定义、数组元素的表示方法、数组初始化方法、字符数组和字符串。(4)指针的定义格式、指针的赋值、指针的运算,使用指针表示数组的元素。(5)函数的定义格式、函数说明方法、函数的参数、函数的返回值;函数的调用方式。(6)80C51中断函数的设计、定时/计数器的应用。C语言程序的应用。单片机应用系统的软件设计大多采用汇编语言程序设计来完成,因为汇编语言直接操作计算机的硬件,作为初学者掌握汇编语言的基本设计方法是必要的,但是汇编语言程序的可读性和可移植性都较差,采用汇编语言开发单片机应用系统程序的周期长,而且调试和排错也比较困难。为了提高编制计算机控制系统程序和应用程序的效率,改善程序的可读性和可移植性,现在多采用高级语言编程。C语言既具有一般高级语言的特点,是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,并具有良好的程序结构,又能直接对计算机的硬件进行操作,并且程序能够很容易地在不同类型的计算机之间进行移植。因此它是目前使用较广的单片机编程语言。单片机的C语言采用C51编译器(简称C51)。由C51产生的目标代码短、运行速度高、所需存储空间小、符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言或PL/M51语言目标代码混和使用。在众多的C51编译器中,Keil公司的C语言编译/连接器KeiluVison2软件最受欢迎。6.1单片机的C语言6.1.1C51程序开发概述1、采用C51的优点采用C51进行单片机应用系统的程序设计,编译器能自动完成变量的存储单元的分配,编程者可以专注于应用软件的设计,可以对常用的接口芯片编制通用的驱动函数,对常用的功能模块和算法编制相应的函数,可以方便的进行信号处理算法和程序的移植,从而加快单片机应用系统的开发过程。目前,C51系列单片机的C语言代码长度在未加人工优化的条件下,已经做到最优汇编程序水平的1.2~1.5倍,已超过中等程序员的水平。51系列单片机中,片上FLASHROM空间做到32K/64K的比比皆是,代码效率所差的10%~15%已不是重要问题。至于开发速度、软件质量、结构严谨、程序坚固等方面,C语言的完美绝非是汇编语言所能比拟的。2、C51程序的开发过程C51程序的开发过程如图所示•预处理命令include•功能子函数1说明•……•功能子函数n说明•功能子函数1fun1()•{•函数体……•}•……•功能子函数nfun()•{•函数体……•}•main()•{•函数体……•}6.1.2C51程序结构C51程序结构同标准C一样,是由若干个函数构成的,每个函数即是完成某个特殊任务的子程序段。组成一个程序的若干个函数可以保存在一个或几个源文件中,最后再将它们连接在一起。C语言程序的扩展名为“.c”,如my_test.c。C语言程序的组成结构如下(主函数可以放在功能子函数说明之后的任意位置):C语言的语句规则:1、每个变量必须先说明后引用,变量名英文大小写是有差别的。2、C语言程序一行可以书写多条语句,但每个语句必须以“;”结尾,一个语句也可以多行书写。3、C语言的注释用/*……*/表示。4、“{”花括号必须成对,位置随意,可在紧挨函数名后,也可另起一行,多个花括号可以同行书写,也可逐行书写,为层次分明,增加可读性,同一层的“{”花括号对齐,采用逐层缩进方式书写。6.2C51的数据类型6.2.1C51的标识符、关键字标识符是一种单词,它用来给变量、函数、符号常量、自定义类型等命名。用标识符给C语言程序中各种对象命名时,要用字母、下划线和数字组成的字符序列,并要求首字符是字母或下划线,不能是数字。字母的大小写是有区别的。通常下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不使用以下划线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只有前32个字符在编译时有效,因此标识符的长度一般不要超过32个字符。关键字是一种已被系统使用过的具有特定含义的标识符。用户不得再用关键字给变量等命名。C语言关键字较少,ANSIC标准一共规定了32个关键字,见表:ANSIC语言的关键字关键字用途说明auto存储种类说明用以说明局部变量,缺省值为此break程序语句退出最内层循环case程序语句Switch语句中的选择项char数据类型说明单字节整型数或字符型数据const存储种类说明在程序执行过程中不可更改的常量值continue程序语句转向下一次循环default程序语句Switch语句中的失败选择项do程序语句构成do…while循环结构double数据类型说明双精度浮点数else程序语句构成if…else选择结构enum数据类型说明枚举类型extern存储种类说明在其他程序模块中说明了的全局变量float数据类型说明单精度浮点数for程序语句构成for循环结构goto程序语句构成goto转移结构if程序语句构成if…else选择结构int数据类型说明基本整型数long数据类型说明长整型数register存储种类说明使用CPU内部寄存器的变量return程序语句函数返回short数据类型说明短整型数signed数据类型说明有符号数,二进制数据的最高位为符号位sizeof运算符计算表达式或数据类型的字节数static存储种类说明静态变量struct数据类型说明结构类型数据switch程序语句构成Switch选择结构typedef数据类型说明重新进行数据类型定义union数据类型说明联合类型数据unsigned数据类型说明无符号数数据void数据类型说明无类型数据volatile数据类型说明该变量在程序执行中可被隐含地改变while程序语句构成while和do…while循环结构KeilC51编译器除了有ANSIC标准的32个关键字外,还根据51单片机的特点扩展了相应的关键字。在KeilC51开发环境的文本编辑器中编写C程序,系统可以把保留字以不同的颜色显示,缺省颜色为蓝色。下表为KeilC51编译器扩展的关键字。KeilC51编译器扩展关键字关键字用途说明bit位标量声明声明一个位标量或位类型的函数sbit位变量声明声明一个可位寻址变量sfr特殊功能寄存器声明声明一个特殊功能寄存器(8位)sfr16特殊功能寄存器声明声明一个16位的特殊功能寄存器data存储器类型说明直接寻址的8051内部数据存储器bdata存储器类型说明可位寻址的8051内部数据存储器idata存储器类型说明简洁寻址的8051内部数据存储器pdata存储器类型说明“分页”寻址的8051外部数据存储器xdata存储器类型说明8051外部数据存储器code存储器类型说明8051程序存储器interrupt中断函数声明定义一个中断函数reetrant再入函数声明定义一个再入函数using寄存器组定义定义8051的工作寄存器组6.2.2数据与数据类型数据----具有一定格式的数字或数值。数据是计算机的操作对象。不管使用任何语言,任何算法进行程序设计,最终在计算机中运行的只有数据流。数据类型——数据的不同格式叫数据类型。数据结构——数据按一定的数据类型进行排列、组合及架构称为数据结构。1,基本数据类型在C51中,编译系统要根据定义的数据类型来预留存储单元,这就是定义数据类型的意义。C51提供的数据数据结构是以数据类型的形式出现的,C51的数据类型如表6-3所示。使用有符号格式(signed)的数据时,编译器要进行符号位检测并需要调用库函数,生成的程序比无符号格式要长得多,程序运行的速度将减慢,占用的存储空间也会变大,出现错误的几率会大大增加。所以通常情况下尽可能采用无符号格式(unsigned)。编译器默认值为有符号格式。位型变量与单片机的硬件结构有关,应注意其定义在单片机片内可位寻址的区域。Bit型变量定义在80C51单片机内部RAM20H~2FH单元相应的位区域;sbit用于定义可独立访问的位变量,常用于定义80C51单片机中SFR(特殊功能寄存器)中可位寻址的确定的位,也可以定义内部RAM的20H~2FH单元中相应位。C51的数据类型数据类型长度(位)取值范围字符型signedchar8-128~127unsignedchar80~255整型signedint16-32768~32767unsignedint160~65535长整型signedlong32-21474883648~21474883647unsignedlong320~4294967295浮点型float32±1.75494E-38~±3.402823E+38位型bit10,1sbit10,1访问SFRsfr80~255sfr16160~65535(1)数组类型数组是一组有序数据的集合,数组中每一个数据元素都属于同一个数据类型。数组中的各个元素可以用数组名和下标来唯一确定。一维数组只有一个下标,二维数组有两个下标。在C语言中,数组必须先定义,然后才能使用。一维数组的定义格式如下所示。类型说明符数组名[整型常量表达式]其中,“数据类型”说明了数组中各个元素的类型;“数组名”是整个数组的标识符,它的命名方法与变量的命名方法相同;“整形常量表达式”说明了数组的长度,即该数组中元素的个数。例:charch[5];//定义字符型数组ch,它有5个元素。二维数组的定义格式如下所示。类型说明符数组名[常量表达式][常量表达式]例如inta[3][4],b[5][10];定义a为3x4(3行4列)的数组,b为5x10(5行10列)的数组。数组元素为int型数据。(2)指针类型指针类型数据在C语言中使用十分普遍。正确地使用指针类型数据,可以有效地表示复杂的数据结构,直接访问内存地址,而且可以更为有效地使用数组。2.复杂数据类型1指针和地址一个程序的指令、常量和变量都要放在机器的内存单元中,而机器的内存是按字节来划分存储单元的。给内存单元中每个字节都赋予一个编号,这就是存储单元的地址。对于内存单元,也要明确两个概念,一个是内存单元的地址,一个是内存单元的内容。前者是内存对该单元的编号,它表示该单元在整个内存中的位置。后者指的是在该内存单元中存放着的数据。出于对变量灵活使用的需要,有时在程序中围绕变量的地址展开操作,这就引入“指针”的概念。变量的地址称为变量的指针,指针的引入把地址形象化了,地址是找变量值的索引或指南,就像一根“指针”一样指向变量值所在的存储单元,因此指针即是地址,是记录变量存储单元位置的正整数。2指针变量的定义C语言规定,所有的变量在使用前必须定义,以确定其类型。指针变量也不例外,由于它是专门存放地址的,因此必须将它定义为“指针类型”。指针定义的一般形式为:类型识别符*指针变量名。如:int*ap;float*pointer;指针变量名前的“*”号表
本文标题:第6章 80C51单片机的C51程序设计.ppt
链接地址:https://www.777doc.com/doc-3259948 .html