C51程序设计语言课件.pptx

上传人(卖家):三亚风情 文档编号:2959068 上传时间:2022-06-15 格式:PPTX 页数:117 大小:1.51MB
下载 相关 举报
C51程序设计语言课件.pptx_第1页
第1页 / 共117页
C51程序设计语言课件.pptx_第2页
第2页 / 共117页
C51程序设计语言课件.pptx_第3页
第3页 / 共117页
C51程序设计语言课件.pptx_第4页
第4页 / 共117页
C51程序设计语言课件.pptx_第5页
第5页 / 共117页
点击查看更多>>
资源描述

1、第第4章章 51单片机的软件基础单片机的软件基础 C51的头文件与库函数的头文件与库函数 C51的应用技巧的应用技巧第第4章章 51单片机的软件基础单片机的软件基础随着随着80C5180C51单片机硬件性能的提升,尤其是片内程单片机硬件性能的提升,尤其是片内程序存储器容量的增大和时钟工作频率的提高,已基本序存储器容量的增大和时钟工作频率的提高,已基本克服了高级语言产生代码长、运行速度慢、不适合单克服了高级语言产生代码长、运行速度慢、不适合单片机使用的致命缺点。由此片机使用的致命缺点。由此C51C51已经得到广泛的推广和已经得到广泛的推广和应用。应用。采用采用C51C51程序设计语言,程序设计语

2、言,编程者只需了解变量和常编程者只需了解变量和常量的存储类型与量的存储类型与80C5180C51单片机存储空间的对应关系,而单片机存储空间的对应关系,而不必深入了解单片机的硬件和接口不必深入了解单片机的硬件和接口。C51C51编译器会自动编译器会自动完成变量的存储单元的分配。完成变量的存储单元的分配。 C51语言概述语言概述第第4章章 51单片机的软件基础单片机的软件基础成于大气 信达天下C51 C51 语语 言言 的的 特特 点点C提供了很多提供了很多数学函数数学函数并支持并支持浮点运浮点运算算,开发效率高,故可缩短开发时间,开发效率高,故可缩短开发时间,增加程序可读性和可维护性增加程序可读

3、性和可维护性C语言程序本身语言程序本身不依赖于机器硬件系统不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单基本上不作修改就可将程序从不同的单片机中移植过来片机中移植过来C语言作为一种非常语言作为一种非常方便方便的语言而得的语言而得到广泛的支持,国内最通用的是到广泛的支持,国内最通用的是Keil C51第第4章章 51单片机的软件基础单片机的软件基础#include /*文件包含,文件包含,51寄存器说明寄存器说明 */main ( ) /* 主函数主函数 */ int x,y,z;/* 变量定义变量定义 (变量类型)(变量类型)*/ if(xy) z=x;/* 运算符,基本语句运算符,

4、基本语句*/ else z=y;C51程序示例:程序示例:第第4章章 51单片机的软件基础单片机的软件基础C51C51的程序结构的程序结构与一般与一般C语言的结构相同,以语言的结构相同,以main()函数为程序入口,程函数为程序入口,程序体中包含若干语句还可以包含若干函数。序体中包含若干语句还可以包含若干函数。C51函数的一般格式函数的一般格式 类型类型 函数名(参数表)函数名(参数表) 数据说明部分数据说明部分 语句执行部分语句执行部分 第第4章章 51单片机的软件基础单片机的软件基础 程序由函数组成(一个主函数,或程序由函数组成(一个主函数,或一个主函数和若干自定义函数);一个主函数和若干

5、自定义函数); 利用预处理命令对变量或函数进行利用预处理命令对变量或函数进行集中定义或说明;集中定义或说明; 函数和变量都需遵循先定义后使用函数和变量都需遵循先定义后使用的基本原则;的基本原则; 主函数中的所有语句执行完毕主函数中的所有语句执行完毕,则程则程序结束。序结束。 C51与标准与标准C程序程序结构完全相同结构完全相同第第4章章 51单片机的软件基础单片机的软件基础举例:举例:LED闪烁控制功能闪烁控制功能第第4章章 51单片机的软件基础单片机的软件基础预处理命令预处理命令-函数说明函数说明-全局变量定义全局变量定义- 主函数主函数-调用函数调用函数-局部变量定义局部变量定义- 程序体

