(精品)单片机C语言简介.ppt

上传人:hwp****526 文档编号:84690156 上传时间:2023-04-07 格式:PPT 页数:101 大小:941.50KB
返回 下载 相关 举报
(精品)单片机C语言简介.ppt_第1页
第1页 / 共101页
(精品)单片机C语言简介.ppt_第2页
第2页 / 共101页
点击查看更多>>
资源描述

《(精品)单片机C语言简介.ppt》由会员分享,可在线阅读,更多相关《(精品)单片机C语言简介.ppt(101页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第7 7章章 51 51单片机单片机C C语言简介语言简介 7.17.1 C C语言的基本知识语言的基本知识 7.27.2 C51C51程序设计的基本语法程序设计的基本语法 7.37.3 C51C51程序设计程序设计 7.47.4 函数函数 7.57.5 模块化程序设计模块化程序设计 7.67.6 C51C51编程实例编程实例 7.1 7.1 C C语言的基本知识语言的基本知识 7.1.1 C语言的特点与程序结构语言的特点与程序结构 以以前前计计算算机机的的系系统统软软件件主主要要是是用用汇汇编编语语言言编编写写的的,对对于于单单片片机机应应用用系系统统来来说说更更是是如如此此。由由于于汇汇

2、编编语语言言程程序序的的可可读读性性和和可可移移植植性性都都较较差差,采采用用汇汇编编语语言言编编写写单单片片机机应应用用系系统统程程序序的的周周期期长长,而而且且调调试试和和排排错错也也比比较较困困难难。为为了了提提高高编编制制计计算算机机系系统统和和应应用用程程序序的的效效率率,改改善善程程序序的的可可读读性性和和可可移移植植性性,最最好好采采用用高高级级语语言言编编程程。C语语言言既既具具有有一一般般高高级级语语言言的的特特点点,又又能能直直接接对对计计算算机机的的硬硬件件进进行行操操作作,并并且且采采用用C语语言言编编写写的的程程序序能能够够很很容容易易地地在在不不同同类类型型的的计计

3、算算机机之之间间进进行行移移植植。与与其其它它计计算算机机高高级级语语言相比,言相比,C语言具有它自身的特点:语言具有它自身的特点:1语言简洁,使用方便灵活。语言简洁,使用方便灵活。2可移植性好。可移植性好。3表达能力强。表达能力强。4可进行结构化程序设计。可进行结构化程序设计。5可以直接操作计算机硬件。可以直接操作计算机硬件。6生成的目标代码质量高生成的目标代码质量高。尽管尽管C语言具有很多的优点,但和其它任何一种程序设计语言具有很多的优点,但和其它任何一种程序设计语言一样,也有其自身的缺点,如语言一样,也有其自身的缺点,如不能自动检查数组的边界不能自动检查数组的边界,各种运算符的优先级别太

4、多各种运算符的优先级别太多,某些运算符具有多种用途等。,某些运算符具有多种用途等。C语言程序是由若干个函数单元组成的,每个函数都是完语言程序是由若干个函数单元组成的,每个函数都是完成某个特殊任务的子程序段。组成一个程序的若干个函数可以成某个特殊任务的子程序段。组成一个程序的若干个函数可以保存在一个源程序文件中,也可以保存语言源程序文件的文件保存在一个源程序文件中,也可以保存语言源程序文件的文件名由程序设计人员根据某种俗成规则自己确定,其扩展名统一名由程序设计人员根据某种俗成规则自己确定,其扩展名统一为为“.C”。如如A1-1.C、A2-1.C。C语言程序的语言程序的开始部分通常是预处理命令开始

5、部分通常是预处理命令,如程序中通常,如程序中通常遇到的遇到的include命令。这个预处理命令通知编译器在对程序命令。这个预处理命令通知编译器在对程序进行编译时,将所需要的头文件读入后再一起进行编译。一般进行编译时,将所需要的头文件读入后再一起进行编译。一般在在“头文件头文件”中包含有程序在编译时的一些必要的信息,通常中包含有程序在编译时的一些必要的信息,通常C语言编译器都会提供若干个不同用途的头文件。语言编译器都会提供若干个不同用途的头文件。头文件的读头文件的读入是在对程序进行编译时才完成的入是在对程序进行编译时才完成的。名门棋牌官网名门棋牌官网 1PK11PK1棋牌公社官网棋牌公社官网 编

6、辑整理编辑整理 C语语言言程程序序是是由由函函数数所所组组成成的的。一一个个完完整整的的C语语言言程程序序应应包包含含一一个个主主函函数数main()和和若若干干个个其其它它功功能能的的函函数数。函函数数之之间间可可以以相相互互调调用用,但但main()函函数数只只能能调调用用其其它它的的功功能能函函数数,而而不不能能被被其其它它函函数数所所调调用用。功功能能函函数数可可以以是是C语语言言编编译译器器提提供供的的库库函函数数,也也可可以以由由用用户户按按实实际际需需要要自自行行编编写写的的函函数数。不不管管main()函函数数处处于于程程序序中中的的什什么么位位置置,程程序序总总是是从从mai

7、n()函函数数开开始执行始执行。一个函数必须预先定义或声明后才能调用。一个函数必须预先定义或声明后才能调用。函函数数定定义义或或声声明明位位于于源源程程序序的的预预处处理理命命令令之之后后的的开开始始位位置置。函函数数定定义义部部分分包包括括有有函函数数的的存存储储类类型型、返返回回值值数数据据类类型型、函函数数名名、形形式式参参数数说说明明等等,函函数数名名后后面面必必须须跟跟一一个个圆圆括括弧弧(),形形式式参参数数说说明明在在圆圆括括弧弧()内内进进行行。函函数数也也可可以以没没有有形形式式参参数数,如如main()。函函数数的的位位置置比比较较自自由由。可可以以由由程程序序设设计计人人

8、员员安安排排在在函函数数定定义义后后的的任任意意位位置置。函函数数由由函函数数名名和和一一对对花花括括弧弧“”组组成成,在在“”里里面面的的内内容容就就是是函函数数体体,如如果果一一个个函函数数有有多多个个“”,则最外面的一对,则最外面的一对“”为函数体的范围。为函数体的范围。函函数数体体的的内内容容为为若若干干条条语语句句,一一般般有有两两类类语语句句,一一类类为为说说明明语语句句,用用来来对对函函数数中中将将要要用用到到的的变变量量进进行行定定义义;另另一一类类为为执执行行语语句句,用用来来完完成成一一定定的的功功能能或或算算法法处处理理。有有的的函函数数体体仅仅有有一一对对“”,其其中中

9、既既没没有有变变量量定定义义语语句句,也也没没有有执执行行语语句句,这这也也是是合合法法的的,称称为为“空函数空函数”。C语言源程序可以采用任何一种编辑器来编写,语言源程序可以采用任何一种编辑器来编写,既可以是既可以是windows环境下的编辑器,如记事本环境下的编辑器,如记事本(NOTEPAD)或写字板(或写字板(WORDPAD),),也可以是也可以是DOS环环境下的编辑器,如境下的编辑器,如EDIT或或PE等。等。C语言程序的书写格语言程序的书写格式十分自由。式十分自由。一条语句可以写成一行,也可以写成几一条语句可以写成一行,也可以写成几行;还可以在一行内写多条语句;但是需要注意的是,行;

10、还可以在一行内写多条语句;但是需要注意的是,每条语句都必须以分号每条语句都必须以分号“;”作为结束符作为结束符。另另外外,C语语言言区区分分大大小小写写字字母母,C语语言言编编译译器器在在对对程程序序进进行行编编译译时时,对对于于程程序序中中同同一一个个字字母母的的大大小小写写作作为为不不同同的的变变量量来来处处理理。虽虽然然C语语言言程程序序不不要要求求具具有有固固定定的的格格式式,但但我我们们在在实实际际编编写写程程序序时时还还是是应应该该遵遵守守一一定定的的规规则则,一一般般应应按按程程序序的的功功能能以以“缩缩格格”形形式式来来写写程程序序,同同时时还还应应在在适适当当的的地地方方加加

11、上上必必要要的的注注释释。注注释释对对于于比比较较大大的的程程序序来来说说是是十十分分重重要要的的,这这有有利于修改与读懂程序。利于修改与读懂程序。C语语言言本本身身没没有有输输入入输输出出功功能能,C语语言言程程序序的的输输入入和和输输出出是是通通过过函函数数调调用用来来实实现现的的。Franklin C51编编译译器器提提供供的的输输入入输输出出库库函函数数 scanf和和 printf是是通通过过 8051单单片片机机的的串串行行口口实实现现的的,在在程程序序中中使使用用这这种种输输入入输输出出库库函函数数之之前前必必须须先先对对8051单单片片机机的的串串行行口口进进行行初初始始化化。

12、但但是是对对于于单单片片机机应应用用系系统统来来说说,由由于于具具体体要要求求的的不不同同,应应用用系系统统的的输输入入输输出出方方式式多多种种多多样样,不不可可能能一一律律采采用用串串行行口口作作输输入入和和输输出出。因因此此应应该该根根据据实实际际需需要要,由由应应用用系系统统的的研研制制人人员员自自己己来来编编写写满满足足特特定定需需要要的的输输入入输输出出函函数数,这这一一点点对对于于单单片片机机应应用用系系统统的的开开发发研研制制人人员员来来说说是是十十分重要的。分重要的。7.1.2 C语言的标识符和关键字语言的标识符和关键字 C语语言言的的标标识识符符是是用用来来标标识识源源程程序

13、序中中某某个个对对象象名名字字的的。这这些些对对象象可可以以是是函函数数、变变量量、常常量量、数数组组、数数据据类类型型、存存储储方方式式、语语句句等等。一一个个标标识识符符由由字字符符串串、数数字字和和下下划划线线等等组组成成,第第一一个个字字符符必必须须是是字字母母或或下下划划线线,通通常常以以下下划划线线开开头头的的标标识识符符是是编编译译系系统统专专用用的的,因因此此在在编编写写C语语言言源源程程序序时时一一般般不不要要使使用用以以下下划划线线开开头头的的标标识识符符,而而将将下下划划线线用用作作分分段段符符。C51编编译译器器规规定定标标识识符符最最长长可可达达255个个字字符符,但

14、但只只有有前前面面32个个字字符符在在编编译译时时有有效效,因因此此在在编编写写源源程程序序时时标标识识符符的的长长度度不不要要超超过过 32个个字字符符。程程序序中中对对于于标标识识符符的的命命名名应应当当简简洁洁明明了了,含含义义清清晰晰,便便于于阅阅读读理理解解,如如用用标标识识符符“max”表表示示最最大大值值,用用“TIMER0”表示定时器表示定时器0等。等。关关键键字字是是一一类类具具有有固固定定名名称称和和特特定定含含义义的的特特殊殊标标识识符符,又又称称为为保保留留字字。在在编编写写C语语言言源源程程序序时时一一般般不不允允许许将将关关键键字字另另作作别别用用,换换句句话话说说

15、就就是是对对于于标标识识符符的的命命名名不不要要与与关关键键字字相相同同。在在C语语言言中中,ANSI C标标准准一一共共规规定定了了32个个关关键键字字,表表 7.1按用途列出了按用途列出了 ANSI C标准的关键字。标准的关键字。表表 7.1 ANSI C标准的关键字标准的关键字关键字关键字用用 途途说说 明明 autobreakcasecharconstcontinue defaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunio

16、nunsignedvoidvolatilewhile存储类说明存储类说明程序语句程序语句程序语句程序语句数据类型说明数据类型说明存储类型说明存储类型说明程序语句程序语句程序语句程序语句程序语句程序语句数据类型说明数据类型说明程序语句程序语句数据类型说明数据类型说明存储种类说明存储种类说明数据类型说明数据类型说明程序语句程序语句程序语句程序语句程序语句程序语句数据类型说明数据类型说明数据类型说明数据类型说明存储种类说明存储种类说明程序语句程序语句数据类型说明数据类型说明数据类型说明数据类型说明运算符运算符存储种类说明存储种类说明数据类型说明数据类型说明程序语句程序语句数据类型说明数据类型说明数据

17、类型说明数据类型说明数据类型说明数据类型说明数据类型说明数据类型说明数据类型说明数据类型说明程序语句程序语句用以说明局部变量用以说明局部变量退出最内层循环退出最内层循环switch语句中的选择项语句中的选择项单字节整型数或字符型数据单字节整型数或字符型数据在程序执行过程中不可能修改的变量值在程序执行过程中不可能修改的变量值转向下一个循环转向下一个循环switch语句中的失败选择项语句中的失败选择项构成构成dowhile循环结构循环结构双精度浮点数双精度浮点数构成构成 ifelse选择结构选择结构枚举枚举在其它程序模块中说明了的全局变量在其它程序模块中说明了的全局变量单精度浮点数单精度浮点数构成

18、构成for循环结构循环结构构成构成goto转移结构转移结构构成构成ifelse选择结构选择结构基本整型数基本整型数长整型数长整型数使用使用CPU内部寄存器的变量内部寄存器的变量函数返回函数返回短整型数短整型数有符号数,二进制数据的最高位为符号位有符号数,二进制数据的最高位为符号位计算表达式或数据类型的字节数计算表达式或数据类型的字节数静态变量静态变量结构类型数据结构类型数据构成构成switch选择结构选择结构重新进行数据类型定义重新进行数据类型定义联合数据类型联合数据类型无符号数据无符号数据无符号数据无符号数据说明该变量在程序执行中可被隐含地改变说明该变量在程序执行中可被隐含地改变构成构成wh

19、ile和和dowhile循环结构循环结构 关键字关键字用用 途途说说 明明bitsbitsfrsfr16databdataidatapdataxdatacodeinterruptUsingreetrant位标量声明位标量声明位标量声明位标量声明特殊功能寄存器声明特殊功能寄存器声明特殊功能寄存器声明特殊功能寄存器声明存储器类型声明存储器类型声明存储器类型声明存储器类型声明存储器类型说明存储器类型说明存储器类型说明存储器类型说明存储器类型说明存储器类型说明存储器类型说明存储器类型说明中断函数说明中断函数说明寄存器组定义寄存器组定义再入函数声明再入函数声明声明一个位标量或位类型的函数声明一个位标量或

20、位类型的函数声明一个可位寻址变量声明一个可位寻址变量声明一个特殊功能寄存器(声明一个特殊功能寄存器(8位)位)声明一个声明一个16位的特殊功能寄存器位的特殊功能寄存器直接寻址直接寻址的的8051内部数据存储器内部数据存储器可位寻址可位寻址的的8051内部数据存储器内部数据存储器间接寻址间接寻址的的8051内部数据存储器内部数据存储器“分分页页”寻寻址址的的8051外外部部数数据据存存储储器器8051外部外部数据存储器数据存储器8051程序存储器程序存储器定义一个中断函数定义一个中断函数定义定义8051工作寄存器组工作寄存器组定义一个再入函数定义一个再入函数C51C51编编译译器器除除了了支支持

21、持ANSI ANSI C C标标准准关关键键字字以以外外,还还扩扩展展了了如如表表7.27.2所示的关键字:所示的关键字:表表7.27.2C51C51编译器的扩展关键字编译器的扩展关键字7.1.3 7.1.3 单片机单片机C51C51程序的编译连接与调试程序的编译连接与调试 Franklin C51交交叉叉编编译译器器是是专专为为8051系系列列单单片片机机设设计计的的C语语言言编编译译器器,它它能能在在IBM PC及及其其兼兼容容机机上上运运行行,使使用用非非常常方方便便。为为了了保保证证编编译译器器能能正正常常工工作作,PC机机应应具具有有512K以以上上的的内内存存、一一个个软软盘盘驱驱

22、动动器器、一一个个硬硬盘盘,采采用用MSDOS 3.0以以上上版版本本的的操操作作系系统统。Franklin C51以以软软件件包包的的形形式式提提供供,软软件件包包中中主主要要有有C51交交叉叉编编译译器器、A51交交叉叉汇汇编编器器、L51连连接接定定位位器器、OHS51代代码码转转换换器器和和 dScope一一51软软件件仿仿真真调调试试器器以以及及其其它它一一些些实实用用软软件件程程序序。如如果果在在PC机机的的硬硬盘盘C:上上安安装装C51编编译译器器,在在安安装装之之前前应应对对PC机机的的配配置置文文件件CONFIG.SYS和自动批处理文件和自动批处理文件AUTOEXEC.BAT

23、作如下修改:作如下修改:CONFIG.SYS:FIELS 20 BUFFER 20 AUTOEXEC.BAT:SET C51LIB=C:C51LIB SET C51INC C:CSIINC SET PATH=C:C51BIN 这这样样修修改改之之后后,C51编编译译器器会会当当头头文文件件不不在在当当前前目目录录时时,能能从从C:C51INC子子目目录录中中找找到到头头文文件件;L51连连接接器器会会自自动动为为所所有有的的编编译译模模式式及及算算术术(尤尤其其是是浮浮点点运运算算)功功能能从从C:C51LIB于目录中找到所需要的库文件。于目录中找到所需要的库文件。C51编编译译器器可可根根据

24、据不不同同的的硬硬件件环环境境由由4个个文文件件做做出出修修改改。下列配置文件包括在下列配置文件包括在C51软件包中:软件包中:STARTUP.A51:C51编编译译器器的的启启动动程程序序,所所有有的的栈栈指指针和存贮器,只要需要,将被初始化。针和存贮器,只要需要,将被初始化。INT.A51:在文件中已明确初始化了的变量作初始化。在文件中已明确初始化了的变量作初始化。如果系统装了如果系统装了“看门狗看门狗”,该文件可包含附加的,该文件可包含附加的“看门狗看门狗”刷新。刷新。PUTCHAR.C:函函数数“printf”、“puts”等等的的字字符符输输出出核核心心程程序序,该该程程序序可可根根

25、据据用用户户硬硬件件加加以以修修改改(如如LCD显示)。显示)。GETKEY.C:函数函数“getchar”、“scanf”等的字符等的字符输入核心程序,该程序可根据硬件加以修改(如矩阵键盘)输入核心程序,该程序可根据硬件加以修改(如矩阵键盘)所有文件都包含在所有文件都包含在C运行库中,因此,不能在连运行库中,因此,不能在连接时指定调用。如果用户改变一个文件,可将其编译接时指定调用。如果用户改变一个文件,可将其编译后与其它目标文件一起连接,因而不必改动运行库。后与其它目标文件一起连接,因而不必改动运行库。库中原文件自动忽略。库中原文件自动忽略。例:例:L51 MYMODUL1.OBJ,MYMO

