收藏 分销(赏)

C51程序设计语言.pptx

上传人:丰**** 文档编号:4171758 上传时间:2024-08-11 格式: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单片机的软件基础单片机的软件基础C51C51C51C51程序设计语言基础程序设计语言基础程序设计语言基础程序设计语言基础 C51C51程序设计语言程序设计语言程序设计语言程序设计语言C51C51的运算符和表达式的运算符和表达式的运算符和表达式的运算符和表达式C51的头文件与库函数的头文件与库函数 C51C51程序设计及应用程序设计及应用程序设计及应用程序设计及应用C51的应用技巧的应用技巧第第4章章51单片机的软件基础单片机的软件基础随着随着80C5180C51单片机硬件性能的提升,尤其是片内程单片机硬件性能的提升,尤其是片内程序存储器容量的增大和时钟工作频率的提高,已基本序存储

2、器容量的增大和时钟工作频率的提高,已基本克服了高级语言产生代码长、运行速度慢、不适合单克服了高级语言产生代码长、运行速度慢、不适合单片机使用的致命缺点。由此片机使用的致命缺点。由此C51C51已经得到广泛的推广和已经得到广泛的推广和应用。应用。采用采用C51C51程序设计语言,程序设计语言,编程者只需了解变量和常编程者只需了解变量和常量的存储类型与量的存储类型与80C5180C51单片机存储空间的对应关系,而单片机存储空间的对应关系,而不必深入了解单片机的硬件和接口不必深入了解单片机的硬件和接口。C51C51编译器会自动编译器会自动完成变量的存储单元的分配。完成变量的存储单元的分配。C51C5

3、1程序设计语言程序设计语言C51语言概述语言概述第第4章章51单片机的软件基础单片机的软件基础成于大气 信达天下C51 C51 语语 言言 的的 特特 点点C提供了很多提供了很多数学函数数学函数并支持并支持浮点运浮点运算算,开发效率高,故可缩短开发时间,开发效率高,故可缩短开发时间,增加程序可读性和可维护性增加程序可读性和可维护性C语言程序本身语言程序本身不依赖于机器硬件系统不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单基本上不作修改就可将程序从不同的单片机中移植过来片机中移植过来C语言作为一种非常语言作为一种非常方便方便的语言而得的语言而得到广泛的支持,国内最通用的是到广泛的支持,

4、国内最通用的是Keil C51第第4章章51单片机的软件基础单片机的软件基础#include/*文件包含,文件包含,51寄存器说明寄存器说明*/main()/*主函数主函数*/intx,y,z;/*变量定义变量定义(变量类型)(变量类型)*/if(xy)z=x;/*运算符,基本语句运算符,基本语句*/elsez=y;C51程序示例:程序示例:第第4章章51单片机的软件基础单片机的软件基础C51C51的程序结构的程序结构与一般与一般C语言的结构相同,以语言的结构相同,以main()函数为程序入口,程函数为程序入口,程序体中包含若干语句还可以包含若干函数。序体中包含若干语句还可以包含若干函数。C5

5、1函数的一般格式函数的一般格式类型类型函数名(参数表)函数名(参数表)数据说明部分数据说明部分语句执行部分语句执行部分第第4章章51单片机的软件基础单片机的软件基础程程序序由由函函数数组组成成(一一个个主主函函数数,或或一个主函数和若干自定义函数);一个主函数和若干自定义函数);利利用用预预处处理理命命令令对对变变量量或或函函数数进进行行集中定义或说明;集中定义或说明;函函数数和和变变量量都都需需遵遵循循先先定定义义后后使使用用的基本原则;的基本原则;主主函函数数中中的的所所有有语语句句执执行行完完毕毕,则则程程序结束。序结束。C51与标准与标准C程序程序结构完全相同结构完全相同第第4章章51