6、程序体 程序体程序体-第第4章章 51单片机的软件基础单片机的软件基础C51简单例题简单例题 #include AT89X51.H /包含头文件包含头文件 void main(void) / 主程序主程序 while(1) /无限循环无限循环 P2_0=0; /亮灯亮灯 P2_0=1; /灭灯灭灯 第第4章章 51单片机的软件基础单片机的软件基础成于大气 信达天下一、一、C51C51中常用的头文件中常用的头文件Reg52.h(定义单片机的特殊功能寄(定义单片机的特殊功能寄 存器和端口)存器和端口)Stdio.h (标准输入输出函数库)(标准输入输出函数库)Math.h(标准数学函数库)(标准数

7、学函数库)Absacc.h (外部绝对地址访问函数库)(外部绝对地址访问函数库)Ctype.h(字符函数库)(字符函数库)Stdlib.h(数学函数库)(数学函数库)第第4章章 51单片机的软件基础单片机的软件基础其它部分头文件:其它部分头文件:(1)头文件)头文件 ctype.h 字符处理函数字符处理函数 本类别函数用于对单个字符进行处理,包括字符的类别测试本类别函数用于对单个字符进行处理,包括字符的类别测试和字符的大小写转换和字符的大小写转换(2)头文件)头文件 local.h 地区化地区化 本类别的函数用于处理不同国家的语言差异。本类别的函数用于处理不同国家的语言差异。(3)头文件)头文

8、件 math.h函数列表函数列表 函数类别函数类别 函数用途函数用途 详细说明详细说明 ,如三角函数,如三角函数 反余弦反余弦 acos 反正弦反正弦 asin 第第4章章 51单片机的软件基础单片机的软件基础C51常用头文件:常用头文件:(4)头文件)头文件 signal.h 信号处理信号处理 该分类函数用于处理那些在程序执行过程中发生例外的情况该分类函数用于处理那些在程序执行过程中发生例外的情况(5)头文件)头文件 stdio.h 输入输出函数输入输出函数 该分类用于处理包括文件、控制台等各种输入输出设备,各该分类用于处理包括文件、控制台等各种输入输出设备,各种函数以种函数以“流流”的方式

9、实现的方式实现如:如: 打开文件打开文件 fopen 格式化输入与输出函数格式化输入与输出函数 格式输出格式输出 fprintf 格式输入格式输入 fscanf 格式输出(控制台)格式输出(控制台) printf 格式输入(控制台)格式输入(控制台) scanf 第第4章章 51单片机的软件基础单片机的软件基础宏定义宏定义 在语言源程序中允许在语言源程序中允许用一个标识符来表示一个字符串,用一个标识符来表示一个字符串,称为称为“宏宏”。被定义为。被定义为“宏宏”的标识符称为的标识符称为“宏名宏名”。在编。在编译预处理时,译预处理时,对程序中所有出现的对程序中所有出现的“宏名宏名”,都用宏定义中

10、,都用宏定义中的字符串去代换的字符串去代换,这称为,这称为“宏代换宏代换”或或“宏展开宏展开”。 宏定义是由源程序中的宏定义是由源程序中的宏定义命令宏定义命令完成的。宏代换是完成的。宏代换是由预处理程序自动完成的。由预处理程序自动完成的。宏定义的一般形式为:宏定义的一般形式为: #define 标识符标识符 字符串字符串“define”为宏定义命令。为宏定义命令。“标识符标识符”为所定义的宏名。为所定义的宏名。“字符串字符串”可以是常数、表达式、或含有参数的表达式、可以是常数、表达式、或含有参数的表达式、格式串等。格式串等。在程序中多次使用宏,可以简化源程序的输入。与使在程序中多次使用宏,可以

11、简化源程序的输入。与使用函数相比,会占用较多内存,但执行速度快用函数相比,会占用较多内存,但执行速度快。例如例如: #define M (y*y+3*y)第第4章章 51单片机的软件基础单片机的软件基础 文件包含命令文件包含命令 文件包含是文件包含是C预处理程序的另一个重要功能。预处理程序的另一个重要功能。文件包含文件包含是用指定文件的全部内容替换该预处理命令行是用指定文件的全部内容替换该预处理命令行。即一个程。即一个程序文件将另一个指定文件的内容完全包含进来。序文件将另一个指定文件的内容完全包含进来。在程序设计中,文件包含是很有用的。一个大的程序可在程序设计中,文件包含是很有用的。一个大的程