26、DUL2.OBJ,STARTUP.OBJ,PUTCHAR.OBJ 上上 例例 将将 用用 户户 建建 立立 的的 STARTUP.OBJ和和PUTCHAR.OBJ连接起来。连接起来。用用C语语言言编编写写的的程程序序必必须须通通过过编编译译和和连连接接之之后后,才才能能生生成成可可执执行行代代码码。C51编编译译器器由由命命令令“C51”启启动,例如以动,例如以EXI2.C为文件名的程序编译命令如下;为文件名的程序编译命令如下;C51 EXI2.C CODE DEBUG(回车)回车)C51是是编编译译器器启启动动命命令令,EXI2.C是是程程序序文文件件名名,CODE和和DEBUG是是编编译译

27、控控制制指指令令。输输入入完完命命令令后后回回车车,即即可可进进人人编编译译过过程程。如如果果编编译译过过程程中中未未发发现现错误,屏幕上会显示出:错误,屏幕上会显示出:C51 COMPILATION COMPILETE,0 WARING(S),),0 ERROR(S)并并产产生生列列表表文文件件 EXI2.LST和和目目标标文文件件 EXI2.OBJ。如如果果编编译译中中发发现现任任何何错错误误,则则不不产产生生目目标标文文件件,而而将将所所有有的的错错误误信信息息都都在在列列表表文文件件中中表表示示出出来来。编编译译控控制制指指令令CODE使使列列表表文文件件的的后后面面附附加加一一个个汇