6、单片机的软件基础单片机的软件基础举例:举例:LED闪烁控制功能闪烁控制功能第第4章章51单片机的软件基础单片机的软件基础预预处处理理命命令令-函函数数说说明明-全局变量定义全局变量定义-主主函函数数-调调用用函函数数-局局部部变变量量定定义义-程序体程序体程程序序体体-第第4章章51单片机的软件基础单片机的软件基础成于大气 信达天下一、一、C51C51中常用的头文件中常用的头文件Reg52.h(定义单片机的特殊功能寄(定义单片机的特殊功能寄存器和端口)存器和端口)Stdio.h(标准输入输出函数库)(标准输入输出函数库)Math.h(标准数学函数库)(标准数学函数库)Absacc.h(外部绝对

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

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

9、式输输出出fprintf格式输入格式输入fscanf格式输出(控制台)格式输出(控制台)printf格式输入(控制台)格式输入(控制台)scanf第第4章章51单片机的软件基础单片机的软件基础宏定义宏定义 在在语语言言源源程程序序中中允允许许用用一一个个标标识识符符来来表表示示一一个个字字符符串串,称称为为“宏宏”。被被定定义义为为“宏宏”的的标标识识符符称称为为“宏宏名名”。在在编编译译预预处处理理时时,对对程程序序中中所所有有出出现现的的“宏宏名名”,都都用用宏宏定定义义中中的字符串去代换的字符串去代换,这称为,这称为“宏代换宏代换”或或“宏展开宏展开”。宏宏定定义义是是由由源源程程序序中

10、中的的宏宏定定义义命命令令完完成成的的。宏宏代代换换是是由预处理程序自动完成的。由预处理程序自动完成的。宏定义的一般形式为:宏定义的一般形式为:#define标识符标识符字符串字符串“define”为为宏宏定定义义命命令令。“标标识识符符”为为所所定定义义的的宏宏名名。“字字符符串串”可可以以是是常常数数、表表达达式式、或或含含有有参参数数的的表表达达式式、格式串等。格式串等。在在程程序序中中多多次次使使用用宏宏,可可以以简简化化源源程程序序的的输输入入。与与使使用函数相比,会占用较多内存,但执行速度快用函数相比,会占用较多内存,但执行速度快。例如例如:#defineM(y*y+3*y)第第4

11、章章51单片机的软件基础单片机的软件基础文件包含命令文件包含命令 文文件件包包含含是是C预预处处理理程程序序的的另另一一个个重重要要功功能能。文文件件包包含含是是用用指指定定文文件件的的全全部部内内容容替替换换该该预预处处理理命命令令行行。即即一一个个程程序序文件将另一个指定文件的内容完全包含进来。文件将另一个指定文件的内容完全包含进来。在在程程序序设设计计中中,文文件件包包含含是是很很有有用用的的。一一个个大大的的程程序序可可以以分分为为多多个个模模块块,由由多多个个程程序序员员分分别别编编程程。有有些些公公用用的的符符号号常常量量或或宏宏定定义义等等可可单单独独组组成成一一个个文文件件,在

12、在其其它它文文件件的的开开头头用用包包含含命命令令包包含含该该文文件件即即可可使使用用。这这样样,可可避避免免在在每每个个文文件件开开头都去书写那些公用量,从而节省时间,并减少出错。头都去书写那些公用量,从而节省时间,并减少出错。#include文件名文件名或:或:#include。文文件件包包含含的的对对象象最最为为常常见见的的是是头头文文件件(扩扩展展名名.h)。在在前前面面我我们们已已多多次次用用此此命命令令包包含含过过库库函函数数的的头头文文件件。文文件件包包含含命令行的一般形式为:命令行的一般形式为:第第4章章51单片机的软件基础单片机的软件基础二、二、C51的标识符、常量和关键字的

13、标识符、常量和关键字标标识识符符用用来来标标识识源源程程序序中中某某个个对对象象的的名名字字,这这些些对对象象可以是语句、数据类型、函数、变量、数组等。可以是语句、数据类型、函数、变量、数组等。标识符标识符区分大小写区分大小写,第一个字符必须是字母第一个字符必须是字母或下划线。或下划线。C51中中有有些些库库函函数数的的标标识识符符是是以以下下划划线线开开头头的的,所所以以一般不要以下划线开头命名标识符一般不要以下划线开头命名标识符。常常量量:凡凡以以数数字字0开开头头的的数数字字序序列列,一一律律作作为为八八进进制制数数处处理理;凡凡以以0 x开开头头,后后面面跟跟若若干干数数字字的的,一一

14、律律作作为为十十六六进进制数制数处理;其它作为处理;其它作为十进制数十进制数处理。处理。关关键键字字:ANSI C标标准准关关键键字字和和C51编编译译器器的的扩扩展展关关键键字字第第4章章51单片机的软件基础单片机的软件基础C51扩展的若干关键字一览表扩展的若干关键字一览表变量名不得使用标准变量名不得使用标准C语言和语言和C51语言的关键字。语言的关键字。第第4章章51单片机的软件基础单片机的软件基础uC51的变量的变量在程序执行过程中,数值可以发生改变的量称为在程序执行过程中,数值可以发生改变的量称为变量变量。变变量量名名与与存存储储单单元元地地址址相相对对应应,变变量量值值与存储单元的内

15、容相对应。与存储单元的内容相对应。例例如如在哈佛结构的存储空间中如何建立变量概念?在哈佛结构的存储空间中如何建立变量概念?第第4章章51单片机的软件基础单片机的软件基础【存储种类存储种类】数据类型数据类型【存储类型存储类型】变量名变量名(标准(标准C)(标准(标准C)*括号项括号项可以缺省(但需有缺省值)可以缺省(但需有缺省值)C51变量定义的四要素变量定义的四要素:(C51特有)特有)(标准(标准C+C51)第第4章章51单片机的软件基础单片机的软件基础【存储种类存储种类】数据类型数据类型【存储类型存储类型】变量名变量名共有四个说明符:共有四个说明符:1、auto(自自动动型型)变变量量的的

16、作作用用范范围围在在定定义义它它的的函函数数体体或或语句块内。执行结束后,变量所占内存即被释放。语句块内。执行结束后,变量所占内存即被释放。2、extern(外外部部型型)在在一一个个源源文文件件中中被被定定义义为为外外部部型型的的变量,在其它源文件中需要通过变量,在其它源文件中需要通过extern说明方可使用。说明方可使用。3、static(静静态态型型)利利用用static可可使使变变量量定定义义所所在在的的函函数数或语句块执行结束后,其分配的内存单元继续保留。或语句块执行结束后,其分配的内存单元继续保留。4、register(寄寄存存器器型型)将将变变量量对对应应的的储储存存单单元元指指

17、定定为为通用寄存器,以提高程序运行速度。通用寄存器,以提高程序运行速度。缺省存储种类为缺省存储种类为auto(自动自动)型变量型变量第第4章章51单片机的软件基础单片机的软件基础数据的不同格式叫做数据类型数据的不同格式叫做数据类型*有符号数类型可以忽略有符号数类型可以忽略signed标识符标识符标标准准C语语言言的的数数据据类类型型【存储种类存储种类】数据类型数据类型【存储类型存储类型】变量名变量名第第4章章51单片机的软件基础单片机的软件基础成于大气 信达天下C51C51中的数据类型中的数据类型类型类型符号符号关关 键键 字字所占位数所占位数数据表示范围数据表示范围整整型型有有(signed

18、)int16-3276832767(signed)short int16-3276832767(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第第4章章51单片机的软件基础单片机的软件基础C C语言中的数据类型语言中的数据类

19、型类型类型符号符号关关 键键 字字所占位数所占位数数据表示范围数据表示范围整整型型有有(signed)int16-3276832767(signed)short int16-3276832767(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

20、char80255从从上上面面两两个个表表可可以以看看出出,C51中中的的数数据据类类型型和和C语语言言中中的的数据类型完全一样。数据类型完全一样。第第4章章51单片机的软件基础单片机的软件基础C51扩充扩充数据类型:数据类型:bit、sfr或或sfr16、sbitbit型型关键词关键词bit用于定义一用于定义一个位变量个位变量,语法规则:,语法规则:bitbit_name=0或或1;例如:例如:bitdoor=0;/定义一个叫定义一个叫door的位变量且初值为的位变量且初值为0标准标准C的变量定义举例:的变量定义举例:inta=5;/定义一个初值为定义一个初值为5的整形变量的整形变量a语法规

21、则:语法规则:intint_name=常数常数;注意注意:上述变量的物理地址是由编译器分配的:上述变量的物理地址是由编译器分配的第第4章章51单片机的软件基础单片机的软件基础sfr或或sfr16型型关键词关键词sfr或或sfr16用于定义用于定义SFR字节地址变量字节地址变量,语法规则:,语法规则:sfr或或sfr16sfr_name=字节地址字节地址常数常数;51MCU中有中有21个个SFR,如何定义与这些单元相关的变量?,如何定义与这些单元相关的变量?第第4章章51单片机的软件基础单片机的软件基础例如,例如,sfrP0=0 x80;/定义定义P0口地址口地址80HsfrPCON=0 x87

22、;/定义定义PCON地址地址87Hsfr16DPTR=0 x82;/定义定义DPTR的低端地址的低端地址82H注意注意:SFR字节地址变量的物理地址是由字节地址变量的物理地址是由MCU资源决定的资源决定的第第4章章51单片机的软件基础单片机的软件基础sbit型型部分部分SFR具有位地址,如何定义与这些位地址相关的变量?具有位地址,如何定义与这些位地址相关的变量?CYCYACACF0F0RS1RS1RS0RS0OVOVF1F1P PCYCYACACF0F0RS1RS1RS0RS0OVOVF1F1P PCYCYACACF0F0RS1RS1RS0RS0OVOVF1F1P PCYCYACACF0F0R

23、S1RS1RS0RS0OVOVF1F1P PD07D07D7HD7HD6HD6HD5HD5HD4HD4HD3HD3HD2HD2HD1HD1HD0HD0HD0HD0HPSWPSWD06D06D05D05D04D04D03D03D02D02D01D01D00D00绝对位地址绝对位地址相对位地址相对位地址字节地址字节地址两种位地址表达形式:绝对位地址、相对位地址两种位地址表达形式:绝对位地址、相对位地址第第4章章51单片机的软件基础单片机的软件基础1)将)将SFR的的绝对位地址绝对位地址定义为位变量名定义为位变量名sbitbit_name=位地址常数位地址常数;例如,例如,sbitCY=0 xD7;

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

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

26、符号整型有符号整型signedint2字节字节-3276832767无符号长整型无符号长整型 unsignedlong 4字节字节 04294967295有符号长整型有符号长整型 signedlong4字节字节-21474836482147483647浮点型浮点型float4字节字节 1.1755E-383.40E+38特殊功能寄特殊功能寄存器型存器型sfrsfr161字节字节2字节字节0255065535位类型位类型bit、sbit1位位0或或1第第4章章51单片机的软件基础单片机的软件基础sbit是是对对应应可可位位寻寻址址空空间间的的一一个个位位,可可位位寻寻址址区区20H2FH或或者者

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

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

29、的每一个数据元素都属于同一类型,型,各元素可以用数组名和下标来唯一确定各元素可以用数组名和下标来唯一确定。定义格式类似。定义格式类似于数据定义:于数据定义:数据类型数据类型数组名数组名常量表达式常量表达式多维数组的定义:多维数组的定义:数据类型数据类型数组名数组名常量表达式常量表达式常量表达式常量表达式例:例:intxdataxx15;charcodestr=“Howareyou?”;第第4章章51单片机的软件基础单片机的软件基础【存储种类存储种类】数据类型数据类型【存储类型存储类型】变量名变量名51单片机的单片机的三个逻辑存储空间:三个逻辑存储空间:片内数据存储器,片外数据存储器和程序存储器

30、。片内数据存储器,片外数据存储器和程序存储器。第第4章章51单片机的软件基础单片机的软件基础建立建立C51存储类型存储类型与与存储空间存储空间的对应关系的对应关系data区区code区区xdata区区bdata区区pdata区区idata区区第第4章章51单片机的软件基础单片机的软件基础C51的存储类型与存储空间对应关系表的存储类型与存储空间对应关系表SMALL系统系统COMPACT系统系统LARGE系统系统编译模式编译模式第第4章章51单片机的软件基础单片机的软件基础三种编译模式分别对应于三种三种编译模式分别对应于三种缺省存储类型缺省存储类型:【存储种类存储种类】数据类型数据类型【存储类型存

31、储类型】变量名变量名C51编编译译器器可可根根据据当当前前采采取取的的编编译译模模式式自自动动认认定定默默认认的的存存储类型储类型约定约定:若无特殊声明,一般均为:若无特殊声明,一般均为“SMALL编译模式编译模式”第第4章章51单片机的软件基础单片机的软件基础 例例 变量的存储模式变量的存储模式#pragmasmall/*变量的存储模式为变量的存储模式为Small*/chark1;/*k1存储模式存储模式Small,存储器类型默认,存储器类型默认data*/intxdatam1;/*m1存储模式为存储模式为Small,存储器类型,存储器类型xdata*/#pragmacompact/*变量的

32、存储模式为变量的存储模式为Compact*/chark2;/*k2存储模式存储模式Compact,k2存储器类型默认存储器类型默认pdata*/intxdatam2;/*m2存储模式存储模式Compact,存储器类型,存储器类型xdata*/intfunc1(intx1,inty1)large/*函数函数Large,x1和和y1存储器类型存储器类型xdata*/return(x1+y1);intfunc2(intx2,inty2)/*函数默认函数默认Small,x2和和y2存储器类型存储器类型data*/return(x2-y2);第第4章章51单片机的软件基础单片机的软件基础成于大气 信达天

33、下C51C51的基本语句的基本语句与标准与标准C语言基本相同:语言基本相同:if选择语言选择语言switch/case多分支选择语言多分支选择语言while循环语言循环语言do-while循环语言循环语言for 循环语言循环语言第第4章章51单片机的软件基础单片机的软件基础运运算算符符就就是是完完成成某某种种特特定定运运算算的的符符号号。C51的的数数据据运运算算操操作作与与标标准准C语语言言基基本本相相同同,具具有有十十分分丰丰富富的的运运算算符符,对对数数据据有有很很强强的的表表达达能能力力:运运算算符符按按其其表表达达式式中中与与运运算算符符的的关关系系(含含有有运运算算符符的的数数量量

34、)可可分分为为单单目目运运算算符符、双双目目运运算算符符和和三三目目运算符。运算符。三、三、C51C51的运算符和表达式的运算符和表达式1 1、C-51 C-51的运算符的运算符第第4章章51单片机的软件基础单片机的软件基础成于大气 信达天下C51C51中的运算符中的运算符与与C语言基本相同:语言基本相同:+,-,*,/,%(加(加减减乘乘除除求余)求余),=,(位右移(位右移位左移)位左移)&,|(按位与(按位与按位或)按位或),(按位异或(按位异或按位取反)按位取反)第第4章章51单片机的软件基础单片机的软件基础算术运算符算术运算符运算符运算符范例范例说明说明+A+b加或取正值运算符加或取

35、正值运算符-A-b减或取负值运算符减或取负值运算符*A*b乘运算符乘运算符/A/b除运算符除运算符%A%b模(取余)运算符,如模(取余)运算符,如8%5=3+A+等同于等同于A=A+1-A-等同于等同于A=A-1第第4章章51单片机的软件基础单片机的软件基础赋值运算符赋值运算符使用使用“=”的赋值语句格式如下:的赋值语句格式如下:注意注意“=”与与“=”两个运算符和赋值运算符两个运算符和赋值运算符“=”结合结合后使用的区别。后使用的区别。变量变量=表达式表达式;注意注意“=”与与“=”两个运算符和赋值运算符两个运算符和赋值运算符“=”结合后使结合后使用的区别。用的区别。例例1:a=1;b=+a

36、;其运算过程是其运算过程是a加加1变为变为2,然后赋值给,然后赋值给b,即:,即:b=2,a=2。例例2:a=1;b=a+;其运算过程是赋值给其运算过程是赋值给b,然后,然后a加加1变为变为2,即:,即:b=1,a=2。第第4章章51单片机的软件基础单片机的软件基础C51中绝对地址的访问中绝对地址的访问C51中中绝绝对对地地址址的的访访问问有有三三种种方方法法:使使用用C51运运行行库库中中预预定定义宏义宏,通过指针访问通过指针访问,使用,使用C51扩展关键字扩展关键字_at_。1.使用使用C51运行库中预定义宏运行库中预定义宏C51编编译译器器提提供供了了一一组组宏宏定定义义来来对对MCS-

37、51单单片片机机的的地地址址空空间间进进行行绝绝对对寻寻址址。规规定定只只能能以以无无符符号号数数方方式式访访问问。在在包包含含头头文文件件absacc.h的的前前提提下下,可可以以使使用用预预处处理理命命令令#define指指令令定定义义不不同同存储空间各个变量的绝对地址。形式为:存储空间各个变量的绝对地址。形式为:#include第第4章章51单片机的软件基础单片机的软件基础访问形式:访问形式:预定义宏名预定义宏名地址地址函数原型定义:函数原型定义:#define宏名宏名(数据类型数据类型volatile*)0 x存储单元的绝对地址存储单元的绝对地址)预定义宏名:预定义宏名:CBYTEco

38、de区(字节)区(字节)DBYTEdata区(字节)区(字节)PBYTEpdata区(字节)区(字节)XBYTExdata区(字节)区(字节)CWORDcode区(字)区(字)DWORDdata区(字)区(字)PWORDpdata区(字)区(字)XWORDxdata区(字)区(字)预定义宏名表示绝对地址所处的存储空间和数据长度。预定义宏名表示绝对地址所处的存储空间和数据长度。第第4章章51单片机的软件基础单片机的软件基础 例例 绝对地址对存储单元的访问绝对地址对存储单元的访问#include/*将绝对地址头文件包含在文件中将绝对地址头文件包含在文件中*/#include/*将寄存器头文件包含在

39、文件中将寄存器头文件包含在文件中*/#defineucharunsignedchar/*定义符号定义符号uchar为数据类型符为数据类型符unsignedchar*/#defineuintunsignedint/*定义符号定义符号uint为数据类型符为数据类型符unsignedint*/voidmain(void)ucharvar1;uintvar2;var1=XBYTE0 x0005;/*访问片外访问片外RAM的的0005字节单元字节单元*/var2=XWORD0 x0002;/*访问片外访问片外RAM的的0002字单元字单元*/.while(1);第第4章章51单片机的软件基础单片机的软件

40、基础2.使用指针使用指针采采用用指指针针的的方方法法,可可实实现现在在C51程程序序中中对对任任意意指定的存储器地址进行操作。指定的存储器地址进行操作。uchar idata ivar1;uchar xdata*xdp;/*定义一个指向定义一个指向xdata存储器空间的指针存储器空间的指针*/char data*dp;/*定义一个指向定义一个指向DATA存储器空间的指针存储器空间的指针*/uchar idata*idp;/*定义一个指向定义一个指向idata存储器空间的指针存储器空间的指针*/xdp=0 x1000;/*xdata指针赋值,指向指针赋值,指向xdata存储器地址存储器地址100

41、0H处处*/*xdp=0 x5A;/*将数据将数据5AH送到送到xdata的的1000H单元单元*/dp=0 x61;/*DATA指针赋值,指向指针赋值,指向DATA存储器地址存储器地址61H处处*/*dp=0 x23;/*将数据将数据23H送到送到DATA的的61H单元单元*/idp=&ivar1;/*idp指向指向idata区变量区变量ivar1*/*idp=0 x16;/*等价于等价于ivar1=0 x16*/第第4章章51单片机的软件基础单片机的软件基础指针与地址运算符:指针与地址运算符:*(指针运算符(指针运算符),),&(取地址运算符)(取地址运算符)功能:功能:“*”放放在在指指

42、针针变变量量前前面面,实实现现访访问问以以指指针针变变量量的的内内容容为为地地址址所所指指向向的的存存储储单单元元。例例如如:指指针针变变量量p中中的的地地址址为为2000H,则则*p所所访访问问的的是是地地址址为为2000H的的存存储储单单元元,x=*p,实实现现把把地地址址为为2000H的存储单元的内容送给变量的存储单元的内容送给变量x。“&”放放在在变变量量的的前前面面,通通过过它它取取得得变变量量的的地地址址,变变量量的的地地址址通通常常送送给给指指针针变变量量。例例如如:设设变变量量x的的内内容容为为12H,地地址址为为2000H,则则&x的的值值为为2000H,如如有有一一指指针针

43、变变量量p,则则通通常常用用p=&x,实实现现将将x变变量量的的地地址址送送给给指指针针变变量量p,指指针针变变量量p指指向向变变量量x,以后可以通过,以后可以通过*p访问变量访问变量x。第第4章章51单片机的软件基础单片机的软件基础3.使用使用C51扩展关键字扩展关键字 _at_ 使用使用_at_对指定的存储器空间的绝对地址进行定对指定的存储器空间的绝对地址进行定位,一般格式如下:位,一般格式如下:存储器类型存储器类型 数据类型数据类型 标识符标识符 _at_ 常数常数 uchar xdata xram0 x8000 _at_ 0 x0000;/*在外部在外部RAM空间空间0000H处定义了

44、一个一维数组处定义了一个一维数组变量变量xram,数组的元素个数为,数组的元素个数为32768(0 x8000)*/例如例如 使用使用_at_定义的变量只能为全局变量。定义的变量只能为全局变量。第第4章章51单片机的软件基础单片机的软件基础使用使用C51扩展关键字扩展关键字_at_使用使用_at_对指定的存储器空间对地址进行访问,一般格对指定的存储器空间对地址进行访问,一般格式如下:式如下:存储器类型存储器类型数据类型说明符数据类型说明符变量名变量名_at_地址常数;地址常数;其中,存储器类型为等其中,存储器类型为等C51能识别的数据类型,如省略能识别的数据类型,如省略则按存储器规定的默认存储

45、器类型确定变量的存储区则按存储器规定的默认存储器类型确定变量的存储区域;数据类型为域;数据类型为C51支持的数据类型;支持的数据类型;地址常数用于指定变量的绝对地址,必须位于有效的地址常数用于指定变量的绝对地址,必须位于有效的存储空间之内;使用存储空间之内;使用_at_定义的变量必须为全局变量定义的变量必须为全局变量第第4章章51单片机的软件基础单片机的软件基础【例例】通过通过_at_at_实现绝对地址的访问。实现绝对地址的访问。#define uchar unsinged char /#define uchar unsinged char /定义符号定义符号ucharuchar为为数据类型符

46、数据类型符unsigned charunsigned char#define uint unsigned int /#define uint unsigned int /定义符号定义符号uintuint为为数据类型符数据类型符unsigned intunsigned intvoid main(void)void main(void)data uchar x1_at_0 x40;/data uchar x1_at_0 x40;/在在datadata区中定义字节变区中定义字节变量,它的地址为量,它的地址为40H40Hxdata uint x2_at_0 x2000;/xdata uint x2_a

47、t_0 x2000;/在在xdataxdata区中定义字区中定义字变量,它的地址为变量,它的地址为2000H2000Hx1=0 xff;x1=0 xff;x2=0 x1234;x2=0 x1234;while(1);while(1);第第4章章51单片机的软件基础单片机的软件基础四、四、C-51 C-51的基本语句的基本语句与标准与标准C C语言基本相同:语言基本相同:if if 选择语言选择语言 switch/caseswitch/case 多分支选择语言多分支选择语言whilewhile 循环语言循环语言 do-whiledo-while 循环语言循环语言forfor 循环语言循环语言第第

48、4章章51单片机的软件基础单片机的软件基础1)第一种形式为基本形式:)第一种形式为基本形式:ifif(表达式表达式)语句语句其语义是:如果表达式的值为真,则执行其语义是:如果表达式的值为真,则执行其后的语句,其后的语句,否则不执行该语句。其过程否则不执行该语句。其过程可表示为下图。可表示为下图。1、if语句的三种形式语句的三种形式2)第二种形式为)第二种形式为:if-elseif(表达式表达式)语句语句1;else语句语句2;其语义是:如果表达式的值为真,其语义是:如果表达式的值为真,则执行语句则执行语句1,否则执行语句,否则执行语句2。第第4章章51单片机的软件基础单片机的软件基础例如:例如