12、序可以分为多个模块,由多个程序员分别编程。有些公用的符号以分为多个模块,由多个程序员分别编程。有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用。这样,可避免在每个文件开包含命令包含该文件即可使用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时间,并减少出错。头都去书写那些公用量,从而节省时间,并减少出错。 #include 文件名文件名 或:或: #include 。 文件包含的对象最为常见的是头文件(扩展名文件包含的对象最为常见的是头文件(扩展名 .h)。在)。在前面我们已多次用此命令包

13、含过库函数的头文件。文件包前面我们已多次用此命令包含过库函数的头文件。文件包含命令行的一般形式为:含命令行的一般形式为:第第4章章 51单片机的软件基础单片机的软件基础二、二、C51的标识符、常量和关键字的标识符、常量和关键字标识符标识符用来标识源程序中某个对象的名字,这些对象用来标识源程序中某个对象的名字,这些对象可以是语句、数据类型、函数、变量、数组等。可以是语句、数据类型、函数、变量、数组等。标识符标识符区分大小写区分大小写,第一个字符必须是字母第一个字符必须是字母或下划线。或下划线。C51中有些库函数的标识符是以下划线开头的,所以中有些库函数的标识符是以下划线开头的,所以一般不要以下划

14、线开头命名标识符一般不要以下划线开头命名标识符。常量常量:凡以数字:凡以数字0开头的数字序列,一律作为开头的数字序列,一律作为八进制数八进制数处理;凡处理;凡以以0 x开头开头,后面跟若干数字的,一律作为,后面跟若干数字的,一律作为十六进十六进制数制数处理;其它作为处理;其它作为十进制数十进制数处理。处理。 关键字关键字:ANSI C标准关键字和标准关键字和C51编译器的扩展关键编译器的扩展关键字字第第4章章 51单片机的软件基础单片机的软件基础C51扩展的若干关键字一览表扩展的若干关键字一览表 变量名不得使用标准变量名不得使用标准C语言和语言和C51语言的关键字。语言的关键字。第第4章章 5