28、汇编编语语言言文文件件。编编译译控控制制指指令令DEBUG使使目目标标文文件件中中包包含含有有进进行行源源程程序序调调试试时时需需要要的的各各种种符符号号信信息息。目目标标文文件件中中还还包包含含有有可可再再定定位位的的目目标标码码,以以供供 L51连连接接器器作作进进一一步步的的处处理理。C51编编译译器器提提供供了了许许多多不不同同控控制制指令可以完成各种编译控制功能。指令可以完成各种编译控制功能。7.2 7.2 C51C51程序设计的基本语法程序设计的基本语法 C语言是一种程序设计语言,采用语言是一种程序设计语言,采用C语言进行语言进行程序设计时,需要遵循一定的语法规则。程序设计时,需要

29、遵循一定的语法规则。7.2.1 C语言的数据类型语言的数据类型 C语语言言的的数数据据结结构构是是以以数数据据类类型型出出现现的的,数数据据类类型型可可分分为为基基本本数数据据类类型型和和复复杂杂数数据据类类型型,复复杂杂数数据据类类型型由由基基本本数数据据类类型型构构造造而而成成。C语语言言中中的的基基本本数数据据类类型型有有char,int,short,long,float和和double。对对于于C51编编译译器器来来说说,short型型与与int型型相相同同,double型型与与float型型相相同同。分分别别说说明明如如下:下:1 char 字字符符类类型型。有有 signed ch

