第3章-C51语言编程基础ppt课件

上传人:94****0 文档编号:240688098 上传时间:2024-04-30 格式:PPT 页数:153 大小:1.20MB
返回 下载 相关 举报
第3章-C51语言编程基础ppt课件_第1页
第1页 / 共153页
第3章-C51语言编程基础ppt课件_第2页
第2页 / 共153页
第3章-C51语言编程基础ppt课件_第3页
第3页 / 共153页
点击查看更多>>
资源描述
我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 第3章 C51语言编程基础与语言编程基础与KeilVision3开发平台开发平台 1第第3章章C51语语言言编编程基程基础础与与我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物单片机应用系统日趋复杂,对单片机应用系统日趋复杂,对程序的可读性、升级与维护以及模块化要求越程序的可读性、升级与维护以及模块化要求越来越高来越高,对软件编程要求也越来越高,要求编程人员在短时间内编写出执,对软件编程要求也越来越高,要求编程人员在短时间内编写出执行效率高、运行可靠的程序代码。同时,也要方便多个编程人员来进行协行效率高、运行可靠的程序代码。同时,也要方便多个编程人员来进行协同开发。同开发。C51C51语言是近年来在语言是近年来在80518051单片机开发中,普遍使用的程序设计语言,能单片机开发中,普遍使用的程序设计语言,能直接对直接对80518051单片机硬件进行操作,既有高级语言特点,又有汇编语言特点单片机硬件进行操作,既有高级语言特点,又有汇编语言特点,因此,因此在在80518051单片机程序设计中,得到广泛使用。单片机程序设计中,得到广泛使用。本章介绍本章介绍80518051单片机的单片机的C51C51语言,以及如何使用语言,以及如何使用C51C51语言集成化开发平台语言集成化开发平台Keil Keil Vision3Vision3,进行,进行C51C51程序设计与开发。程序设计与开发。2单单片机片机应应用系用系统统日日趋趋复复杂杂,对对程序的可程序的可读读性、升性、升级级与与维护维护以及模以及模块块化化我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.1 C513.1 C51编程语言简介编程语言简介用于用于80518051单片机编程的单片机编程的C C语言,在标准语言,在标准C C基础上针对基础上针对80518051硬件特点进行扩硬件特点进行扩展,并向展,并向80518051上移植,经多年努力,上移植,经多年努力,C51C51已成为公认的高效、简洁的已成为公认的高效、简洁的80518051单片机的实用高级编程语言。与单片机的实用高级编程语言。与80518051汇编语言相比,汇编语言相比,C51C51语言在语言在功能上、结构性、可读性、可维护性上有明显优势,易学易用。功能上、结构性、可读性、可维护性上有明显优势,易学易用。3.1.1 C513.1.1 C51语言与语言与80518051汇编语言比较汇编语言比较与与80518051汇编语言相比,汇编语言相比,C51C51有如下优点。有如下优点。(1 1)可读性好)可读性好。C51C51语言程序比汇编语言程序的可读性好,编程效率高,语言程序比汇编语言程序的可读性好,编程效率高,程序程序便于修改、维护以及升级便于修改、维护以及升级。3.1C51编编程程语语言言简简介介3我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物(2 2)模块化开发与资源共享模块化开发与资源共享。用。用C51C51开发的程序模块可不经修改,直接开发的程序模块可不经修改,直接被其他工程所用,使得开发者能够很好地被其他工程所用,使得开发者能够很好地利用已有的大量标准利用已有的大量标准C C程序资源程序资源与丰富的库函数,减少重复劳动,与丰富的库函数,减少重复劳动,同时也有利于多个工程师进行协同开同时也有利于多个工程师进行协同开发。发。(3 3)可移植性好。可移植性好。为某种型号单片机开发的为某种型号单片机开发的C C语言程序,只需把与硬件语言程序,只需把与硬件相关的相关的头文件头文件和和编译链接的参数编译链接的参数进行适当修改,就可方便地移植到其他进行适当修改,就可方便地移植到其他型号的单片机上。型号的单片机上。例如例如,为,为80518051单片机编写的程序通过改写头文件以及单片机编写的程序通过改写头文件以及少量的程序行,就可方便地移植到少量的程序行,就可方便地移植到PICPIC单片机上。单片机上。(4 4)生成的代码效率高。生成的代码效率高。当前较好的当前较好的C51C51语言编译系统编译出来的代码语言编译系统编译出来的代码效率只比直接使用汇编语言效率只比直接使用汇编语言低低20%20%左右,如果使用左右,如果使用优化编译选项优化编译选项,最高可,最高可达到达到90%90%左右。左右。4(2)模)模块块化开化开发发与与资资源共享。用源共享。用C51开开发发的程序模的程序模块块可不可不经经修改修改我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.1.2 C513.1.2 C51语言与标准语言与标准C C语言的比较语言的比较C51C51语言与标准语言与标准C C语言间有许多相同地方,但也有自身特点。不同的嵌入式语言间有许多相同地方,但也有自身特点。不同的嵌入式C C语言编译系统之所以与标准语言编译系统之所以与标准C C语言有不同的地方,主要是由于它们所针语言有不同的地方,主要是由于它们所针对的硬件系统不同。对于对的硬件系统不同。对于80518051单片机,目前广泛使用的是单片机,目前广泛使用的是C51C51语言。语言。C51C51语言基本语法与标准语言基本语法与标准C C相同,是相同,是在标准在标准C C的基础上的基础上进行适合进行适合80518051内核单内核单片机硬件的扩展片机硬件的扩展。深入理解。深入理解C51C51语言语言对标准对标准C C语言的语言的扩展部分扩展部分以及它们的以及它们的不同之处,是掌握不同之处,是掌握C51C51语言的关键之一。语言的关键之一。53.1.2C51语语言与言与标标准准C语语言的比言的比较较5我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物C51C51语言与标准语言与标准C C语言语言一些差别一些差别如下。如下。(1 1)库函数不同。)库函数不同。标准标准C C中不适合于嵌入式控制器系统的库函数,被排除中不适合于嵌入式控制器系统的库函数,被排除在在C51C51语言之外,如字符屏幕和图形函数。有些库函数必须针对语言之外,如字符屏幕和图形函数。有些库函数必须针对80518051的硬件的硬件特点来做出相应的开发。特点来做出相应的开发。例如,例如,在标准在标准C C中,库函数中,库函数printfprintf和和scanfscanf,常用于屏幕打印和接收字符,常用于屏幕打印和接收字符,而在而在C51C51语言中,主要用于语言中,主要用于串行口数据的收发串行口数据的收发。(2 2)数据类型有一定区别)数据类型有一定区别。在。在C51C51中增加几种中增加几种80518051单片机的数据类型,在单片机的数据类型,在标准标准C C的基础上又扩展了的基础上又扩展了4 4种类型。例如,种类型。例如,80518051单片机包含位操作空间和丰富单片机包含位操作空间和丰富的位操作指令,因此,的位操作指令,因此,C51C51语言与标准语言与标准C C语言相比语言相比增加了增加了位类型位类型。6C51语语言与言与标标准准C语语言一些差言一些差别别如下。如下。6我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 (3 3)C51C51语言变量存储模式与标准语言变量存储模式与标准C C语言中变量存储模式数据不一样语言中变量存储模式数据不一样。标。标准准C C最初是为通用计算机设计的,在通用计算机中只有一个程序和数据统一最初是为通用计算机设计的,在通用计算机中只有一个程序和数据统一寻址的内存空间,而寻址的内存空间,而C51C51语言中语言中变量的存储模式变量的存储模式与与80518051单片机的单片机的各种存储器各种存储器区紧密相关区紧密相关。(4 4)数据存储类型不同)数据存储类型不同。80518051存储区可分为存储区可分为内部数据存储区、外部数据内部数据存储区、外部数据存储区以及程序存储区存储区以及程序存储区。内部数据存储区内部数据存储区可分为可分为3 3个不同的个不同的C51C51存储类型:存储类型:datadata、idataidata和和bdatabdata。外部数据存储区分外部数据存储区分为为2 2个不同的个不同的C51C51存储类型:存储类型:xdataxdata和和p pdatadata。程序存储区程序存储区只能读不能写,可能在只能读不能写,可能在80518051内部或者在外部,内部或者在外部,C51C51语言提供的语言提供的codecode存储类型用来访问程序存储区。存储类型用来访问程序存储区。7(3)C51语语言言变变量存量存储储模式与模式与标标准准C语语言中言中变变量存量存储储模式数模式数我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 (5 5)标准)标准C C语言没有处理单片机中断的定义语言没有处理单片机中断的定义,而,而C51C51语言中有专门的中语言中有专门的中断函数。断函数。(6 6)头文件不同)头文件不同。C51C51语言头文件必须把语言头文件必须把80518051单片机内部的外设硬件资单片机内部的外设硬件资源(如定时器、中断、源(如定时器、中断、I/OI/O等)相应的等)相应的特殊功能寄存器特殊功能寄存器写入写入到头文件到头文件内,内,而标准而标准C C不用。不用。(7 7)程序结构的差异)程序结构的差异。由于。由于80518051单片机的硬件资源有限,它的编译系单片机的硬件资源有限,它的编译系统统不允许太多的程序嵌套不允许太多的程序嵌套。其次,标准。其次,标准C C语言所具备的语言所具备的递归特性递归特性不被不被C51C51语言支持。语言支持。8(5)标标准准C语语言没有言没有处处理理单单片机中断的定片机中断的定义义,而,而C51语语言言我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物但从数据运算操作、程序控制语句以及函数的使用上来说,但从数据运算操作、程序控制语句以及函数的使用上来说,C51C51与标准与标准C C几乎几乎没有什么明显差别。如果程序设计者具备了有关标准没有什么明显差别。如果程序设计者具备了有关标准C C语言的编程基础,语言的编程基础,只要注意只要注意C51C51与标准与标准C C不同之处,并熟悉不同之处,并熟悉80518051单片机的硬件结构,就能较单片机的硬件结构,就能较快掌握快掌握C51C51编程。编程。3.2 C513.2 C51语言程序设计基础语言程序设计基础本节在标准本节在标准C C基础上,了解掌握基础上,了解掌握C51C51的数据类型和存储类型、的数据类型和存储类型、C51C51的基本运算的基本运算与流程控制语句、与流程控制语句、C51C51语言构造数据类型、语言构造数据类型、C51C51函数以及函数以及C51C51程序设计的其程序设计的其他一些问题,为他一些问题,为C51C51的程序开发打下基础的程序开发打下基础。9但从数据运算操作、程序控制但从数据运算操作、程序控制语语句以及函数的使用上来句以及函数的使用上来说说,C51与与我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3.2.1 C513.2.1 C51语言中的数据类型与存储类型语言中的数据类型与存储类型1 1数据类型数据类型 数据是单片机操作的对象,具有一定格式的数字或数值,数据的不同格数据是单片机操作的对象,具有一定格式的数字或数值,数据的不同格式就称为式就称为数据类型数据类型。Keil C51 Keil C51支持的基本数据类型见支持的基本数据类型见表表3-13-1。针对针对80518051的硬件特点,的硬件特点,C51C51在标准在标准C C基础上,基础上,扩展了扩展了4 4种数据类型种数据类型(见表(见表3-13-1中最后中最后4 4行)。行)。注意,扩展的注意,扩展的4 4种数据类型,不能使用指针来对它们存取。种数据类型,不能使用指针来对它们存取。103.2.1C51语语言中的数据言中的数据类类型与存型与存储类储类型型10我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物第第3章章-C51语语言言编编程基程基础础ppt课课件件11我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物2 2C51C51的扩展数据类型的扩展数据类型 下面对扩展的下面对扩展的4 4种数据类型说明。种数据类型说明。(1 1)位变量位变量bitbit的值的值可以是可以是1 1(truetrue),也可是),也可是0 0(falsefalse)。)。(2 2)特殊功能寄存器特殊功能寄存器sfrsfr。80518051单片机的特殊功能寄存器分布在片内数据单片机的特殊功能寄存器分布在片内数据存储区的地址单元存储区的地址单元80H80HFFHFFH之间之间,“sfrsfr”数据类型数据类型占用一个内存单元。利占用一个内存单元。利用它可访问用它可访问80518051单片机内部的所有特殊功能寄存器。单片机内部的所有特殊功能寄存器。例如:例如:sfr P1=0 x90sfr P1=0 x90这一语句定义了这一语句定义了P1P1端口在片内的寄存器,在程序后续端口在片内的寄存器,在程序后续的语句中可以的语句中可以用用“P1=0 xffP1=0 xff”,使,使P1P1的所有引脚输出为高电平的语句来操作的所有引脚输出为高电平的语句来操作特殊功能寄存器。特殊功能寄存器。122C51的的扩扩展数据展数据类类型型12我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物(3 3)特殊功能寄存器)特殊功能寄存器sfr16sfr16。“sfr16sfr16”数据类型数据类型占用两个内存单元占用两个内存单元,用于操作占两个字节的特殊功能寄,用于操作占两个字节的特殊功能寄存器。存器。例如例如:“sfr16 DPTR=0 x82sfr16 DPTR=0 x82”语句定义了片内语句定义了片内1616位数据指针寄存器位数据指针寄存器DPTRDPTR,其低,其低8 8位字节地址为位字节地址为82H82H,高,高8 8位字节地址为位字节地址为83H83H。在程序的后续语句中。在程序的后续语句中就可对就可对DPTRDPTR进行操作。进行操作。(4 4)特殊功能位)特殊功能位sbitsbit。sbitsbit是指是指AT89S51AT89S51片内特殊功能寄存器的可寻址位。例如:片内特殊功能寄存器的可寻址位。例如:sfrsfrPSW=0 xd0PSW=0 xd0;/定义定义PSWPSW寄存器地址为寄存器地址为0 xd00 xd0sbitsbitOV=PSW2OV=PSW2;/定义定义OVOV位为位为PSW.2PSW.2 符号符号“”前是特殊功能寄存器名字,前是特殊功能寄存器名字,“”后的数字定义特殊功能寄存后的数字定义特殊功能寄存器可寻址位在寄存器中的位置,取值必须是器可寻址位在寄存器中的位置,取值必须是0 07 7。(3)特殊功能寄存器)特殊功能寄存器sfr16。13我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 注意,注意,不要把不要把bitbit与与sbitsbit相混淆相混淆。bitbit定义定义普通的位变量普通的位变量,只能是二进制,只能是二进制的的0 0或或1 1。sbitsbit是定义特殊功能寄存器的是定义特殊功能寄存器的可寻址位可寻址位,值是可以进行位寻址的特,值是可以进行位寻址的特殊功能寄存器的某位的绝对地址,殊功能寄存器的某位的绝对地址,例如,例如,PSWPSW寄存器寄存器OVOV位的绝对地址位的绝对地址0 xd20 xd2。上面的例子还涉及到上面的例子还涉及到C51注释的写法问题注释的写法问题,C51的注释写法有两种:的注释写法有两种:(1)/,两个斜杠后面跟着的为注释语句,本写法只能注释一行,当换,两个斜杠后面跟着的为注释语句,本写法只能注释一行,当换行时,必须在新行上重新写两个斜杠。行时,必须在新行上重新写两个斜杠。(2)/*/,一个斜杠与星号结合使用,本写法可注释任一行,即斜杠星,一个斜杠与星号结合使用,本写法可注释任一行,即斜杠星号与星号斜杠之间的所有文字都作为注释,即注释有多行时,只需在注释的号与星号斜杠之间的所有文字都作为注释,即注释有多行时,只需在注释的开始处,加斜杠星号,在注释的结尾处,加上星号斜杠即可。开始处,加斜杠星号,在注释的结尾处,加上星号斜杠即可。加注释的目的是为了便于读懂程序,所有注释都不参与程序编译,编译器加注释的目的是为了便于读懂程序,所有注释都不参与程序编译,编译器在编译过程中会自动删去注释。在编译过程中会自动删去注释。14注意,不要把注意,不要把bit与与sbit相混淆。相混淆。bit定定义义普通的位普通的位我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物3 3数据存储类型数据存储类型 在讨论在讨论C51C51数据类型时,须同时提及它的存储类型,以及它与数据类型时,须同时提及它的存储类型,以及它与80518051单单片机存储器结构的关系,因为片机存储器结构的关系,因为C51C51定义的任何数据类型定义的任何数据类型必须以一定的必须以一定的方式,定位在方式,定位在80518051单片机的某一存储区中,单片机的某一存储区中,否则没有任何实际意义。否则没有任何实际意义。3数据存数据存储类储类型型15我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 8051 8051有片内、片外数据存储区,还有程序存储区。有片内、片外数据存储区,还有程序存储区。片内的数据存储区是可读写的,片内的数据存储区是可读写的,80518051的衍生系列最多可有的衍生系列最多可有256256字节的内字节的内部数据存储区(例如部数据存储区(例如AT89S52AT89S52单片机),其中低单片机),其中低128128字节可直接寻址,高字节可直接寻址,高128128字节(字节(80H80HFFHFFH)只能间接寻址,从地址)只能间接寻址,从地址20H20H开始的开始的1616字节可位寻址。字节可位寻址。内部内部数据存储区可分为数据存储区可分为3 3个不同的数据存储类型:个不同的数据存储类型:datadata、idataidata和和bdatabdata。访问访问片外数据存储区片外数据存储区比访问比访问片内数据存储区片内数据存储区慢慢,因为访问片外数据存储,因为访问片外数据存储区要通过对数据指针加载地址来间接寻址访问。区要通过对数据指针加载地址来间接寻址访问。C51C51提供两种不同的数据存储类型提供两种不同的数据存储类型xdataxdata和和pdatapdata来访问片外数据存储区。来访问片外数据存储区。168051有片内、片外数据存有片内、片外数据存储储区,区,还还有程序存有程序存储储区。区。16我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物程序存储区程序存储区只能读不能写,可能在只能读不能写,可能在80518051单片机内部或者外部,或外部和内单片机内部或者外部,或外部和内部都有,由部都有,由80518051单片机硬件决定,单片机硬件决定,C51C51提供了提供了codecode存储类型来访问程序存储类型来访问程序存储区。存储区。C51C51存储类型与存储类型与80518051实际的存储空间的对应关系见实际的存储空间的对应关系见表表3-23-2。下面对表下面对表3-23-2各种存储区作以说明。各种存储区作以说明。(1 1)DATADATA区。区。寻址是最快的,应把常使用的变量放在该区,但该区存储寻址是最快的,应把常使用的变量放在该区,但该区存储空间有限,空间有限,DATADATA区除了包含程序变量外,还包含了堆栈和寄存器组。区除了包含程序变量外,还包含了堆栈和寄存器组。DATADATA区声明中的存储类型标识符为区声明中的存储类型标识符为datadata,通常指片内,通常指片内RAM128RAM128字节的内字节的内部数据存储的变量,可直接寻址。部数据存储的变量,可直接寻址。17程序存程序存储储区只能区只能读读不能写,可能在不能写,可能在8051单单片机内部或者外部,或片机内部或者外部,或我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物1818我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物声明举例:声明举例:unsigned charunsigned char data data system_status=0;system_status=0;unsigned int unsigned int datadata unit_id8;unit_id8;char char datadata inp_string20 inp_string20;标准变量和用户自声明变量都可存储在标准变量和用户自声明变量都可存储在DATADATA区中,只要不超过区中,只要不超过DATADATA区的区的范围即可,由于范围即可,由于C51C51用默认的寄存器组来传递参数,这样用默认的寄存器组来传递参数,这样DATADATA区至少失去区至少失去8 8字字节空间。节空间。另外,另外,当内部堆栈溢出当内部堆栈溢出的时候,程序会莫名其妙地复位。这是因为的时候,程序会莫名其妙地复位。这是因为80518051没有报错机制,堆栈溢出只能以这种方式表示,因此要留有较大的堆栈空间没有报错机制,堆栈溢出只能以这种方式表示,因此要留有较大的堆栈空间来防止堆栈溢出。来防止堆栈溢出。(2 2)BDATABDATA区。区。DATADATA中的位寻址区,在该区中声明变量就可进行位寻址。中的位寻址区,在该区中声明变量就可进行位寻址。BDATABDATA区声明中的存储类型标识符为区声明中的存储类型标识符为bdatabdata,指的是片内,指的是片内RAMRAM可位寻址的可位寻址的161619声明声明举举例:例:19我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物字节存储区(字节地址为字节存储区(字节地址为20H20H2FH2FH)中的)中的128128个位个位。下面是在。下面是在BDATABDATA区中声区中声明的位变量和使用位变量的例子:明的位变量和使用位变量的例子:unsigned char unsigned char bdatabdata status_byte;status_byte;unsigned int unsigned int bdatabdata status_word;status_word;sbitsbit stat_flag=status_byte4;stat_flag=status_byte4;if(status_word15)if(status_word15)stat_flag=1;stat_flag=1;C51 C51编译器不允许在编译器不允许在BDATABDATA区中声明区中声明floatfloat和和doubledouble型变量。型变量。(3 3)IDATAIDATA区区。该区使用寄存器作为指针来。该区使用寄存器作为指针来对片内对片内RAMRAM进行间接寻址进行间接寻址,常,常用来存放使用比较频繁的变量。与外部存储器寻址相比,它的指令执行周用来存放使用比较频繁的变量。与外部存储器寻址相比,它的指令执行周期和代码长度相对较短。期和代码长度相对较短。IDATAIDATA区区声明中的声明中的存储类型标识符存储类型标识符为为idataidata,指的是片内,指的是片内RAMRAM的的256256字节的字节的存储区,只能间接寻址,速度比直接寻址慢。存储区,只能间接寻址,速度比直接寻址慢。20字字节节存存储储区(字区(字节节地址地址为为20H2FH)中的)中的128个位。下面是个位。下面是我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物声明举例如下:声明举例如下:unsigned char unsigned char idataidata system_status=0;system_status=0;unsigned int unsigned int idataidata unit_id8;unit_id8;char char idataidata inp_string16 inp_string16;float float idataidata out_value;out_value;(4 4)PDATAPDATA区区和和XDATAXDATA区区 位于片外存储区,位于片外存储区,PDATAPDATA区区和和XDATAXDATA区区声明中的声明中的存储类型标识符存储类型标识符分别为分别为pdatapdata和和xdataxdata。PDATAPDATA区区只有只有256256字节,仅指定字节,仅指定256256字节的外部数据存储区字节的外部数据存储区。但但XDATAXDATA区区最多可达最多可达64KB64KB,对应的,对应的xdataxdata存储类型标识符可指定存储类型标识符可指定外部数外部数据区据区64KB64KB内内的任何地址。的任何地址。21声明声明举举例如下:例如下:21我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 对对PDATAPDATA区区的寻址要比对的寻址要比对XDATAXDATA区区寻址快寻址快,因为对,因为对PDATAPDATA区寻址,只需装入区寻址,只需装入8 8位地址,而对位地址,而对XDATAXDATA区寻址要装入区寻址要装入1616位地址,所以尽量把外部数据存储在位地址,所以尽量把外部数据存储在PDATAPDATA区中。区中。对对PDATAPDATA区和区和XDATAXDATA区的声明举例如下:区的声明举例如下:unsigned char unsigned char xdataxdata system_status=0;system_status=0;unsigned int unsigned int pdatapdata unit_id8;unit_id8;char char xdataxdata inp_string16 inp_string16;float float pdatapdata out_value;out_value;由于外部数据存储器与外部由于外部数据存储器与外部I/OI/O口是统一编址的,外部数据存储器地址段口是统一编址的,外部数据存储器地址段中除了包含数据存储器地址外,还包含外部中除了包含数据存储器地址外,还包含外部I/OI/O口的地址。对外部数据存储口的地址。对外部数据存储器及外部器及外部I/OI/O口的寻址将在本章的绝对地址寻址中介绍。口的寻址将在本章的绝对地址寻址中介绍。22对对PDATA 区的区的寻寻址要比址要比对对XDATA 区区寻寻址快,因址快,因为对为对P我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物(5 5)程序存储区)程序存储区CODECODE。程序存储区。程序存储区CODECODE声明的标识符为声明的标识符为codecode,储存的数据是,储存的数据是不可改变的。在不可改变的。在C51C51编译器中可以用存储区类型标识符编译器中可以用存储区类型标识符codecode来访问程序存储区。来访问程序存储区。声明举例如下:声明举例如下:unsigned char unsigned char codecode a=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,a=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08;0 x07,0 x08;上面介绍了上面介绍了C51C51的数据存储类型,其大小和值域见的数据存储类型,其大小和值域见表表3-33-3。单片机访问片内单片机访问片内RAMRAM比访问片外比访问片外RAMRAM相对快一些,所以相对快一些,所以应尽量把频繁使用的应尽量把频繁使用的变量置于片内变量置于片内RAMRAM。即采用。即采用datadata、bdatabdata或或idataidata存储类型,而将容量较大或使存储类型,而将容量较大或使用不太频繁的那些变量置于片外用不太频繁的那些变量置于片外RAMRAM,即采用,即采用pdatapdata或或xdataxdata存储类型。常量只存储类型。常量只能采用能采用codecode存储类型。存储类型。23(5)程序存)程序存储储区区CODE。程序存。程序存储储区区CODE声明的声明的标识标识符符为为c我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物2424我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物变量存储类型定义举例:变量存储类型定义举例:(1 1)char char data data a1;a1;/*/*字符变量字符变量a1a1被定义为被定义为datadata型,分配在型,分配在片内片内RAMRAM低低128128字节中字节中*/*/(2 2)float float idataidata x,y;x,y;/*/*浮点变量浮点变量x x和和y y被定义为被定义为idataidata型,定位在型,定位在 片内片内RAMRAM中,只能用间接寻址方式寻址中,只能用间接寻址方式寻址*/*/(3 3)bit bit bdatabdata p;p;/*/*位变量位变量p p被定义为被定义为bdatabdata型,定位在片内型,定位在片内 RAM RAM中的位寻址区中的位寻址区*/*/(4 4)unsigned int unsigned int pdatapdata var1;var1;/*/*无符号整型变量无符号整型变量var1var1定义为定义为pdatapdata型型 ,定位在片外,定位在片外RAMRAM中,相当于中,相当于RiRi间接寻址间接寻址*/*/(5 5)unsigned char unsigned char xdataxdata a2 4;a2 4;/*/*无符号字符型二维数组变量无符号字符型二维数组变量 a24 a24 被定义为被定义为xdataxdata存储类型,定位在片外存储类型,定位在片外RAMRAM中,占据中,占据 2 24=84=8字节,相当于字节,相当于DPTRDPTR间接寻址间接寻址*/*/4 4数据存储模式数据存储模式 如果在变量定义时如果在变量定义时略去存储类型标识符略去存储类型标识符,编译器会,编译器会自动默认自动默认存储类型。存储类型。25变变量存量存储类储类型定型定义举义举例:例:25我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物进一步由进一步由SMALLSMALL、COMPACTCOMPACT和和LARGELARGE存储模式指令限制。存储模式指令限制。例如,例如,若声明若声明char char var1var1,则在使用,则在使用SMALLSMALL存储模式存储模式下,下,var1var1被定位在被定位在datadata存储区存储区,在使用,在使用COMPACTCOMPACT模式模式下,下,var1var1被定位在被定位在idataidata存储区存储区;在;在LARGELARGE模式模式下,下,var1var1被定位被定位在在xdataxdata存储区存储区中。中。下面对存储模式作进一步说明。下面对存储模式作进一步说明。(1 1)SMALLSMALL模式模式。该模式下,。该模式下,所有变量所有变量都默认位于都默认位于80518051单片机单片机内部的数据存内部的数据存储器储器,与使用,与使用datadata指定存储器类型的方式一样。在此模式下,变量访问的指定存储器类型的方式一样。在此模式下,变量访问的效率高,但是所有数据对象和堆栈效率高,但是所有数据对象和堆栈必须使用内部必须使用内部RAMRAM。(2 2)COMPACTCOMPACT模式模式 本模式下本模式下所有变量所有变量都默认在都默认在外部数据存储器外部数据存储器的的1 1页页(256256字节)内,这与字节)内,这与26进进一步由一步由SMALL、COMPACT和和LARGE存存储储模式指令限模式指令限我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物使用使用pdatapdata指定存储器类型是一样的。指定存储器类型是一样的。该类型适用于变量不超过该类型适用于变量不超过256256字节的情字节的情况况,此限制是由寻址方式决定的,相当于使用,此限制是由寻址方式决定的,相当于使用数据指针数据指针RiRi寻址。与寻址。与SMALLSMALL模模式相比,式相比,该存储模式的效率比较低该存储模式的效率比较低,对变量访问的速度也慢一些,但比,对变量访问的速度也慢一些,但比LARGELARGE模式快。模式快。(3 3)LARGELARGE模式模式 本模式下本模式下所有变量所有变量都都默认位于默认位于外部数据存储器外部数据存储器,相当于用,相当于用DPTRDPTR寻址寻址。通。通过数据指针访问外部数据存储器的效率较低,特别是当变量为过数据指针访问外部数据存储器的效率较低,特别是当变量为2 2字节或更多字节或更多字节时,该模式要比字节时,该模式要比SMALLSMALL和和COMPACTCOMPACT产生更多的代码。产生更多的代码。27使用使用pdata指定存指定存储储器器类类型是一型是一样样的。的。该类该类型适用于型适用于变变量不超量不超过过我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 在固定的存储器地址上进行变量传递,是在固定的存储器地址上进行变量传递,是C51C51的标准特征之一。的标准特征之一。在在SMALLSMALL模式下,参数传递是在片内数据存储区中完成的。模式下,参数传递是在片内数据存储区中完成的。LARGELARGE和和COMPACTCOMPACT模式允许参数在外部存储器中传递。模式允许参数在外部存储器中传递。C51C51也支持混合模式。例如,在也支持混合模式。例如,在LARGELARGE模式下,生成的程序可将一些函数放入模式下,生成的程序可将一些函数放入SMALLSMALL模式中,从而加快执行速模式中,从而加快执行速度。度。3.2.2 C513.2.2 C51语言的特殊功能寄存器及位变量定义语言的特殊功能寄存器及位变量定义 介绍介绍C51C51如何对特殊功能寄存器及位变量进行定义并访问。如何对特殊功能寄存器及位变量进行定义并访问。1 1特殊功能寄存器的特殊功能寄存器的C51C51定义定义 C51 C51语言允许通过使用语言允许通过使用关键字关键字sfrsfr、sbitsbit或直接引用编译器提供的头文件或直接引用编译器提供的头文件来对特殊功能寄存器(来对特殊功能寄存器(SFRSFR)进行访问,)进行访问,在固定的存在固定的存储储器地址上器地址上进进行行变变量量传递传递,是,是C51的的标标准特征之准特征之28我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物 特殊功能寄存器分布在片内特殊功能寄存器分布在片内RAMRAM高高128128字节中,只能采用直接寻址方式。字节中,只能采用直接寻址方式。(1 1)使用关键字定义使用关键字定义sfrsfr。为能直接访问特殊功能寄存器。为能直接访问特殊功能寄存器SFRSFR,C51C51提供了一提供了一种定义方法,即引入关键字种定义方法,即引入关键字sfrsfr,语法如下:,语法如下:sfrsfr 特殊功能寄存器名字特殊功能寄存器名字=特殊功能寄存器地址;特殊功能寄存器地址;例如:例如:sfr IE=0 xA8;sfr IE=0 xA8;/中断允许寄存器中断允许寄存器IEIE地址地址A8HA8H sfr TCON=0 x88;sfr TCON=0 x88;/定时器定时器/计数器控制寄存器地址计数器控制寄存器地址88H88H sfr SCON=0 x98;sfr SCON=0 x98;/串行口控制寄存器地址串行口控制寄存器地址98H98H在在80518051中,中,要访问要访问1616位位SFRSFR,要用关键字要用关键字sfr16sfr16。1616位位SFRSFR的低字节地址须作为的低字节地址须作为“sfr16sfr16”的定义地址,例如:的定义地址,例如:29特殊功能寄存器分布在片内特殊功能寄存器分布在片内RAM高高128字字节节中,只能采用中,只能采用我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物sfr16 DPTR=0 x82sfr16 DPTR=0 x82/DPTR/DPTR 的低的低8 8位地址为位地址为82H82H,高,高8 8位地址为位地址为83H83H(2 2)通过头文件访问)通过头文件访问SFRSFR。各种各种衍生型衍生型的的80518051单片机的特殊功能寄存器单片机的特殊功能寄存器的数量与类型有时是不相同的,对其访问可通过头文件访问来进行。的数量与类型有时是不相同的,对其访问可通过头文件访问来进行。为用户处理方便,为用户处理方便,C51C51把把80518051(或(或80528052单片机)常用的特殊功能寄存器和单片机)常用的特殊功能寄存器和其中的可寻址位进行了定义,放在一个其中的可寻址位进行了定义,放在一个reg51.hreg51.h(或或reg52.hreg52.h)的头文)的头文件中。件中。当用户要使用时,只需在使用之前用一条当用户要使用时,只需在使用之前用一条预处理命令预处理命令#include#include把这个把这个头文件包含到程序中头文件包含到程序中,就可使用特殊功能寄存器名和其中的可,就可使用特殊功能寄存器名和其中的可寻址位名称了。用户可对头文件进行增减。寻址位名称了。用户可对头文件进行增减。30sfr16DPTR=0 x82/DPTR的低的低8位地位地我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物头文件引用举例如下:头文件引用举例如下:#include#include/包含包含80518051单片机的头文件单片机的头文件void main(void)void main(void)TL0=0 xf0;TL0=0 xf0;/给给T0T0低字节低字节TL0TL0设置时间常数,已在设置时间常数,已在reg51.hreg51.h中定义中定义 TH0=0 x3f;TH0=0 x3f;/给给T0T0高字节高字节TH0TH0设置时间常数,已在设置时间常数,已在reg51.hreg51.h中定义中定义 TR0=1;TR0=1;/启动定时器启动定时器0 0(3 3)特殊功能寄存器中的位定义)特殊功能寄存器中的位定义。对。对SFRSFR中的可寻址位的访问,要使用关中的可寻址位的访问,要使用关键字来定义可寻址位,共键字来定义可寻址位,共3 3种方法种方法。头头文件引用文件引用举举例如下:例如下:31我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物sbit位名位名=特殊功能寄存器特殊功能寄存器位置;位置;例如:例如:sfr PSW=0 xd0sfr PSW=0 xd0;/定义定义PSW PSW 寄存器的字节地址寄存器的字节地址0 xd00 xd0sbit CY=PSW7sbit CY=PSW7;/定义定义CYCY位为位为PSW.7PSW.7,地址为,地址为0 xd00 xd0sbit OV=PSW2sbit OV=PSW2;/定义定义OVOV位为位为PSW.2PSW.2,地址为,地址为0 xd20 xd2sbit位名位名=字节地址字节地址位置;位置;例如:例如:sbit CY=0 xd07sbit CY=0 xd07;/CY/CY位地址为位地址为0 xd70 xd7sbit OV=0 xd02sbit OV=0 xd02;/OV/OV位地址为位地址为0 xd20 xd2sbit位名位名=位地址位地址;将位的绝对地址赋给变量,位地址必须在将位的绝对地址赋给变量,位地址必须在0 x800 xff。例如:例如:sbit CY=0 xd7sbit CY=0 xd7;/CY/CY位地址为位地址为0 xd70 xd7sbit OV=0 xd2sbit OV=0 xd2;/OV/OV位地址为位地址为0 xd20 xd232sbit位名位名=特殊功能寄
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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