15、1单片机的软件基础单片机的软件基础u C51的变量的变量 在程序执行过程中,数值可以发生改变的量称为在程序执行过程中,数值可以发生改变的量称为变量变量。 变量名与存储单元地址相对应,变量值变量名与存储单元地址相对应,变量值与存储单元的内容相对应。与存储单元的内容相对应。例例如如在哈佛结构的存储空间中如何建立变量概念?在哈佛结构的存储空间中如何建立变量概念? 第第4章章 51单片机的软件基础单片机的软件基础【存储种类存储种类】数据类型数据类型【存储类型存储类型】 变量名变量名(标准(标准C)(标准(标准C)* 括号项括号项可以缺省(但需有缺省值)可以缺省(但需有缺省值)C51变量定义的四要素变量

16、定义的四要素:(C51特有)特有)(标准(标准C+C51)第第4章章 51单片机的软件基础单片机的软件基础【存储种类存储种类】数据类型数据类型【存储类型存储类型】变量名变量名共有四个说明符:共有四个说明符:1、auto(自动型)(自动型)变量的作用范围在定义它的函数体或变量的作用范围在定义它的函数体或语句块内。执行结束后,变量所占内存即被释放。语句块内。执行结束后,变量所占内存即被释放。2、extern(外部型)(外部型) 在一个源文件中被定义为外部型在一个源文件中被定义为外部型的变量,在其它源文件中需要通过的变量,在其它源文件中需要通过extern说明方可使用。说明方可使用。3、static

17、(静态型)(静态型) 利用利用static可使变量定义所在的函数可使变量定义所在的函数或语句块执行结束后,其分配的内存单元继续保留。或语句块执行结束后,其分配的内存单元继续保留。4、register(寄存器型)(寄存器型) 将变量对应的储存单元指定为将变量对应的储存单元指定为通用寄存器,以提高程序运行速度。通用寄存器,以提高程序运行速度。缺省存储种类为缺省存储种类为auto (自动自动)型变量型变量第第4章章 51单片机的软件基础单片机的软件基础C51C51中数据声明的格式中数据声明的格式 类型说明符类型说明符修饰符修饰符 标识符标识符=初值初值unsigned char code Flag

18、= 0 x0f ;类型说明类型说明符符修饰符修饰符标识标识符符初初值值这个定义给出的内容是:定义一个无符号的字符型变这个定义给出的内容是:定义一个无符号的字符型变量,该变量的名字是量,该变量的名字是Flag,初值为,初值为0 x0f,该变量存放,该变量存放在在ROM空间中。空间中。说明:说明:如果在一个定义中,没有修饰符,即没有说明如果在一个定义中,没有修饰符,即没有说明存放的位置,则默认存放在片内存放的位置,则默认存放在片内RAM中,即是一个中,即是一个data类型的变量。类型的变量。第第4章章 51单片机的软件基础单片机的软件基础例如:例如:unsigned char code Flag

19、= 0 x0f;就是声明一个无符号的就是声明一个无符号的char型变量型变量Flag,并给他赋初值,并给他赋初值为为0 x0f;并且声明他所在的存储空间在片内统一编址的;并且声明他所在的存储空间在片内统一编址的ROM中。中。 声明中,如果没有修饰符,则数据默认的存储空间为声明中,如果没有修饰符,则数据默认的存储空间为data型,也就是在片内型,也就是在片内RAM中。中。C51的数据声明的一般格式如下的数据声明的一般格式如下类型说明符类型说明符修饰符修饰符 标识符标识符=初值初值C51C51的数据类型的数据类型第第4章章 51单片机的软件基础单片机的软件基础数据的不同格式叫做数据类型数据的不同格

20、式叫做数据类型 * 有符号数类型可以忽略有符号数类型可以忽略signed标识符标识符标准标准C语言的数据类语言的数据类型型【存储种类存储种类】数据类型数据类型 【存储类型存储类型】变量名变量名第第4章章 51单片机的软件基础单片机的软件基础成于大气 信达天下C51C51中的数据类型中的数据类型类型类型符号符号关关 键键 字字所占位数所占位数数据表示范围数据表示范围整整型型有有(signed) int16-3276832767( signed )short int16-3276832767( signed )long int32-21474836482147483647无无unsigned in

21、t16065535unsigned short int16065535unsigned long int3204294967295实型实型有有float32-3.4e-383.4e+38有有double32-1.7e-3081.7e+308字字符符型型有有char8-128127无无unsigned char80255第第4章章 51单片机的软件基础单片机的软件基础C C语言中的数据类型语言中的数据类型类型类型符号符号关关 键键 字字所占位数所占位数数据表示范围数据表示范围整整型型有有(signed) int16-3276832767( signed )short int16-32768327

22、67( signed )long int32-21474836482147483647无无unsigned int16065535unsigned short int16065535unsigned long int3204294967295实型实型有有float32-3.4e-383.4e+38有有double32-1.7e-3081.7e+308字字符符型型有有char8-128127无无unsigned char80255从上面两个表可以看出,从上面两个表可以看出,C51中的数据类型和中的数据类型和C语言中的语言中的数据类型完全一样。数据类型完全一样。第第4章章 51单片机的软件基础单片

23、机的软件基础C51扩充扩充数据类型:数据类型:bit、sfr或或sfr16、sbit bit 型型关键词关键词bit用于定义一用于定义一个位变量个位变量,语法规则:,语法规则:bit bit_name = 0或或1;例如:例如:bit door = 0 ; /定义一个叫定义一个叫door的位变量且初值为的位变量且初值为0标准标准C的变量定义举例:的变量定义举例: int a = 5 ; /定义一个初值为定义一个初值为5的整形变量的整形变量a 语法规则:语法规则:int int_name = 常数常数; 注意注意:上述变量的物理地址是由编译器分配的:上述变量的物理地址是由编译器分配的 第第4章章

24、 51单片机的软件基础单片机的软件基础sfr或或sfr16型型关键词关键词sfr或或sfr16用于定义用于定义SFR字节地址变量字节地址变量,语法规则:,语法规则: sfr 或或 sfr16 sfr_name = 字节地址字节地址常数常数;51MCU中有中有21个个SFR,如何定义与这些单元相关的变量?,如何定义与这些单元相关的变量?第第4章章 51单片机的软件基础单片机的软件基础例如,例如,sfr P0 = 0 x80; /定义定义P0口地址口地址80Hsfr PCON = 0 x87; /定义定义PCON地址地址87H sfr16 DPTR=0 x82; /定义定义DPTR的低端地址的低端

25、地址82H注意注意:SFR字节地址变量的物理地址是由字节地址变量的物理地址是由MCU资源决定的资源决定的第第4章章 51单片机的软件基础单片机的软件基础sbit型型部分部分SFR具有位地址,如何定义与这些位地址相关的变量?具有位地址,如何定义与这些位地址相关的变量?CYCYACACF0F0RS1RS1RS0RS0OVOVF1F1P PCYCYACACF0F0RS1RS1RS0RS0OVOVF1F1P PCYCYACACF0F0RS1RS1RS0RS0OVOVF1F1P PCYCYACACF0F0RS1RS1RS0RS0OVOVF1F1P PD07D07D7HD7HD6HD6HD5HD5HD4H

26、D4HD3HD3HD2HD2HD1HD1HD0HD0HD0HD0HPSWPSWD06D06D05D05D04D04D03D03D02D02D01D01D00D00绝对位地址绝对位地址相对位地址相对位地址字节地址字节地址两种位地址表达形式:绝对位地址、相对位地址两种位地址表达形式:绝对位地址、相对位地址第第4章章 51单片机的软件基础单片机的软件基础 1)将)将SFR的的绝对位地址绝对位地址定义为位变量名定义为位变量名sbit bit_name = 位地址常数位地址常数;例如,例如, sbit CY = 0 xD7; 3)将)将SFR的的相对位位置相对位位置定义位变量名定义位变量名 sbit b

