《(15.11)--第4章0 C语言单片机原理与应用.ppt》由会员分享,可在线阅读,更多相关《(15.11)--第4章0 C语言单片机原理与应用.ppt(126页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、返回目录*1单片机原理与接口技术单片机原理与接口技术第第4章章 MCS-51C程序设计程序设计 返回目录本章教学要求(1)(1)熟悉熟悉C51C51语法基础和程序结构。语法基础和程序结构。(2)(2)掌握掌握C51C51结构化程序设计。结构化程序设计。(3)(3)掌握掌握C51C51对单片机硬件的访问方法。对单片机硬件的访问方法。(4)(4)掌握掌握C51C51函数定义与调用。函数定义与调用。(5)(5)了解汇编语言和了解汇编语言和C51C51的混合编程。的混合编程。*2返回目录4.1 C51概述概述4.2 C51语法基础语法基础4.2.1 标识符和关键字标识符和关键字4.2.2 数据类型数据
2、类型4.2.3 运算符和表达式运算符和表达式4.2.4 程序结构程序结构*3本本 章章 目目 录录4 4.3 C51.3 C51对对对对MCS-51MCS-51单片机的访问单片机的访问单片机的访问单片机的访问4 4.3.1 .3.1 存储类型存储类型存储类型存储类型4 4.3.2 .3.2 存储模式存储模式存储模式存储模式4 4.3.3 .3.3 对特殊功能寄存器的访问对特殊功能寄存器的访问对特殊功能寄存器的访问对特殊功能寄存器的访问4 4.3.4 .3.4 对存储器和并行口的访问对存储器和并行口的访问对存储器和并行口的访问对存储器和并行口的访问4 4.3.5.3.5 位地址访问位地址访问位地
3、址访问位地址访问4.3.6 4.3.6 中断函数中断函数中断函数中断函数 返回目录*44 4.4 C51.4 C51结构化程序设计结构化程序设计结构化程序设计结构化程序设计4 4.4.1 .4.1 顺序结构程序顺序结构程序顺序结构程序顺序结构程序4 4.4.2 .4.2 选择结构程序选择结构程序选择结构程序选择结构程序4 4.4.3 .4.3 循环结构程序循环结构程序循环结构程序循环结构程序4 4.5 C51.5 C51程序设计实例程序设计实例程序设计实例程序设计实例4 4.5.1 .5.1 查表程序查表程序查表程序查表程序4 4.5.5.2 .2 单片机内单片机内单片机内单片机内/外部资源应
4、用外部资源应用外部资源应用外部资源应用程序设计程序设计程序设计程序设计4 4.5.5.3 C51.3 C51语言和语言和语言和语言和MCS-51MCS-51汇编汇编汇编汇编语言混合编程语言混合编程语言混合编程语言混合编程4 4.5.5.4 .4 编程优化的概念编程优化的概念编程优化的概念编程优化的概念习题与思考题习题与思考题习题与思考题习题与思考题本本 章章 目目 录录返回目录4.1 C51概述C语语言言是是一一种种通通用用的的程程序序设设计计语语言言,其其代代码码率率高高,数数据据类类型型及及运运算算符符丰丰富富,位位操操作作能能力力强强,适适用用于于各各种种应应用用的的程程序序设设计计。使
5、使用用C语语言言进进行行单单片片机机应应用用系系统统开开发发,具具有有编编程程灵灵活活、调调试试方方便便、目目标标代代码码编编译译效效率率高高的的特特点点。C语言也是目前语言也是目前使用最广的单片机应用系统编程语言使用最广的单片机应用系统编程语言。由由C语语言言编编程程的的单单片片机机应应用用程程序序,称称为为单单片片机机C语语言言程程序序。MCS-51系系列列单单片片机机开开发发系系统统的的编编译译软软件件可可以以对对51单单片片机机C语语言言源源程程序序进进行行编编译译,称称为为C51编编译译器器。在在C51编译软件中可进行编译软件中可进行51单片机单片机C语言程序的调试。语言程序的调试。
6、*5返回目录4.1 C51概述1)扩展了专门访问扩展了专门访问MCS-51单片机硬件的数据类型;单片机硬件的数据类型;2)存储类型按存储类型按MCS-51单片机存储空间分类;单片机存储空间分类;3)存储模式遵循存储空间选定编译器模式;存储模式遵循存储空间选定编译器模式;4)指针分为通用指针和存储器指针;指针分为通用指针和存储器指针;5)函数增加了中断函数和再入函数。函数增加了中断函数和再入函数。*6C51C51编译器针对编译器针对编译器针对编译器针对MCS-51MCS-51单片机硬件在下列几方面单片机硬件在下列几方面单片机硬件在下列几方面单片机硬件在下列几方面对对对对ANSI CANSI C进
7、行了扩展。进行了扩展。进行了扩展。进行了扩展。返回目录使使用用具具有有C51编编译译扩扩展展功功能能的的C语语言言进进行行MCS-51单单片片机机应应用用系统的开发编程,系统的开发编程,简称简称C51编程编程。C51编程具有编程具有以下特点以下特点。1)可可管管理理内内部部寄寄存存器器和和存存储储器器的的分分配配,编编程程时时,无无需需考考虑虑不不同存储器的寻址和数据类型等细节问题;同存储器的寻址和数据类型等细节问题;2)程程序序由由若若干干函函数数组组成成,具具有有良良好好的的模模块块化化结结构构、可可移移植植性性好、便于项目维护管理;好、便于项目维护管理;3)有有丰丰富富的的子子程程序序库
8、库可可直直接接引引用用,从从而而大大大大减减少少用用户户编编程程工工作量,提高编程效率;作量,提高编程效率;4)与汇编语言交叉编程。用汇编语言编写与硬件有关的程序,与汇编语言交叉编程。用汇编语言编写与硬件有关的程序,用用C51编写与硬件无关的运算程序,充分发挥两种语言的长处,编写与硬件无关的运算程序,充分发挥两种语言的长处,提高开发效率。提高开发效率。*74.1 C51概述概述返回目录4.1 C51概述C51编编程程和和汇汇编编语语言言编编程程过过程程一一样样。单单片片机机C语语言言源源程程序序经经过过编编辑辑、编编译译、连连接接后后生生成成目目标标程程序序(.BIN和和.HEX)文文件件,然
9、然后后运运行行即即可可。调调试试51单单片片机机C语语言言程程序序可可用用Keil C51编译器。编译器。注注意意,使使用用C51编编程程可可以以取取代代繁繁琐琐的的汇汇编编语语言言编编程程,但但仍仍需需要要了了解解MCS-51单单片片机机的的硬硬件件结结构构。所所以以对对于于单单片片机机系系统统的的开开发发应应采采用用汇汇编编语语言言与与C51混混合合编编程程的的方方法法更更为为有有效。效。*8返回目录4.2 C51 语法基础标标识识符符用用来来标标识识源源程程序序中中某某个个对对象象的的名名字字,这这些些对对象可以是语句、数据类型、函数、变量、数组等。象可以是语句、数据类型、函数、变量、数
10、组等。标标识识符符由由字字符符串串、数数字字和和下下划划线线等等组组成成,应应该该注注意意的的是是第第一一个个字字符符必必须须是是字字母母或或下下划划线线,不不能能用用数数字字开开头头,如如“1_a”是是错错误误的的,编编译译时时会会有有错错误误提提示示。在在C51编编译译器中,只支持标识符的前器中,只支持标识符的前32位为有效标识。位为有效标识。C51语语言言是是区区分分大大小小写写的的一一种种高高级级语语言言,如如“a_1”和和“A_1”是两个完全不同的标识符。是两个完全不同的标识符。*94.2.1 4.2.1 标识符和关键字标识符和关键字标识符和关键字标识符和关键字-标识符标识符返回目录
11、C51中中有有些些库库函函数数的的标标识识符符是是以以下下划划线线开开头头的的,所所以以一一般般不不要要以以下下划划线线开开头头命命名名用用户户自自定定义义标标识识符符。标标识识符符在在命命名名时时应应当当简单,含义清晰,这样有助于阅读理解程序。简单,含义清晰,这样有助于阅读理解程序。关关键键字字则则是是编编程程语语言言保保留留的的特特殊殊标标识识符符,它它们们具具有有固固定定的的名名称称和和含含义义,在在程程序序编编写写中中不不允允许许将将关关键键字字另另做做他他用用。C51中中的的关关键键字字除除了了有有ANSI C标标准准的的32个个关关键键字字外外,还还根根据据MCS-51单单片片机的
12、特点扩展了相关的关键字机的特点扩展了相关的关键字。C51关键字如表关键字如表5-1所示。所示。在在C51的的文文本本编编辑辑器器中中编编写写C程程序序,系系统统可可以以把把保保留留关关键键字字以不同颜色显示,如以不同颜色显示,如int关键字的默认颜色为天蓝色。关键字的默认颜色为天蓝色。*104.2.1 标识符和关键字标识符和关键字-关键字关键字返回目录*114.2.1 标识符和关键字标识符和关键字-关键字列表关键字列表返回目录*124.2.1 标识符和关键字标识符和关键字-关键字列表关键字列表返回目录*134.2.1 标识符和关键字标识符和关键字-关键字列表关键字列表返回目录4.2.2 数据类
13、型C51具有具有ANSI C的所有标准数据类型。的所有标准数据类型。其基本数据类型包括:其基本数据类型包括:char、int、short、long、float和和double。对对C51编译器来说,编译器来说,short类型和类型和int类型相类型相同,同,double类型和类型和float类型相同。类型相同。*14-C51的数据类型的数据类型返回目录4.2.2 数据类型*15除除除除此此此此之之之之外外外外,为为为为了了了了更更更更加加加加有有有有利利利利地地地地利利利利用用用用MCS-51MCS-51的的的的结结结结构构构构,C51C51还还还还增增增增加加加加了了了了一一一一些些些些特特
14、特特殊殊殊殊的的的的数数数数据据据据类类类类型型型型,包包包包括括括括bitbit、sbitsbit、sfrsfr、sfr16sfr16。数据类型如表数据类型如表数据类型如表数据类型如表4-24-2所示。所示。所示。所示。-C51的数据类型的数据类型返回目录4.2.2 数据类型char类类型型的的长长度度是是1B,通通常常用用于于定定义义处处理理字字符符数数据据的的变变量或常量量或常量。unsigned char类类型型用用字字节节中中所所有有的的位位表表示示数数值值,可可以以表表达的数值范围是达的数值范围是0255。signed char类类型型用用字字节节中中最最高高位位表表示示数数据据的
15、的符符号号,0表表示示正正数数,1表表示示负负数数,负负数数用用补补码码表表示示,能能表表示示的的数数值值范范围围是是-128+127。unsigned char常常用用于于处处理理ASCII字字符符或或用用于处理小于或等于于处理小于或等于255的整型数。的整型数。*161 1charchar字符类型字符类型字符类型字符类型-char字符类型字符类型返回目录2int整型int整型长度为整型长度为2B,用于存放一个,用于存放一个双字节数据双字节数据。signed int表表示示的的数数值值范范围围是是-32768+32767,字字节节中中最高位表示数据的符号,最高位表示数据的符号,0表示正数,表
16、示正数,1表示负数。表示负数。unsigned int表示的数值范围是表示的数值范围是065535。*174.2.2 数据类型数据类型-int整型整型返回目录4.2.2 数据类型long长整型长度为长整型长度为4B,用于存放一个,用于存放一个四字节数据四字节数据。分分有有符符号号long长长整整型型signed long和和无无符符号号long长长整整型型unsigned long,默认值为,默认值为signed long类型。类型。signed int表表 示示 的的 数数 值值 范范 围围 是是-2147483648+2147483647,字字节节中中最最高高位位表表示示数数据据的的符符号
17、号,0表表示示正数,正数,1表示负数。表示负数。unsigned long表示的数值范围是表示的数值范围是04294967295。*183 3longlong长整型长整型长整型长整型-long长整型长整型返回目录4float浮点型float浮点型在十进制中具有浮点型在十进制中具有7位有效数字,是符合位有效数字,是符合IEEE-754标准(标准(32)的)的单精度浮点型数据,占用单精度浮点型数据,占用4B。具有具有24位精度。位精度。*194.2.2 数据类型数据类型-float浮点型浮点型返回目录5*指针型指指针针型型本本身身就就是是一一个个变变量量,在在这这个个变变量量中中存存放放着着指指向
18、向另另一一个个数数据据的的地地址址。这这个个指指针针变变量量要要占占据据一一定定的的内内存存单单元元,对对不不同同的的处处理理器器长长度度也也不不尽尽相相同同,在在C51中中它它的的长长度度一一般般为为13个个字节。字节。*204.2.2 数据类型数据类型-*指针型指针型返回目录4.2.2 数据类型bit位位标标量量是是C51编编译译器器的的一一种种扩扩充充数数据据类类型型,利利用用它它可可定定义义一一个个位位标标量量。它它的的值值是是一一个个二二进进制制位位,不不是是0,就就是是1,类类似似一一些些高高级语言中的级语言中的boolean型数据的型数据的True和和False。*216 6bi
19、tbit位标量位标量位标量位标量-bit位标量位标量返回目录7sfr特殊功能寄存器sfr是是一一种种C51扩扩充充数数据据类类型型,占占用用一一个个内内存存单单元元,值域为值域为0255。利利用用它它可可以以访访问问MCS-51单单片片机机内内部部的的所所有有特特殊殊功功能能寄存器。寄存器。如如用用sfr P1=0 x90定定义义一一个个特特殊殊功功能能寄寄存存器器变变量量“P1”,0 x90是是指指51单单片片机机的的P1端端口口地地址址90H,变变量量P1即指即指51单片机的单片机的P1端口端口。在在后后面面的的语语句句中中可可以以用用P1=255(对对P1端端口口的的所所有有引脚置高电平
20、)之类的语句操作特殊功能寄存器。引脚置高电平)之类的语句操作特殊功能寄存器。*224.2.2 数据类型数据类型-sfr特殊功能寄存器特殊功能寄存器返回目录8.sfr16 16位特殊功能寄存器sfr16也也是是一一种种C51扩扩充充数数据据类类型型,用用于于定定义义存存在在于于MCS-51单单片片机机内内部部RAM的的16位位特特殊殊功功能能寄寄存存器器,如定时器如定时器T0和和T1。sfr16型数据占用型数据占用2个内存单元,取值范围为个内存单元,取值范围为065535。*234.2.2 数据类型数据类型-16位特殊功能寄存器位特殊功能寄存器返回目录4.2.2 数据类型sbit也也是是一一种种
21、C51扩扩充充数数据据类类型型,利利用用它它可可以以访访问问芯芯片片内内部部RAM中中的的可可寻寻址址位位或或特特殊殊功功能能寄寄存存器器中中的的可可寻寻址址位位。定定义义方方法法有有如下三种:如下三种:(1)sbit 位变量名位变量名=位地址位地址将将位位的的绝绝对对地地址址赋赋给给位位变变量量,位位地地址址必必须须位位于于80HFFH(特特殊功能寄存器的位地址)之间。殊功能寄存器的位地址)之间。(2)sbit 位变量名位变量名=特殊功能寄存器名特殊功能寄存器名位位置位位置当当可可寻寻址址位位位位于于特特殊殊功功能能寄寄存存器器中中时时,可可采采用用这这种种方方法法。位位位位置是一个置是一个
22、07之间的常数。之间的常数。(3)sbit 位变量名位变量名=字节地址字节地址位位置位位置这这种种方方法法是是以以一一个个常常数数(字字节节地地址址)作作为为基基地地址址,该该常常数数必必须须在在80HFFH(特特殊殊功功能能寄寄存存器器的的字字节节地地址址)之之间间。位位位位置置是是一一个个07之间的常数之间的常数。*249 9sbitsbit可寻址位可寻址位可寻址位可寻址位-sbit可寻址位可寻址位返回目录4.2.2 数据类型MCS-51单单片片机机中中的的特特殊殊功功能能寄寄存存器器及及其其可可寻寻址址位位,已已被被预预先先定定义义放放在在文文件件reg51.h中中,在在程程序序的的开开
23、头头只需加上只需加上#include或或#include即可。即可。另另外外,bit还还可可访访问问MCS-51单单片片机机片片内内20H2FH范范围围内内的的位位对对象象。C51编编译译器器提提供供了了一一个个bdata存存储储器器类类型型,允允许许将将具具有有bdata类类型型的的对对象象放放入入MCS-51单片机片内可位寻址区。单片机片内可位寻址区。*25-reg51.h返回目录sbit和和bit的区别:的区别:sbit定定义义特特殊殊功功能能寄寄存存器器中中的的可可寻寻址址位位;而而bit则则定定义义了了一一个个普普通通的的位位变变量量,一一个个函函数数中中可可包包含含bit类型的参数
24、,函数返回值也可为类型的参数,函数返回值也可为bit类型。类型。*264.2.2 数据类型数据类型-sbit和和bit返回目录4.2.3 运算符和表达式C51算术运算符有五种:算术运算符有五种:+加法运算符或正号加法运算符或正号-减法运算符或负号减法运算符或负号*乘法运算符乘法运算符/除法运算符除法运算符%模(求余)运算符模(求余)运算符优先级:先乘除,后加减,先括号内,再括号外优先级:先乘除,后加减,先括号内,再括号外。结合性:自左至右方向。结合性:自左至右方向。模运算即求余数,如,模运算即求余数,如,7%3,结果是,结果是7除以除以3所得余数所得余数1*27 1 1C51C51的算术运算符
25、的算术运算符的算术运算符的算术运算符-算术运算符算术运算符返回目录4.2.3 运算符和表达式C51关系运算符有六种:关系运算符有六种:大于大于=大于等于大于等于=相等相等!=不相等不相等优先级:前四个高,后两个优先级:前四个高,后两个“=”和和“!=”级别低。级别低。结合性:自左至右方向。结合性:自左至右方向。关系表达式的结果是逻辑值关系表达式的结果是逻辑值“真真”或或“假假”,C51中以中以“1”代表真,代表真,“0”代表假。代表假。*282 2C51C51关系运算符关系运算符关系运算符关系运算符-关系运算符关系运算符返回目录4.2.3 运算符和表达式C51逻辑运算符有三种:逻辑运算符有三种
26、:&逻辑与逻辑与|逻辑或逻辑或 !逻辑非逻辑非优先级:逻辑非优先级:逻辑非“!”最高最高。结结合合性性:“&”和和“|”自自左左至至右右方方向向。“!”自自右至左方向。右至左方向。运运算算符符的的两两边边为为关关系系表表达达式式。逻逻辑辑表表达达式式和和关关系系表表达式的值相同,以达式的值相同,以“0”代表假,以代表假,以“1”代表真。代表真。*293 3C51C51逻辑运算符逻辑运算符逻辑运算符逻辑运算符-逻辑运算符逻辑运算符返回目录4.2.3 运算符和表达式C51按位操作运算符有六种:按位操作运算符有六种:&按位与按位与位取反位取反|按位或按位或位右移位右移注:移位操作为补零移位。位运算符
27、只能对整形和字注:移位操作为补零移位。位运算符只能对整形和字符型运算,不能对实型数据运算。符型运算,不能对实型数据运算。如:如:char a=0 x0f;表达式;表达式a=a值为值为0 xf0。如:如:char a=0 x22;表达式;表达式a2值为值为0 x88,即,即a值左值左移两位,移位后空白位补移两位,移位后空白位补0。*30-位操作运算符位操作运算符4 4C51C51位操作运算符位操作运算符位操作运算符位操作运算符返回目录4.2.3 运算符和表达式+自增自增1-自减自减1自增、自减运算符可以在变量的前面或后面使用自增、自减运算符可以在变量的前面或后面使用如,如,+i或或-I,意为在使
28、用意为在使用i之前,先使之前,先使i值加值加1或减或减1如,如,i+或或i-,意为在使用变量意为在使用变量i之后,再使之后,再使i值加值加1或减或减1例如,定义整型变量:例如,定义整型变量:int i=6 若有若有j=+i,则,则j值为值为7,i值也为值也为7 若有若有j=i+,则,则j值为值为6,i值为值为7*315 5自增、自减运算符自增、自减运算符自增、自减运算符自增、自减运算符-+-运算符运算符返回目录6赋值运算符赋值赋值 将将“”右边的值赋给右边的值赋给“”左边的变量左边的变量(注:不是相等运算符)(注:不是相等运算符)*324.2.3 运算符和表达式运算符和表达式-赋值运算符赋值运
29、算符返回目录4.2.3 运算符和表达式C51提供了十种复合赋值运算符:提供了十种复合赋值运算符:+=-=*=/=%=&=|=采用符合赋值运算的目的是为了简化程序,提高采用符合赋值运算的目的是为了简化程序,提高C51程序的编译效率。程序的编译效率。例:例:a+=b相当于相当于a=a+b。a=b相当于相当于a=ab。*337 7复合赋值运算符复合赋值运算符复合赋值运算符复合赋值运算符-复合赋值运算符复合赋值运算符返回目录8对指针操作的运算符&取地址运算符取地址运算符*指针运算符指针运算符注意注意&与与*的用法意义如下:的用法意义如下:“&”与与按按位位与与运运算算符符的的差差别别。如如果果“&”为
30、为“与与”运运算算,&运运算算符符的的两两边边必必须须为为变变量量或或常常量量,如如a=c&b。“&”是是取取地址运算时,如地址运算时,如a=&b。“*”与与指指针针定定义义时时指指针针前前的的“*”的的差差别别。如如char*pt,这这里里的的“*”只只表表示示pt为为指指针针变变量量,不不代代表表间间址址取取内内容容的的运运算算。而而c=*b,是将以是将以b的内容为地址的单元内容送的内容为地址的单元内容送c变量。变量。C51运算的优先级:运算的优先级:!(非)!(非)算术运算算术运算关系运算关系运算&和和|赋值运算赋值运算*344.2.3 运算符和运算符和表达式表达式-指针操作的运算符指针
31、操作的运算符返回目录4.2.4 程序结构与与ANSI C一一样样,C51的的程程序序是是一一个个函函数数定定义义的的集集合合,可可以以由由任任意意个个函函数数构构成成,其其中中必必须须有有一一个主函数个主函数main()。程程序序的的执执行行是是从从主主函函数数main()开开始始的的,调调用用其其他他函函数数后后返返回回主主函函数数main(),最最后后在在主主函函数数中中结束整个程序,而不管函数的排列顺序如何。结束整个程序,而不管函数的排列顺序如何。*35-函数定义的集合函数定义的集合返回目录全局变量说明全局变量说明/*可被各函数引用可被各函数引用*/类型说明类型说明main()/*主函数
32、主函数*/声明部分声明部分语句部分语句部分类型说明类型说明函数名函数名1(形式参数表形式参数表)/*函数函数1*/声明部分声明部分语句部分语句部分类型说明类型说明函数名函数名n(形式参数表形式参数表)/*函数函数n*/声明部分声明部分语句部分语句部分*364.2.4 程序程序结构结构#-程序的组成程序的组成返回目录4.3 C51对MCS-51单片机的访问MCS-51单片机的存储器分为单片机的存储器分为片内数据存储器、特殊功能寄片内数据存储器、特殊功能寄存器、片外数据存储器、片内程序存储器和片外程序存储器存器、片外数据存储器、片内程序存储器和片外程序存储器。在在C51中访问这些存储器时,是通过定
33、义不同存储类型的中访问这些存储器时,是通过定义不同存储类型的变量,以说明该变量所访问的存储器位置。变量,以说明该变量所访问的存储器位置。*374.3.1 4.3.1 存储类型存储类型存储类型存储类型-C51访问存储器访问存储器返回目录4.3.1 存储类型1data存储类型存储类型data存存储储类类型型变变量量可可直直接接寻寻址址片片内内数数据据存存储储区区RAM(128字节),访问速度快。字节),访问速度快。2bdata存储类型存储类型bdata存存储储类类型型变变量量可可位位寻寻址址片片内内数数据据存存储储区区RAM(16个字节),允许位与字节混合访问。个字节),允许位与字节混合访问。3i
34、data存储类型存储类型idata存存储储类类型型变变量量可可间间接接寻寻址址内内部部数数据据存存储储区区,可访问全部内部地址空间(可访问全部内部地址空间(00FFH,256字节)。字节)。*38-定义存储类型定义存储类型返回目录4.3.1 存储类型4pdata存储类型存储类型pdatapdata存储类型变量可以存储类型变量可以分页(分页(256 B256 B)寻址)寻址由由指令指令MOVX RiMOVX Ri访问的片外访问的片外RAMRAM空间空间。5xdata存储类型存储类型xdataxdata存储类型变量可以寻址由指令存储类型变量可以寻址由指令MOVX MOVX DPTRDPTR访问的访
35、问的64 KB64 KB片外片外RAMRAM空间空间。6code存储类型存储类型codecode存储类型变量可以寻址由指令存储类型变量可以寻址由指令MOVC MOVC A+DPTRA+DPTR访问的访问的64 KB64 KB片内外片内外ROMROM空间空间。*39-定义存储类型定义存储类型返回目录4.3.2 存储模式存存储储模模式式决决定定了了变变量量的的默默认认存存储储类类型型和和参参数数传传递递区,变量定义不明确存储类型时使用默认值。区,变量定义不明确存储类型时使用默认值。C51有三种存储模式:有三种存储模式:SMALL、LARGE 和和 COMPACT。40*-变量的存储类型变量的存储类
36、型返回目录*414.3.2 存储模式存储模式存存存存 储储储储 模模模模 式式式式说说说说 明明明明小编译模式小编译模式小编译模式小编译模式SMALLSMALL参参参参数数数数及及及及局局局局部部部部变变变变量量量量放放放放入入入入可可可可直直直直接接接接寻寻寻寻址址址址的的的的片片片片内内内内数数数数据据据据存存存存储储储储区区区区(最最最最大大大大128 128 B B,默默默默认认认认存存存存储储储储类类类类型型型型是是是是datadata),因因因因此此此此访访访访问问问问十十十十分分分分方方方方便便便便。另另另另外外外外所所所所有有有有对对对对象象象象,包包包包括括括括栈栈栈栈,都都
37、都都必必必必须须须须嵌嵌嵌嵌入入入入片片片片内内内内RAMRAM。栈栈栈栈长长长长很很很很关关关关键键键键,因因因因为为为为实实实实际际际际栈栈栈栈长长长长依依依依赖赖赖赖于于于于不不不不同同同同函函函函数数数数的的的的嵌嵌嵌嵌套套套套层数。层数。层数。层数。紧凑编译模式紧凑编译模式紧凑编译模式紧凑编译模式COMPACTCOMPACT参参参参数数数数及及及及局局局局部部部部变变变变量量量量放放放放入入入入分分分分页页页页片片片片外外外外数数数数据据据据存存存存储储储储区区区区(最最最最大大大大256 256 B B,默默默默认认认认的的的的存存存存储储储储类类类类型型型型是是是是pdatapd
38、ata),通通通通过过过过寄寄寄寄存存存存器器器器R0R0和和和和R1R1间间间间接寻址,栈空间位于内部数据存储区中。接寻址,栈空间位于内部数据存储区中。接寻址,栈空间位于内部数据存储区中。接寻址,栈空间位于内部数据存储区中。大编译模式大编译模式大编译模式大编译模式LARGELARGE参参参参数数数数及及及及局局局局部部部部变变变变量量量量直直直直接接接接放放放放入入入入片片片片外外外外数数数数据据据据存存存存储储储储区区区区(最最最最大大大大64 64 KBKB,默默默默认认认认存存存存储储储储类类类类型型型型为为为为xdataxdata),使使使使用用用用数数数数据据据据指指指指针针针针D
39、PTRDPTR来来来来进进进进行行行行寻寻寻寻址址址址。用用用用此此此此数数数数据据据据指指指指针针针针访访访访问问问问的的的的效效效效率率率率较较较较低低低低,尤尤尤尤其其其其是是是是对对对对两两两两个个个个或或或或多多多多个个个个字字字字节节节节的的的的变变变变量量量量,这这这这种种种种数数数数据据据据存存存存储储储储类类类类型型型型的的的的访访访访问问问问机机机机制制制制直直直直接接接接影影影影响响响响代代代代码码码码的的的的长长长长度度度度,不不不不方方方方便便便便之之之之处处处处在在在在于于于于这这这这种种种种数数数数据据据据指指指指针不能对称操作。针不能对称操作。针不能对称操作。针
40、不能对称操作。-变量的存储类型变量的存储类型返回目录4.3.2 存储模式 数据存储模式的设定有两种方式:数据存储模式的设定有两种方式:(1)使用预处理命令设定数据存储模式)使用预处理命令设定数据存储模式需在程序的第一句加预处理命令。如:需在程序的第一句加预处理命令。如:#pragma small#pragma small/*/*设定数据存储模式为小编译模式设定数据存储模式为小编译模式*/#pragma compact /*#pragma compact /*设定数据存储模式为紧凑编译模式设定数据存储模式为紧凑编译模式*/#pragma large/*#pragma large/*设定数据存储模
41、式为大编译模式设定数据存储模式为大编译模式*/(2)使用编译控制命令设定数据存储模式)使用编译控制命令设定数据存储模式用用C51编编译译程程序序对对C51源源程程序序进进行行编编译译时时,使使用用编编译译控控制制命命令,格式如下:令,格式如下:C51 源程序名源程序名 SMALL C51 源程序名源程序名 COMPACT C51 源程序名源程序名 LARGE*42-存储模式的设定存储模式的设定返回目录*43例例例例如如如如:C51C51源源源源程程程程序序序序为为为为file1.Cfile1.C,若若若若使使使使程程程程序序序序中中中中的的的的变变变变量量量量存存存存储储储储类类类类型型型型和
42、和和和参参参参数数数数传传传传递递递递区区区区限限限限定定定定在在在在外外外外部部部部数数数数据据据据存存存存储储储储区区区区,即即即即设设设设定定定定数数数数据存储模式为据存储模式为据存储模式为据存储模式为COMPACTCOMPACT(紧凑编译模式)。(紧凑编译模式)。(紧凑编译模式)。(紧凑编译模式)。方法方法方法方法1 1:在程序的第一句加预处理命令:在程序的第一句加预处理命令:在程序的第一句加预处理命令:在程序的第一句加预处理命令:#pragma compact#pragma compact。方方方方法法法法2 2:用用用用C51C51对对对对file1.Cfile1.C进进进进行行行
43、行编编编编译译译译时时时时,使使使使用用用用编编编编译译译译控控控控制制制制命命命命令:令:令:令:C51 file1.C COMPACTC51 file1.C COMPACT。4.3.2 存储模式存储模式-存储模式的设定存储模式的设定返回目录4.3.2 存储模式*44【例例4-1】变量和函数的存储模式设置变量和函数的存储模式设置#pragma small#pragma small/*/*默认存储类型为默认存储类型为默认存储类型为默认存储类型为MCS-51MCS-51直接寻址片直接寻址片直接寻址片直接寻址片内内内内RAM*/RAM*/char char datadata i,j,k;i,j,k
44、;/*/*在在在在MCS-51MCS-51片内直接寻址片内直接寻址片内直接寻址片内直接寻址RAMRAM中定义中定义中定义中定义了了了了3 3个变量个变量个变量个变量,默认为自动变量默认为自动变量默认为自动变量默认为自动变量*/char i,j,k;char i,j,k;/*/*未指明存储类型未指明存储类型未指明存储类型未指明存储类型,由由由由#pragma small#pragma small决决决决定定定定,与前一句完全等价与前一句完全等价与前一句完全等价与前一句完全等价*/int int xdataxdata m,n;m,n;/*/*在在在在MCS-51MCS-51片外片外片外片外RAMR
45、AM中定义了两个自中定义了两个自中定义了两个自中定义了两个自动变量动变量动变量动变量*/static static char char m,n;m,n;/*/*在在在在MCS-51MCS-51片内直接寻址片内直接寻址片内直接寻址片内直接寻址RAMRAM中定义中定义中定义中定义了两个静态变量了两个静态变量了两个静态变量了两个静态变量*/-存储模式举例存储模式举例返回目录4.3.2 存储模式*45unsigned char unsigned char xdataxdata ram10;ram10;/*/*在在在在MCS-51MCS-51片外片外片外片外RAMRAM中定中定中定中定义了大小为义了大小
46、为义了大小为义了大小为10 B10 B的数组变量的数组变量的数组变量的数组变量*/int func1(int i,int j)largeint func1(int i,int j)large/*/*指定函数中变量是指定函数中变量是指定函数中变量是指定函数中变量是LARGELARGE模式模式模式模式*/return(i+j);return(i+j);intint func2(int i,int j)func2(int i,int j)/*/*未指明存储模式未指明存储模式未指明存储模式未指明存储模式,按默认的按默认的按默认的按默认的SMALLSMALL模式模式模式模式*/return(i-j);r
47、eturn(i-j);-存储模式举例存储模式举例返回目录4.3.3 特殊功能寄存器的访问MCS-51MCS-51系系列列单单片片机机片片内内有有2121个个特特殊殊功功能能寄寄存存器器(SFRSFR),分分散散在在片片内内RAMRAM区区的的0 x800 xFF0 x800 xFF地地址址范范围内。对围内。对SFRSFR的操作只能用直接寻址方式。的操作只能用直接寻址方式。为为了了能能直直接接访访问问这这些些特特殊殊功功能能寄寄存存器器,C51C51提提供供了了定定义义SFRSFR的的方方法法。这这与与ANSI ANSI C C不不兼兼容容,只只适适用用于于MCS-51MCS-51系列单片机系列
48、单片机。*46-定义定义SFR的方法的方法返回目录-sfr数据类型用用sfrsfr定义特殊功能寄存器名的语法如下:定义特殊功能寄存器名的语法如下:SfrSfr 特殊功能寄存器名特殊功能寄存器名=整型常量整型常量;例如:例如:sfrsfr PSW=0 xD0;PSW=0 xD0;/*/*定义程序状态字定义程序状态字PSW,PSW,因因MCS-51MCS-51单片机的单片机的PSW PSW 地址为地址为D0H*/D0H*/sfrsfr TMOD=0 x89;TMOD=0 x89;/*/*定义定时定义定时/计数器方式控制寄存计数器方式控制寄存 器器TMOD,TMOD,因因MCS-51MCS-51单片
49、机的单片机的TMODTMOD地址为地址为89H*/89H*/sfrsfr P1=0 x90;P1=0 x90;/*/*定义定义P1P1口口,因因MCS-51MCS-51单片机的单片机的P1P1口地址为口地址为 90H*/90H*/sfrsfr SCON=0 x98;SCON=0 x98;/*/*定义串口控制寄存器定义串口控制寄存器SCON,SCON,因因 MCS-51MCS-51单片机的单片机的SCONSCON地址为地址为8H*/8H*/*474.3.3 特殊功能寄存器的访问特殊功能寄存器的访问1用用sfr数据类型访问特殊功能寄存器数据类型访问特殊功能寄存器返回目录2用用sbit数据类型访问可
50、位寻址的特殊数据类型访问可位寻址的特殊功能寄存器中的位功能寄存器中的位MCS-51MCS-51系系列列单单片片机机片片内内2121个个特特殊殊功功能能寄寄存存器器(SFRSFR)中中有有1111个个特特殊殊功功能能寄寄存存器器是是可可位位寻寻址址的的。访访问问这这些些可可位位寻寻址址的的特特殊殊功功能能寄寄存存器器中中的的位位的的方方法法可可由由关关键键字字sbitsbit定定义义特特殊殊功功能能寄寄存存器器位位寻寻址址数数据据类类型型来来实实现现。定义特殊功能寄存器位名的语法有下列三种:定义特殊功能寄存器位名的语法有下列三种:*484.3.3 特殊功能寄存器的访问特殊功能寄存器的访问-sbi