30、ar和和 unsigned char之之分分,默默认认值值为为 signed char。对对于于 signed char型型数数据据,其其字字节节中中的的最最高高位位表表示示该该数数据据的的符符号号,“0”表表示示正正数数,“l”表表示示负负数数。负负数数用用补补码码表表示示。所所能能表表示示的的数数值值范范围围是是-128127;unsigned char型型数数据据,是是无无符符号号字字符符型型数数据据,其其字字节节中中的的所所有有位位均均用用来来表表示示数数据据的的数数值值,所所表表示示的的数数值值范范围围是是 0255。2 int 整整型型。有有signed int和和unsigned

31、 nit之之分分,默默认认值值为为signed int。signed int是是有有符符号号整整型型数数,字字节节中中的的最最高高位位表表示示数数据据的的符符号号,“0”表表示示正正数数,“1”表表示示负负数数。所所能能表表示示的的数数值值范范围围是是-32768+32767。unsigned int是是无无符符号号整整型型数数,所所表表示示的的数数值范围是值范围是065535。3 long 长长整整型型。有有signed long和和unsigned long之之分分,默默认认值值为为signed long。它它们们的的长长度度均均为为四四个个字字节节。singed long是是有有符符号号

32、的的长长整整型型数数据据,字字节节中中的的最最高高位位表表示示数数据据的的符符号号,“0”表表示示正正数数,“1”表表示示负负数数。数数值值的的表表示示范范围围是是 2147483648 2147483647;unsigned long是是无无符符号号长长整整型型数数据据,数值的表示范围是数值的表示范围是04294967295。4float 浮点型。它是符合浮点型。它是符合IEEE754标准的标准的单精度浮点型数据,在十进制中具有单精度浮点型数据,在十进制中具有7位有效数字。位有效数字。float型数据占用四个字节(型数据占用四个字节(2位二进制数)。位二进制数)。需要需要指出的是,对于浮点型