27、it_name = sfr_name 位位置位位置;例如,例如, sbit CY = PSW7; 2)将)将SFR的的相对位地址相对位地址定义为位变量名定义为位变量名sbit bit_name = sfr字节地址字节地址 位位置位位置; 例如,例如, sbit CY = 0 xD07; 关键词关键词sbit用于定义用于定义SFR位地址变量位地址变量,三种定义形式:,三种定义形式:第第4章章 51单片机的软件基础单片机的软件基础C51编译器在头文件编译器在头文件“REG51.H”中定义了全部中定义了全部sfr/sfr16和和sbit变变量。量。用一条预处理命令用一条预处理命令#include 把

28、这个头文件包含把这个头文件包含到到C51程序中,无需重新定义即可直接使用它们的名称。程序中,无需重新定义即可直接使用它们的名称。第第4章章 51单片机的软件基础单片机的软件基础应用举例:应用举例:第第4章章 51单片机的软件基础单片机的软件基础表表1 C51数据类型、长度和数值范围数据类型、长度和数值范围数据类型数据类型表示方法表示方法长长 度度数数 值值 范范 围围无符号字符型无符号字符型 unsigned char 1字节字节 0255有符号字符型有符号字符型 signed char1字节字节 - -128127无符号整型无符号整型unsigned int2字节字节 065535有符号整型

29、有符号整型signed int2字节字节 - -3276832767无符号长整型无符号长整型 unsigned long 4字节字节 04294967295有符号长整型有符号长整型 signed long4字节字节 - -21474836482147483647浮点型浮点型float4字节字节 1.1755E-383.40E+38特殊功能寄特殊功能寄存器型存器型sfrsfr161字节字节2字节字节0255065535位类型位类型bit、sbit1位位0或或1第第4章章 51单片机的软件基础单片机的软件基础C C5151的数据类型扩充定义的数据类型扩充定义例:例:sfr P1 = 0 x90;

30、sfr16 T2 = 0 xCC; sbit OV = PSW2; sbit P10 = 0 x900; 或或 sbit P10 = P10; 类型类型关键字关键字所占位数所占位数数的表示范围数的表示范围特殊功能寄存器特殊功能寄存器声明声明sfr1B(8bit)025516位特殊功能寄存器位特殊功能寄存器声明声明sfr162B(16bit)065535位变量数据声明位变量数据声明bit1bit0或或1可寻址位(特殊功能位)声明可寻址位(特殊功能位)声明sbit1bit0或或1 对对C51编译器来说,编译器来说,short和和int是相同类型,是相同类型,double和和float是同一类型;是

