51单片机_高级语言(C语言)程序设计.ppt
《51单片机_高级语言(C语言)程序设计.ppt》由会员分享,可在线阅读,更多相关《51单片机_高级语言(C语言)程序设计.ppt(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章 C51高级语言程序设计高级语言程序设计 4.1 C4.1 C语言高级编程语言高级编程4.1.1 C4.1.1 C语言的特点语言的特点C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,能直接对计算机硬件进行操作。既有高级语言的特点,也具有汇编语言的特点。语言简洁、紧凑,使用方便、灵活。运算符丰富。数据结构丰富,拥有现代语言的各种数据结构。可进行结构化程序设计。可以直接对计算机硬件进行操作。生成的目标代码质量高,程序执行效率高。可移植性好。4.1.2 C4.1.2 C语言与语言与MCS-51MCS-51单片机单片机汇编语言优点:执行效率高、速度快、与硬件结
2、合紧密;I/O端口操作时,使用汇编语言快捷、直观。缺点:编程难度大,可读性差,不便于移植,开发周期长。C语言优点:程序设计相比照较容易,支持多种数据类型,可移植性强,也能够对硬件直接访问,能够按地址方式访问存储器或I/O端口。故目前有较多的开发者用C语言开发单机应用系统软件。4.1.3 C514.1.3 C51编译器编译器C51编译器的作用是将C语言源程序翻译成51系列单片机可执行的代码,并且为程序调试提供必要的符号信息。目前使用最广泛的是德国Keil公司的KeilVisionC51编译器KeilC51编译器在代码生成方面领先,可产生最少的代码。它支持浮点数和长整型、重入和递归。4.1.4 k
3、eil 80514.1.4 keil 8051开发工具开发工具采用C51编写的应用程序结构清楚、模块化程度高、可读性强。应用C51进行软件开发,用户可以不必具体考虑存放器、存储器的分配等工作,而把这局部工作交给编译、连接软件,用户只需了解MCS-51的存储器结构。C51开发环境一般都提供了数学计算等子程序库,为程序开发带来方便。对于相对复杂的系统开发或复杂运算,比用汇编语言容易的多,有利于系统的维护和升级。在实时要求较高的场合,可采用C51汇编混合编程。4.1.5 C514.1.5 C51程序结构程序结构C51程序结构与标准的C语言程序结构相同,采用函数结构,一个程序由一个或多个函数组成。有一
4、个且只有一个为main()函数。在main()函数中可调用库函数和用户定义的函数。程序的开始局部一般是预处理命令、函数说明和变量定义等。预处理命令#include函数说明longfun1();floatfun2();变量定义intx,y;floatz;主函数main()fun1();/*调用功能函数1*/fun2();/*调用功能函数2*/功能函数1fun1();函数体1功能函数2fun2();函数体2C51程序的结构实例:程序的结构实例:4.2 C514.2 C51对标准对标准C C语言的扩展语言的扩展4.2.1 4.2.1 存储区域存储区域51系列单片机的内存区域被分为两大类。一类是程序存
5、储区,即ROM;另一类是数据存储区,包括内部数据存储区和外部数据存储区。内部数据存储区中又包含了51的特殊功能存放器。1.程序存储区程序存储区由关键字code进行说明。2.内部数据存储区在C51中可以用以下关键字对变量进行内部存储区的定位。Data:直接寻址区,内部RAM的低128B,即00H7FHIdata:间接寻址区,整个RAM区,即00H0FFHBdata:可位寻址区,从20H开始的16个可以位寻址的字节,即20H2FH4.2.1 4.2.1 存储区域存储区域3.外部数据存储区C51中,可以用以下关键字对变量进行内部存储区的访问。xdata:可指定多达64KB的外部直接寻址区,地址范围0
6、000H0FFFFHpdata:能访问1页256B的外部RAM,主要用在紧凑模式CompactModle4.2.1 4.2.1 存储区域存储区域4.2.2 C514.2.2 C51的数据类型的数据类型1 1字符型字符型charchar char char有有signed charsigned char和和unsigned charunsigned char之分,默之分,默认为认为signed charsigned char。2 2整型整型intint int int有有signed intsigned int和和unsigned intunsigned int之分,默认为之分,默认为signe
7、d intsigned int。3 3长整型长整型longlong long long有有signed longsigned long和和unsigned longunsigned long之分,默之分,默认为认为signed longsigned long。4 4浮点型浮点型floatfloat float float型数据的长度为型数据的长度为4 4个字节,包含指数和尾个字节,包含指数和尾数两局部,最高位为符号位,数两局部,最高位为符号位,“1“1表示负数,表示负数,“0“0表示正数,其余表示正数,其余8 8位为阶码,最后位为阶码,最后2323位为尾数的有效数位为尾数的有效数位,由于尾数的
8、整数局部隐含为位,由于尾数的整数局部隐含为“1“1,所以尾数的精,所以尾数的精度为度为2424位。格式似位。格式似Pentium CPU Pentium CPU 浮点数格式浮点数格式符号位符号位+8+8位阶码位阶码+1+1隐含隐含.23.23位尾数位尾数 5 5指针型指针型(*)(*)指针型本身就是一个变量,在这个变量中存指针型本身就是一个变量,在这个变量中存放着指向另一个数据的地址。这个指针变量要占用放着指向另一个数据的地址。这个指针变量要占用一定的内存单元。对于不同的处理器其长度不一样,一定的内存单元。对于不同的处理器其长度不一样,在在C51C51中它的长度一般为中它的长度一般为1 13
9、3个字节。个字节。6 6特殊功能存放器型特殊功能存放器型 这是这是C51C51扩充的数据类型,用于访问扩充的数据类型,用于访问MCS-51MCS-51单片机中的特殊功能存放器数据。它分为单片机中的特殊功能存放器数据。它分为sfrsfr和和sfr16sfr16两种类型,其中两种类型,其中sfrsfr占一个字节单元,利用它占一个字节单元,利用它可以访问可以访问MCS-51MCS-51内部的所有特殊功能存放器;内部的所有特殊功能存放器;sfr16sfr16占用两个字节单元,利用它可以访问占用两个字节单元,利用它可以访问MCS-51MCS-51内部所有两个字节的特殊功能存放器。在内部所有两个字节的特殊
10、功能存放器。在C51C51中对中对特殊功能存放器的访问必须先用特殊功能存放器的访问必须先用sfrsfr和和sfr16sfr16进行声进行声明。明。4.2.2 C514.2.2 C51的数据类型的数据类型7 7位类型位类型除了这些标准数据类型外,为了智能仪器仪表和工业自动化系统的需要,C51增加了一种位数据类型,用于访问MCS-51单片机中可寻址的位单元。在C51中支持两种位类型:bit型和sbit型。其中用bit定义的位变量在C51编译器编译时,在不同的时候位地址是可以变化的。而用sbit定义的位变量必须与MCS-51单片机的一个可以寻址位单元或可位寻址的字节单元中的某一位联系在一起,在C51
11、编译器编译时,其对应的位地址是不可变化的。如:bitlock_pt;/*将lock_pt定义为位变量*/4.2.2 C514.2.2 C51的数据类型的数据类型特殊功能存放器用sfr来定义,而sfr16用来定义16位的特殊功能存放器如DPTR。通过名字或地址来引用特殊功能存放器,地址必须高于80H。可位寻址的特殊功能存放器的位变量定义用关键字sbit。SFR的定义如下所示:sfrSCON=0X98;/定义SCONsbitSM0=0X9F;/定义SCON的各位sbitSM1=0X9E;sbitSM2=0X9D;sbitREN=0 x9C;sbitTB8=0X9B;sbitRB8=0X9A;sbi
12、tTI=0X99;sbitRI=0X98;7 7位类型位类型4.2.3 C514.2.3 C51的常量和变量的常量和变量一、常量一、常量常量是指在程序执行过程中其值不能改变的量。在C51中支持整型常量、浮点型常量、字符型常量和字符串型常量。1整型常量整型常量也就是整型常数,根据其值范围在计算机中分配不同的字节数来存放。2浮点型常量浮点型常量也就是实型常数,有十进制表示形式和指数表示形式两种。3字符型常量字符型常量是用单引号括起的字符,如a、1、F等。它可以是可显示的ASCII字符,也可以是不可显示的控制字符。对不可显示的控制字符,需在前面加反斜杠“组成转义字符。4字符串型常量字符串型常量由双引
13、号括起的字符组成,如“D、“1234、“ABCD等。注意:一个字符常量在内存中只用一个字节存放,而一个字符串常量在内存中存放时,不仅仅引号内的字符一个要占一个字节,而且系统会自动在后面加一个转义字符“0作为字符串结束符。因此不要将字符常量和字符串常量混淆,如字符常量A和字符串常量A是不一样的。一、常量一、常量二、变量二、变量1数据类型说明符在定义变量时,必须通过数据类型说明符指明变量的数据类型,指明变量在存储器中占用的字节数。2变量名变量名是C51为了区分不同变量,为变量取的名称。在C51中规定变量名可以由3种字符组成字母、数字和下画线,且第一个字母必须是字母或下画线。变量名有两种:普通变量名
14、和指针变量名。它们的区别是指针变量名前面要带“*号。3存储种类存储种类是指变量在程序执行过程中的作用范围。C51变量的存储种类有4种,分别是自动(auto)、外部(extern)、静态(static)和存放器(register)。4存储器类型存储器类型是用于指明变量所处单片机的存储器区域情况。存储器类型与存储种类完全不同。5特殊功能存放器变量MCS-51系列单片机片内有许多特殊功能存放器,通过这些特殊功能存放器可以控制MCS-51系列单片机的定时器、计数器、串口、I/O及其他功能部件,每一个特殊功能存放器在片内RAM中都对应于一个字节单元或两个字节单元。6位变量在C51中,允许用户通过位类型符
15、定义变量。位类型符有两个:bit和sbit。可以定义两种位变量。bit位类型符用于定义一般的可进行位处理的位变量。二、变量二、变量4.2.4 4.2.4 存储模式存储模式C51编译器支持3种存储模式:SMALL模式、COMPACT模式和LARGE模式。不同的存储模式对变量默认的存储器类型不一样。(1)SMALL模式。SMALL模式称为小编译模式,在SMALL模式下,编译时函数参数和变量被默认在片内RAM中,存储器类型为data。(2)COMPACT模式。COMPACT模式称为紧凑编译模式,在COMPACT模式下编译时,函数参数被默认在片外RAM的低256B空间,存储器类型为pdata。(3)L
16、ARGE模式。LARGE模式称为大编译模式,在LARGE模式下,编译时函数参数和变量被默认在片外RAM的64B空间,存储器类型为xdata。4.2.5 4.2.5 绝对地址的访问绝对地址的访问1使用C51运行库中预定义宏C51编译器提供了一组宏定义来对MCS-51系列单片机的code、data、pdata和xdata空间进行绝对寻址。2通过指针访问采用指针的方法,可以实现在C51程序中对任意指定的存储器单元进行访问。3使用C51扩展关键字_at_使用_at_是对指定的存储器空间的绝对地址进行访问,一般格式如下:存储器类型数据类型说明符变量名_at_地址常数4.3 C514.3 C51的运算符及
17、表达式的运算符及表达式C51有很强的数据处理能力,具有十分丰富的运算符,利用这些运算符可以组成各种表达式及语句。在C51中,运算符按其在表达式所起的作用,可分为赋值运算符、算术运算符、自增与自减运算符、关系运算符、逻辑运算符、位运算符、复合赋值运算符、逗号运算符、条件运算符、指针和地址运算符以及强制类型转换运算符等。另外,运算符按其在表达式中与运算对象的关系,又可分为单目运算符、双目运算符和三目运算符等。表达式那么是由运算符及运算对象所组成的具有特定含义的式子。4.3.1 4.3.1 算术运算符算术运算符C51中支持的算术运算符有:+加或取正值运算符;减或取负值运算符;*乘运算符;/除运算符;
18、%取余数运算符加、减、乘运算相比照较简单,而对于除运算,如果相除的两个数为浮点数,那么运算的结果也为浮点数;如果相除的两个数为整数,即为整除。例如,25.0/20.0的结果为1.25,而25/20的结果为1。对于取余运算,那么要求参加运算的两个数必须为整数,运算结果为它们的余数。例如,x=5%3,结果x的值为2。4.3.2 4.3.2 关系和逻辑运算符关系和逻辑运算符C51中有6种关系运算符,分别如下:大于;=大于等于;3,结果为真(1),而10=100,结果为假(0)。C51有3种逻辑运算符:逻辑或;&逻辑与;!逻辑非关系运算符用于反映两个表达式之间的大小关系,逻辑运算符那么用于求条件式的逻
19、辑值,用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑“与的格式为:条件式1&条件式2逻辑“或的格式为:条件式1条件式2逻辑“非的格式为:!条件式4.3.2 4.3.2 关系和逻辑运算符关系和逻辑运算符4.3.3 4.3.3 位运算符位运算符C51语言能对运算对象按位进行操作,它与汇编语言使用一样方便。位运算是按位对变量进行运算的,但并不改变参与运算的变量的值。如果要求按位改变变量的值,那么要利用相应的赋值运算。C51中位运算符只能对整数进行操作,不能对浮点数进行操作。C51中的位运算符有:&按位与;按位或;按位异或;按位取反;右移4.3.4 4.3.4 逗号运算符逗号运算符
20、在C51语言中,逗号“,是一个特殊的运算符,可以用它将两个或两个以上的表达式连接起来,称为逗号表达式。逗号表达式的一般格式为:表达式1,表达式2,表达式n程序执行时对逗号表达式的处理:按从左至右的顺序依次计算出各个表达式的值,而整个逗号表达式的值是最右边的表达式(表达式n)的值。例如:x=(a=3,6*3)结果x的值为18。4.3.5 4.3.5 赋值运算符赋值运算符在C51中,赋值运算符“=的功能是将一个数据的值赋给一个变量,如x=10。利用赋值运算符将一个变量与一个表达式连接起来的式子称为赋值表达式。在赋值表达式的后面加一个分号“;就构成了赋值语句,一个赋值语句的格式为:变量=表达式;执行
21、时先计算出右边表达式的值,然后赋值给左边的变量。例如:x=8+9;/*将8+9的值赋给变量x*/x=y=5;/*将常数5同时赋值给变量x和y*/在C51中,允许在一个语句中同时给多个变量赋值,赋值顺序自右向左。C51语言中支持在赋值运算符“=的前面加上其他运算符,组成复合赋值运算符。下面是C51中支持的复合赋值运算符:+=加法赋值;=减法赋值;*=乘法赋值;/=除法赋值;%=取模赋值;&=逻辑与赋值;=逻辑或赋值;=逻辑异或赋值;=逻辑非赋值;=右移位赋值;b)?a:b的执行结果是将a和b中较大的数赋给变量max。4.3.7 4.3.7 指针与地址运算符指针与地址运算符指针是C51语言中一个十
22、分重要的概念,在C51中的数据类型中专门有一种指针类型。指针为变量的访问提供了另一种方式,变量的指针就是该变量的地址,还可以定义一个专门指向某个变量的地址指针变量。为了表示指针变量和它所指向的变量地址之间的关系,C51中提供了两个专门的运算符:*指针运算符;&取地址运算符指针运算符“*放在指针变量前面,通过它可以访问以指针变量的内容为地址所指向的存储单元。取地址运算符“&放在变量的前面,通过它取得变量的地址,变量的地址通常送给指针变量。4.3.8 4.3.8 表达式和表达式语句表达式和表达式语句C51语言是一种结构化的程序设计语言,它提供了十分丰富的程序控制语句,表达式语句是最根本的一种语句。
23、在表达式的后边加一个分号“;就构成了表达式语句,下面的语句都是合法的表达式语句:a=+b*3;x=4;y=7;+k;复合语句是由假设干条语句组合而成的一种语句。在C51中,用一个大括号“将假设干条语句括在一起就形成了一个复合语句。复合语句最后不需要以分号“;结束,但它内部的各条语句仍需以分号“;结束。复合语句的一般形式为:局部变量定义;语句1;语句2;4.3.8 4.3.8 表达式和表达式语句表达式和表达式语句4.4 C514.4 C51函数函数在程序设计过程中,对于较大的程序一般采用模块化结构。通常将其分成假设干个子程序模块,每个子程序模块完成一种特定的功能。在C51中,子程序模块是用函数来
24、实现的。在前面介绍C51的程序结构中,C51的程序是由一个主函数和假设干个子函数组成的,每个子函数完成一定的功能。在一个程序中只能有一个主函数,主函数不能被调用。程序执行时从主函数开始,到主函数最后一条语句结束。子函数可以被主函数调用,也可以被其他子函数或其本身调用形成子程序嵌套。在C51中,系统提供了丰富的功能函数放于标准函数库中,以供用户调用。如果用户需要的函数没有包含在函数库中,用户也可以根据需要自己定义函数以便使用。从C51程序结构上划分主函数main()和普通函数两种。一个程序只需要一个主函数,可以有很多个普通函数。1对于普通函数,从用户的角度看,有两种类型:标准库函数标准库函数由C
25、51编译系统提供,用户不必自己定义,可以直接使用。一般库函数都是具有一定独立功能的公用函数,在编译系统设计时,设计者将它们放在系统的库函数中,所以称作库函数。不同系统提供的库函数的数量和功能都有所不同,作为用户,在进行程序设计时应该善于使用这些资源,以便提高效率,节省开发时间。用户自定义函数用户自定义函数是用户根据自己的需要在程序中自己编写的函数。一、函数的分类一、函数的分类2从函数定义形式划分对于普通函数,从函数定义的形式上,可划分为:无参数函数该函数在调用时没有参数,主调函数并不将数据传送给被调用函数,一般用来执行指定的一组操作。无参数函数可以带回也可以不带回函数值。有参数函数调用该函数时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 高级 语言 程序设计
限制150内