33、数据除了有正常数值之外,指出的是,对于浮点型数据除了有正常数值之外,还可能出现非正常数值。根据还可能出现非正常数值。根据IEEE标准,当浮点型标准,当浮点型数据取以下数值(数据取以下数值(16进制数)时即为非正常值:进制数)时即为非正常值:FFFFFFFFH非非数数(NaN);7F800000H正正溢溢出出(INF););FF800000H负溢出(负溢出(INF););另另外外,由由于于8051单单片片机机不不包包括括捕捕获获浮浮点点运运算算错错误误的的中中断断向向量量,因因此此必必须须由由用用户户自自己己根根据据可可能能出出现现的错误条件用软件来进行适当的处理。的错误条件用软件来进行适当的处

34、理。5*指指针针型型。指指针针型型数数据据不不同同于于以以上上四四种种基基本本数数据据类类型型,它它本本身身是是一一个个变变量量,但但在在这这个个变变量量中中存存放放的的不不是是普普通通的的数数据据而而是是指指向向另另一一个个数数据据的的地地址址。指指针针变变量量也也要要占占据据一一定定的的内内存存单单元元,在在C51中中指指针针变变量量的的长长度度一一般般为为3个个字字节节。指指针针变变量量也也具具有有类类型型,其其表表示示方方法法是是在在指指针针符符号号“*”的的前前面面冠冠以以数数据据类类型型符符号号。如如 char *Pointl;表表示示 Pointl是是一一个个字字符符型型的的指指