31、同一类型; 低地址存高字节,高地址存低字节;低地址存高字节,高地址存低字节; 有符号数符号位在最低字节的最高位;有符号数符号位在最低字节的最高位;第第4章章 51单片机的软件基础单片机的软件基础C C5151的数据类型扩充定义的数据类型扩充定义类型类型关键字关键字所占位数所占位数数的表示范围数的表示范围特殊功能寄存器特殊功能寄存器声明声明sfr1B(16bit)025516位特殊功能寄存器位特殊功能寄存器声明声明sfr162B(32bit)065535位变量数据声明位变量数据声明bit1bit0或或1可寻址位(特殊功能位)声明可寻址位(特殊功能位)声明sbit1bit0或或1 sbit是对应可

32、位寻址空间的一个位,可位寻址区是对应可位寻址空间的一个位,可位寻址区20H2FH或者特殊功能寄存器区或者特殊功能寄存器区0 x800 xFF。一旦用了。一旦用了sbit xxx = REGE6的定义,这个的定义,这个sbit量就确定地址了。量就确定地址了。 bit和和sbit的最大区别在于,的最大区别在于,bit是定义一个变量;是定义一个变量;sbit经常经常用在寄存器中的,方便对寄存器的某位进行操作。用在寄存器中的,方便对寄存器的某位进行操作。第第4章章 51单片机的软件基础单片机的软件基础 sbit是对应可位寻址空间的一个位,可位寻址区是对应可位寻址空间的一个位,可位寻址区20H2FH或者

33、特殊功能寄存器区或者特殊功能寄存器区0 x800 xFF。一旦用了。一旦用了sbit xxx = REGE6的定义,这个的定义,这个sbit量就确定地址了。量就确定地址了。 bit和和sbit的最大区别在于,的最大区别在于,bit是定义一个变量;是定义一个变量;sbit经常经常用在寄存器中的,方便对寄存器的某位进行操作。用在寄存器中的,方便对寄存器的某位进行操作。例如:例如:bit bit_name; /只是申明只是申明bit_name 是一个位变量名,它只能是一个位变量名,它只能是是1或者或者0bit door=0; /申明申明door是一个位变量是一个位变量, 并赋初值并赋初值0。这与这与

34、 char abc申明申明abc是一个是一个char型变量类似。型变量类似。 bit定义了一个普通的位变量,函数可包含定义了一个普通的位变量,函数可包含bit类型参数,也类型参数,也可作为返回值。存储在哪儿我们并不关心可作为返回值。存储在哪儿我们并不关心。但是:但是:sbit CY=0 xD07; /将位的相对地址赋给变量。将位的相对地址赋给变量。 sbit定义的位变量只能位于可位寻址或特殊功能寄存器中,定义的位变量只能位于可位寻址或特殊功能寄存器中,一旦定义,其地址就不能改变啦。一旦定义,其地址就不能改变啦。第第4章章 51单片机的软件基础单片机的软件基础36用用sfr16定义定义16位特殊

35、功能寄存器位特殊功能寄存器当16位寄存器的高8位地址紧排在低8位地址之后时,就可以定义一个16位特殊功能寄存器变量。定义格式为:sfr16 特殊功能寄存器名=16位特殊功能寄存器中低8位的地址例如: sfr16 DPTR=0 x82;/*指定DPTR寄存器地址为0 x82,其中DPL的地址为0 x82,DPH的地址为0 x83*/注意注意:这种定义适用于所有新的:这种定义适用于所有新的16位位SFR,但不能用,但不能用于定时于定时/计数器计数器T0和定时和定时/计数器计数器T1的定义。的定义。第第4章章 51单片机的软件基础单片机的软件基础数组类型:数组类型:数组是一组数据,其中的每一个数据元

36、素都属于同一数组是一组数据,其中的每一个数据元素都属于同一类型,类型,各元素可以用数组名和下标来唯一确定各元素可以用数组名和下标来唯一确定。定义格式。定义格式类似于数据定义:类似于数据定义:数据类型数据类型 数组名数组名常量表达式常量表达式多维数组的定义:多维数组的定义:数据类型数据类型 数组名数组名常量表达式常量表达式 常量表达式常量表达式 例:例:int xdata xx 15; char code str=“How are you?”;第第4章章 51单片机的软件基础单片机的软件基础用户用户RAM区区用户用户扩展扩展RAMRAM64K64K位 寻位 寻址区址区4 组 通组 通用寄存用寄存