49、:if(xy)max=x;elsemax=y;本形式相当于本形式相当于双分支选择双分支选择结构。结构。第第4章章51单片机的软件基础单片机的软件基础3.当有多个分支选择时,可采用当有多个分支选择时,可采用if-else-if语句,其一般形式语句,其一般形式为:为:if(表达式表达式1)语句语句1;elseif(表达式表达式2)语句语句2;elseif(表达式表达式3)语句语句3;elseif(表达式表达式m)语句语句m;else语句语句n;其语义是:依次判断表达式的值,当出现某个值为真时,其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个则执行其对应的语句。然后

50、跳到整个if语句之外继续执行程语句之外继续执行程序。序。如果所有的表达式均为假,则执行语句如果所有的表达式均为假,则执行语句n。然后继续执。然后继续执行后续程序。行后续程序。【例5.5】第第4章章51单片机的软件基础单片机的软件基础例如:例如:if(x100)y=1;elseif(x50)y=2;elseif(x30)y=3;elseif(x20)y=4;elsey=5;99第第4章章51单片机的软件基础单片机的软件基础【例5.5】第第4章章51单片机的软件基础单片机的软件基础二、二、switch语句语句语言还提供了另一种用于多分支选择的语言还提供了另一种用于多分支选择的switch语句,语句

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服