35、针针变变量量。指指针针变变量量的的类类型型表表示示该该指指针针所所指指向向地地址址中中数数据据的的类类型型。使使用用指指针针型型变变量量可可以以方方便便地地对对8051单单片片机机的的各各部部分分物物理理地地址直接进行操作址直接进行操作。6bit 位位标标量量。这这是是C 51编编译译器器的的一一种种扩扩充充数数据据类类型型,利利用用它它可可定定义义一一个个位位标标量量,但但不不能能定定义位指针,也不能定义位数组义位指针,也不能定义位数组。7 7sfr sfr 特特殊殊功功能能寄寄存存器器。这这也也是是C C 5151编编译译器器的的一一种种扩扩充充数数据据类类型型,利利用用它它可可以以访访问

36、问80518051单单片片机机的的所所有有内内部部特特殊殊功功能能寄寄存存器器。sfrsfr型型数数据据占占用用一一个个内内存单元,其取值范围存单元,其取值范围0 0255255。8 8sfr16 sfr16 1616位位特特殊殊功功能能寄寄存存器器。它它占占用用两两个个内存单元,取值范围是内存单元,取值范围是0 06553565535。9 9sbit sbit 可可寻寻址址位位。这这也也是是C51C51编编译译器器的的一一种种扩扩充充数数据据类类型型,利利用用它它可可以以访访80518051单单片片机机内内部部RAMRAM中中的可寻址位或特殊功能寄存器中的可寻址位的可寻址位或特殊功能寄存器中

37、的可寻址位。在在C C语言程序中的表达式或变量赋值运算中,有语言程序中的表达式或变量赋值运算中,有时会出现时会出现运算对象的数据不一致运算对象的数据不一致的情况,的情况,C C语言允许语言允许任何标准数据类型之间的任何标准数据类型之间的隐式转换隐式转换。隐式转换按以下。隐式转换按以下优先级别自动进行:优先级别自动进行:bit charbit char int int long float signed long float signed unsignedunsigned 转换时由低向高进行,而不是数据转换时的顺序。转换时由低向高进行,而不是数据转换时的顺序。一般来说,如果有几个不同类型的数据同