37、区区特 殊特 殊功 能功 能寄 存寄 存器区器区7FH30H2FH20H1FH00HFFH80H高高 128字节区字节区 低低 128字节区字节区 FFFFH1000H0FFFH0000H内部内部ROM 外部外部ROMEA=0只 对 外 部只 对 外 部ROM寻址寻址范围为范围为64KBEA=1先 对 内 部先 对 内 部ROM4K范范围 寻 址 超围 寻 址 超过过0FFFH时 自 动 寻时 自 动 寻找外部找外部0000HFFFFH内部内部RAM外部外部RAM80C51存储器结构组成存储器结构组成第第4章章 51单片机的软件基础单片机的软件基础【存储种类存储种类】数据类型数据类型【存储类型

38、存储类型】变量名变量名 51单片机的单片机的 三个逻辑存储空间:三个逻辑存储空间:片内数据存储器,片外数据存储器和程序存储器。片内数据存储器,片外数据存储器和程序存储器。第第4章章 51单片机的软件基础单片机的软件基础建立建立C51存储类型存储类型与与存储空间存储空间的对应关系的对应关系data区区code区区xdata区区bdata区区pdata区区idata区区第第4章章 51单片机的软件基础单片机的软件基础C51的存储类型与存储空间对应关系表的存储类型与存储空间对应关系表 SMALL系统系统COMPACT系统系统LARGE系统系统编译模式编译模式第第4章章 51单片机的软件基础单片机的软

39、件基础三种编译模式分别对应于三种三种编译模式分别对应于三种缺省存储类型缺省存储类型:【存储种类存储种类】数据类型数据类型【存储类型存储类型】变量名变量名C51编译器可根据当前采取的编译模式自动认定默认的存编译器可根据当前采取的编译模式自动认定默认的存储类型储类型约定约定:若无特殊声明,一般均为:若无特殊声明,一般均为“SMALL编译模式编译模式”第第4章章 51单片机的软件基础单片机的软件基础 例例 变量的存储模式变量的存储模式 #pragma small /*变量的存储模式为变量的存储模式为Small */ char k1; /* k1存储模式存储模式Small ,存储器类型默认,存储器类型

40、默认data*/ int xdata m1; /* m1存储模式为存储模式为Small ,存储器类型,存储器类型xdata*/ #pragma compact /*变量的存储模式为变量的存储模式为Compact */ char k2; /* k2存储模式存储模式Compact , k2存储器类型默认存储器类型默认pdata*/ int xdata m2; /* m2存储模式存储模式Compact ,存储器类型,存储器类型xdata */ int func1(int x1,int y1) large /*函数函数Large , x1和和y1存储器类型存储器类型xdata */ return(x1

41、+y1); int func2(int x2,int y2) /*函数默认函数默认Small , x2和和y2存储器类型存储器类型data */ return(x2-y2); 第第4章章 51单片机的软件基础单片机的软件基础4.1.4 变量的存储种类(属性)变量的存储种类(属性)变量是一种在程序执行过程中,其数值不断变变量是一种在程序执行过程中,其数值不断变化的量。同化的量。同ANSI C一样,一样,C51规定变量必须先定义规定变量必须先定义后使用。后使用。C51对变量的进行定义的格式如下:对变量的进行定义的格式如下:存储种类存储种类 数据类型数据类型 存储器类型存储器类型 变量名表变量名表其

42、中,存储种类(属性)和存储器类型是可选其中,存储种类(属性)和存储器类型是可选项。项。 存储种类是指变量在程序执行过程中的作用范存储种类是指变量在程序执行过程中的作用范围。变量的存储种类有四种,分别为:围。变量的存储种类有四种,分别为:u自动(自动(auto)默认值,变量为函数内有效。默认值,变量为函数内有效。u外部(外部(extern)变量对所有函数有效。变量对所有函数有效。u静态(静态(static)u寄存器(寄存器(register)编译系统自动生成。编译系统自动生成。第第4章章 51单片机的软件基础单片机的软件基础存储种类存储种类是是指变量在程序执行过程中的作用范围指变量在程序执行过程

43、中的作用范围。C51变量的存储种类有四种,分别是自动变量的存储种类有四种,分别是自动(auto)、外、外部部(extern)、静态、静态(static)和寄存器和寄存器(register)。(1)auto: 使用使用auto定义的变量称为自动变量,其作用范围定义的变量称为自动变量,其作用范围在定义它的函数体或复合语句内部,在定义它的函数体或复合语句内部,当定义它的函数当定义它的函数体或复合语句执行时,体或复合语句执行时,C51才为该变量分配内存空间,才为该变量分配内存空间,结束时占用的内存空间释放。结束时占用的内存空间释放。自动变量一般分配在内自动变量一般分配在内存的堆栈空间中。定义变量时,如

44、果省略存储种类,存的堆栈空间中。定义变量时,如果省略存储种类,则该变量默认为自动则该变量默认为自动(auto)变量。变量。第第4章章 51单片机的软件基础单片机的软件基础(2)extern: 使用使用extern定义的变量称为外部变量。在一个函数体内,定义的变量称为外部变量。在一个函数体内,要使用一个已在该函数体外或别的程序中定义过的外部变量要使用一个已在该函数体外或别的程序中定义过的外部变量时,该变量在该函数体内要用时,该变量在该函数体内要用extern说明说明。外部变量被定义外部变量被定义后分配固定的内存空间,在程序整个执行时间内都有效,直后分配固定的内存空间,在程序整个执行时间内都有效,

45、直到程序结束才释放。到程序结束才释放。(3)static: 使用使用static定义的变量称为静态变量。它又分为定义的变量称为静态变量。它又分为内部静内部静态变量态变量和和外部静态变量外部静态变量。在函数体内部定义的静态变量为内在函数体内部定义的静态变量为内部静态变量,它在对应的函数体内有效,一直存在,但在函部静态变量,它在对应的函数体内有效,一直存在,但在函数体外不可见,这样不仅使变量在定义它的函数体外被保护,数体外不可见,这样不仅使变量在定义它的函数体外被保护,还可以实现当离开函数时值不被改变还可以实现当离开函数时值不被改变。外部静态变量上在函外部静态变量上在函数外部定义的静态变量。它在程

46、序中一直存在,但在定义的数外部定义的静态变量。它在程序中一直存在,但在定义的范围之外是不可见的。如在多文件或多模块处理中,外部静范围之外是不可见的。如在多文件或多模块处理中,外部静态变量只在文件内部或模块内部有效态变量只在文件内部或模块内部有效。第第4章章 51单片机的软件基础单片机的软件基础外部变量与全局静态变量的区别:外部变量与全局静态变量的区别: (a)若程序由一个源文件构成时,全局变量与全局静态变)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。量没有区别。 (b)若程序由多个源文件构成时:全局静态变量为定义该若程序由多个源文件构成时:全局静态变量为定义该变量的源文件所独享,

47、对组成该程序的其它源文件是无效。变量的源文件所独享,对组成该程序的其它源文件是无效。 (c)具有外部链接的静态;可以在所有源文件里调用;除具有外部链接的静态;可以在所有源文件里调用;除了本文件,其他文件可以通过了本文件,其他文件可以通过extern的方式引用;的方式引用;静态全局变量的作用:静态全局变量的作用: (a)不必担心其它源文件使用相同变量名,彼此相互独)不必担心其它源文件使用相同变量名,彼此相互独立。立。(b)在某源文件中定义的静态全局变量不能被其他源文)在某源文件中定义的静态全局变量不能被其他源文件使用或修改。件使用或修改。(c) 只能在本文件中使用!具有内部链接的静态;不允许只能

48、在本文件中使用!具有内部链接的静态;不允许在其他文件里调用;在其他文件里调用;第第4章章 51单片机的软件基础单片机的软件基础static全局变量与普通的全局变量有什么区别?全局变量与普通的全局变量有什么区别?答答:1) 全局变量全局变量(外部变量外部变量)的说明之前再冠以的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是就构成了静态的全局变量。全局变量本身就是静态存储方式,静态存储方式, 静态全局变量当然也是静态存储方式。静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,者的

49、区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,而静态全局变量则限制了其作用域, 即只在即只在定义该变量的源文件内有效,定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件因此可以避免在其它源文件中

50、引起错误。中引起错误。 2) 从以上分析可以看出,从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。 3) static函数与普通函数作用域不同函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内仅在本文件。只在当前源文件中使用的函数应该说明为内部函数部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(C51程序设计语言课件.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|