38、时参加运算,一般来说,如果有几个不同类型的数据同时参加运算,先将低级别类型的数据转换成高级别类型,再作运算先将低级别类型的数据转换成高级别类型,再作运算处理,并且运算结果为高级别类型数据。处理,并且运算结果为高级别类型数据。C51C51编译器除了能支持以上这些基本数据之外,编译器除了能支持以上这些基本数据之外,还能支持一些复杂的构造型数据,如结构类型、联合还能支持一些复杂的构造型数据,如结构类型、联合类型等。类型等。7.2.2 7.2.2 常量常量 常常量量是是在在程程序序执执行行过过程程中中其其值值不不能能改改变变的的量量。常常量量的的数数据据类类型型有有整整型型、浮浮点点型型、字字符符型型

39、和和字字符符串串型型等等,C51C51编编译器还扩充了一种位(译器还扩充了一种位(bitbit)标量。分别说明如下:标量。分别说明如下:1 1整型常量整型常量 整整型型常常量量就就是是整整型型常常数数,可可表表示示为为以以下下几几种种形形式式:十十进进制制整整数数;十十六六进进制制整整数数:以以 0 0X X开开头头的的数数是是十十六六进进制制数数,ANSI ANSI C C标标准准规规定定十十六六进进制制数数的的数数字字为为0 09 9,再再加加字字母母a af f;长整数:在数字后面加一个字母长整数:在数字后面加一个字母L L就构成了长整数。就构成了长整数。2 2浮点型常量浮点型常量 浮点

40、型常量有十进制表示形式和指数表示形式。浮点型常量有十进制表示形式和指数表示形式。十十进进制制表表示示形形式式又又称称定定点点表表示示形形式式,由由数数字字和和小小数数点点组组成成。如如 0.31410.3141、31.4131.41、314.1314.1及及0.00.0都都是是十十进进制制数数表表示示形式的浮点型常量。形式的浮点型常量。在在这这种种表表示示形形式式中中,如如果果整整数数或或小小数数部部分分为为0 0可可以以省略不写,但必须有小数点。省略不写,但必须有小数点。指数表示形式为:指数表示形式为:数字数字数字数字e e 数字数字 其中,中的内容为可选项,可有可无,但其余其中,中的内容为

41、可选项,可有可无,但其余部分必须有。部分必须有。3 3字符型常量字符型常量 字字符符型型常常量量是是单单引引号号内内的的字字符符,如如aa、bb等等。对对于于不不可可显显示示的的控控制制字字符符,可可以以在在该该字字符符前前面面加加一一个个反反斜斜杠杠字字符符“”组组成成专专用用转转义义字字符符。利利用用转转义义字字符符可可以以完成一些特殊功能和输出时的格式控制。完成一些特殊功能和输出时的格式控制。4 4字符串型常量字符串型常量 字字符符串串型型常常量量由由双双引引号号“”“”内内的的字字符符组组成成。当当双双引引号号内内的的字字符符个个数数为为0 0时时,称称为为空空串串常常量量。需需要要注

42、注意意的的是是,字字符符串串常常量量首首尾尾的的双双引引号号是是界界限限符符,当当需需要要表表示示双双引引号号字字符符串串时时,可可用用转转义义字字符符来来表表示示为为:“”。如如:“I I saysay:“goodbye“goodbye!”字字符符串串为为I I saysay:“goodbye“goodbye!”另另外外,C C语语言言将将字字符符串串常常量量作作为为一一个个字字符符类类型型数数组组来来处处理理,在在存存储储字字符符串串常常量量时时,要要在在字字符符串串的的尾尾部部加加一一个个转转义义字字符符0 0作作为为该该字字符符串串常常量量的的结结束束符符。因因此此不不要要将将字字符符

43、常常量量与与字字符符串串常量混淆。常量混淆。5 5位标量位标量 这这是是C51C51编编译译器器的的一一种种扩扩充充数数据据类类型型。位位标标量量用用关关键键字字“bit”bit”来来定定义义,它它的的值值是是一一个个二二进进制制位位。一一个个函函数数中中可可以以包包含含“bit”bit”类类型型的的参参数数,函函数数的的返返回回值值也也可可为为“bit”bit”型型。另另外,外,不能定义位指针,也不能定义位数组不能定义位指针,也不能定义位数组。7.2.3 7.2.3 变量及其存储模式变量及其存储模式 和和常常量量相相比比,变变量量是是另另一一种种量量,在在程程序序执执行行过过程程中中其其值值

44、能能不不断断变变化化。每每一一个个变变量量都都必必须须有有一一个个标标识识符符作作为为它它的的变变量量名名。在在使使用用一一个个变变量量之之前前,必必须须先先对对该该变变量量进进行行定定义义,指指出出它它的的数数据据类类型型和和存存储储模模式式,以以便便编编译译系系统统为为它它分分配配相相应应的的存存储单元。在储单元。在C51C51中对变量进行定义的格式如下:中对变量进行定义的格式如下:存储种类数据类型存储器类型变量名表;存储种类数据类型存储器类型变量名表;其其中中,“存存储储种种类类”和和“存存储储器器类类型型”是是可可选选项项。变变量量的的存存储储种种类类有有四四种种:自自动动(autoa

45、uto)、外外部部(externextern)、静静态态(staticstatic)和和寄寄存存器器(registerregister)。在在定定义义一一个个变变量量时时如如果果省省略略存存储储种种类类选选项项,则则该该变变量量将将为为自自动动(autoauto)变变量。量。定定义义一一个个变变量量时时除除了了需需要要说说明明其其数数据据类类型型之之外外,C51C51编编译译器器还还允允许许说说明明变变量量的的存存储储器器类类型型。Franklin Franklin C51C51对对于于每每个个变变量量可可以以准准确确地地赋赋予予其其存存储储器器类类型型,从从而而可可使使之之能能够够在在单片机

46、系统内准确地定位。单片机系统内准确地定位。定定义义变变量量时时如如果果省省略略“存存储储器器类类型型”选选项项,则则按按编编译译模模式式SMALLSMALL、COMPACTCOMPACT或或LARGELARGE所所规规定定的的默默认认存存储储器器类类型型确确定定变变量量的的存存储储区区域域,不不能能位位于于寄寄存存器器中中的的参参数数传传递递变变量量和和过过程程变变量量也也保保存存在在默默认认的的存存储储器器区区域域。C51C51编编译译器器的的三三种种存存储储器模式(默认的存储器类型)对变量的影响如下:器模式(默认的存储器类型)对变量的影响如下:1.1.SMALL SMALL 变变量量被被定

47、定义义在在 80518051单单片片机机的的内内部部数数据据存存储储器器中中,因因此此对对这这种种变变量量的的访访问问速速度度最最快快。另另外外,所所有有的的对对象象,包包括括堆堆栈栈,都都必必须须嵌嵌入入内内部部数数据据存存储储器器,而而堆堆栈栈的的长长度度是是很很重要的,实际栈长取决于不同函数的嵌套深度。重要的,实际栈长取决于不同函数的嵌套深度。2.2.COMPACT COMPACT 变变量量被被定定义义在在分分页页外外部部数数据据存存储储器器中中,外外部部数数据据段段的的长长度度可可达达256256字字节节。这这时时对对变变量量的的访访问问是是通通过过寄寄存存器器间间接接寻寻址址(MOV

48、X MOVX RiRi)进进行行的的,堆堆栈栈位位于于80518051单单片片机机内内部部数数据据存存储储器器中中。采采用用这这种种编编译译模模式式时时,变变量量的的高高 8 8位位地地址址由由 P2P2口口确确定定。因因此此,在在采采用用这这种种模模式式的的同同时时,必必须须适适当当改改变变启启动动程程序序 STARTUPSTARTUPA51A51中中的的参参数数:PDATASTARTPDATASTART和和PDATALENPDATALEN;用用L51L51进进行行连连接接时时还还必必须须采采用用连连接接控控制制命命令令PDATAPDATA来来对对P2P2口口地地址址进进行行定定位位,这这样

49、样才才能能确确保保P2P2口口为为所所需需要要的的高高8 8位地址。位地址。3.3.LARGE LARGE 变变量量被被定定义义在在外外部部数数据据存存储储器器中中(最最大大可可达达6464K K字字节节),使使用用数数据据指指针针DPTRDPTR来来间间接接访访问问变变量量。这这种种访访问问数数据据的的方方法法效效率率是是不不高高的的,尤尤其其是是对对于于2 2个个或或多多个个字字节节的的变变量量,用用这这种种数数据据访访问问方方法法相相当当影影响响程程序序的的代代码码长长度度。另另外外一一个不方便之处是这种数据指针不能对称操作。个不方便之处是这种数据指针不能对称操作。需需要要特特别别指指出

50、出的的是是,变变量量的的存存储储种种类类与与存存储储器器类类型型是是完完全无关的。例如:全无关的。例如:static unsigned char data x static unsigned char data x;*在内部数据在内部数据 存存储储器器中中定定义义一一个个静静态态无无符符号字符型变量号字符型变量x *x *int int y y;*定义一个自动整型变量定义一个自动整型变量y y,它的存储器它的存储器 类型由编译模式确定类型由编译模式确定 *为为了了能能够够直直接接访访问问这这些些特特殊殊功功能能寄寄存存器器,C51C51编编译译器器扩扩充充了了关关键键字字 sfrsfr和和 s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