C51的存储结构市公开课一等奖省赛课获奖课件_第1页
C51的存储结构市公开课一等奖省赛课获奖课件_第2页
C51的存储结构市公开课一等奖省赛课获奖课件_第3页
C51的存储结构市公开课一等奖省赛课获奖课件_第4页
C51的存储结构市公开课一等奖省赛课获奖课件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第15章C51存放结构C51是面向51系列单片机硬件控制系统开发语言,其和单片机硬件资源有着亲密联络。C51程序经过编译后,是要在单片机上运行。所以,程序代码以及数据都是需要按照一定存放类型保留在8051单片机特定存放区中。存放结构组织形式是单片机C51语言很主要组成部分。本章将介绍C51存放结构、存放类型和动态内存分配函数等相关内容。C51的存储结构第1页15.1存放器结构存放器结构是存放器组织形式。51系列单片机采取哈佛结构,将程序代码存放器(ROM)和数据存放器(RAM)分开,各自遵照各自寻址机构和寻址方式。这里概括一下51系列单片机存放器硬件组成。C51的存储结构第2页15.1.151系列单片机存放区域51系列及其兼容单片机在物理上划分为4个存放区:片内数据存放区片外数据存放区片内程序存放区片外程序存放区早期单片机片内存放器比较小,最近新推出51内核单片机在存放器方面有了很大扩展。每个存放区大小和使用方法,能够参阅不一样型号单片机说明。C51的存储结构第3页15.1.2片内数据存放器(RAM)结构C51程序中变量普通保留在片内数据存放器,这么取址速度快。当然变量也能够保留在片外数据存放区,这将在后面进行介绍。51系列单片机内部数据存放器(RAM)可划分为2大区域。00H~7FH:片内低128字节RAM区80H~0FFH:特殊功效存放器区(SFR)对于地址为00H~07FH低128字节片内RAM区,又可划分为3个区域:1.通用存放器区2.可位寻址区3.用户RAM区C51的存储结构第4页15.2存放类型存放类型是指程序中变量和常量等在8051硬件系统中存放方式。KeilμVision3编译器完全支持8051系列单片机硬件结构,可完全访问8051单片机硬件系统全部部分,并将数据定位在不一样硬件存放区中。单片机C51语言中支持存放类型有data、bdata、idata、pdata、xdata、code几个。在8051系列单片机硬件系统中,存放类型与存放区关系,如表所表示。C51的存储结构第5页15.2.1data存放类型将变量设置为data存放类型普通形式以下:标识符data变量名其中,data为关键字,标识符为变量类型。在51单片机系统中,对data区寻址是最快。所以普通来说,应将频繁使用变量设置为data型。比如:int datach[5];char datastring[6];float dataflo;MyType datanewtype; //自定义数据类型C51的存储结构第6页15.2.2bdata存放类型将变量设置为bdata存放类型普通形式以下:标识符bdata变量名其中,bdata为关键字,标识符为变量类型。bdata区是可位寻址数据存放器,能够将要求可位寻址数据定义为bdata。比如:unsignedchar bdataie; //在位寻址区定义字符变量ieint bdatamn[10]; //在位寻址区定义整型数组mn[10]sbit ie5=ie^5; //用关键字sbit定义位变量来可寻址对象其中一位sbit mn8=mn[1]^8;C51的存储结构第7页15.2.3idata存放类型将变量设置为idata存放类型普通形式以下:标识符idata变量名其中,idata为关键字,标识符为变量类型。idata类型为间接寻址片内数据存放区,可访问片内全部256字节RAM地址空间。比如:externfloat idatatt; //在位寻址区定义浮点型变量tt注意:idata区能够定义浮点型变量。C51的存储结构第8页15.2.4pdata存放类型将变量设置为pdata存放类型普通形式以下:标识符pdata变量名其中,pdata为关键字,标识符为变量类型。pdata类型存放在分页寻址外部数据存放区,比如:unsignedchar pdatapun; //在位寻址区定义字符变量punC51的存储结构第9页15.2.5xdata存放类型将变量设置为xdata存放类型普通形式以下:标识符xdata变量名其中,xdata为关键字,标识符为变量类型。对xdata区寻址,须装入16位地址,所以尽可能将外部数据存放在xdata区。比如:#include<stdio.h> //头文件#include<reg51.h> //头文件unsignedcharpdataRX1; //申明xdata变量unsignedcharpdataRX2; //申明xdata变量

voidmain() //主函数{while(1){RX1=P1; //赋值RX2=P3; //赋值}}C51的存储结构第10页15.2.6code存放类型将变量设置为code存放类型普通形式以下:标识符code变量名其中,code为关键字,标识符为变量类型。比如:charcodetext[]=”Helloeveryone!”; //在code区定义字符串数组使用code存放类型定义数据时,C51编译器会将其定义在程序代码储存器(ROM或者EPPROM)。在使用上面几个存放类型时,因为访问内部数据存放器比访问外部数据存放器快,所以应将频繁使用变量放在内部RAM中,将极少使用变量放在外部RAM中。C51的存储结构第11页15.3扩展数据类型扩展数据类型是8051硬件和C51编译器所特有,不属于ANSIC标准。这些类型数据能够操作8051特殊功效存放器,而不能用指针对其进行存取。扩展数据类型可由以下几个关键字说明。sfr:用于字节寻址,定义8位特殊功效存放器。比如:sfrP0=0x80; //为P0口地址为80H后一个字节;sfrP1=0x90; //为P1口地址为90H后一个字节。sfr16:用于字寻址,定义16位特殊功效存放器,且该16位必须低位在低字节,高位在紧跟德高字节才行。比如:sfr16T2=0xCC;C51的存储结构第12页15.3.1sfr和sfr16sfr和sfr16能够用于定义8051特殊功能存放器,其一般形式如下:sfr 特殊功能存放器名=特殊功能存放器地址常数;sfr16 特殊功能存放器名=特殊功能存放器地址常数;其中,sfr和sfr16为关键字。特殊功能存放器定义示比如下:sfr P2=0xA0; //定义P2I/O端口,其地址为A0Hsfr16 T2=0xCC; //定义定时器2,其地址T2L=CCH,T2H=CDHC51的存储结构第13页15.3.2sbitsbit用于定义可位寻址对象,比如特殊功效存放器某位。在C51语言中,有以下几个定义方法:sbit位变量名=位地址。该语句用于将位地址赋值给位变量名,比如:sbitP1_1=0x91; //将位绝对地址赋给位变量这里需要注意是,sbit位地址必须位于80H~FFH之内。sbit位变量名=特殊功效存放器名^位位置。该语句使用符号“^”来取得位数据,并赋值给位变量。比如:sfrP1=0x90; //定义一个特殊功效存放器名sbitP1_1=P1^1; //指定位变量名所在位置sbit位变量名=字节地址^位位置。该语句和第二种方法是一样,只是将特殊功效存放器名用位地址常数直接表示。比如:sbitP1_1=0x90^1; C51的存储结构第14页15.3.3bit型变量bit型变量可用于变量类型、函数申明、函数返回值等场所,其定义普通形式为:bit变量名采取bit定义位变量存放于内部RAM(20H~2FH)。位变量在C语言里是外部变量,但编译系统不对其初始化,必须在程序中初始化位变量。比如:externbitbch;C51的存储结构第15页15.4存放模式存放模式是编译环境中指定变量存放区形式。普通来说,假如在定义变量时默认存放类型,编译系统将按照存放模式所要求默认存放区来指定变量、函数参数等存放区域。KeilμVision编译系统支持8051系列单片机存放模式共三种:C51的存储结构第16页15.4.1Small模式Small模式用于将全部未指明存放区变量均装保留在内部RAM,即采取data存放类型方式。采取Small模式优点是访问速度快,缺点是空间有限,需要节约使用存放空间,只适合用于规模较小程序。C51的存储结构第17页15.4.2Compact模式Compact模式用于将全部未指明存放区变量均装保留在外部RAM区一页(256Bytes)内,即采取pdata存放类型方式。采取Compact模式优点是存放空间较Small模式宽裕,缺点是访问速度要慢些,但较下面介绍Large模式要快,是一个中间状态。Compact模式适合用于变量不超出256字节,能够经过P2口指定地址高字节。C51的存储结构第18页15.4.3Large模式Large模式用于将全部未指明存放区变量放在多达64KB外部RAM区中,即采取xdata存放类型方式。采取Large模式优点是空间大,可存变量多,缺点是速度较慢。Large模式使用数据指针DPTR来对变量进行寻址。C51的存储结构第19页15.4.4存放模式选择存放模式普通是在C51编译器选项中进行选择,也能够在程序中指定。在程序中指定存放模式形式以下:voidfun1(void)small{}该语句申明函数fun1,用small说明函数内部变量全部保留在内部RAM。对于一些经常使用和尤其耗时地方能够这么申明,有利于提升运行速度。C51的存储结构第20页15.5C51存放器指针在C51语言中支持普通指针和存放器指针。对变量进行申明时能够指定变量存放类型。一样,在对于指针变量申明时候,也能够指定存放类型。下面分别进行介绍。C51的存储结构第21页15.5.1普通指针普通指针申明在前面已经介绍过,不过同时还能够说明指针存放类型。比如:long*state; //state为指向long型整数指针,则依存放模式存放char*xdataptr; //ptr为一个指向char数据指针,放于外部RAM区普通指针可存放于任何存放器中,其用3个字节存放,分别为存放器类型、高位偏移、低位偏移量。使用普通指针时,能够访问数据而不用考虑其在存放器位置,所以十分方便。C51的存储结构第22页15.5.2存放器指针存放器指针在申明时指定了存放类型,其总是指向特定存放区。比如:chardata*str; //str指向data区中char型数据int xdata*pow; //pow指向外部RAMint型整数因为存放器类型已经指定了,所以这种指针存放时,只需存放偏移量即可。对于idata、data、bdata和pdata存放类型只需一个字节,对于code和xdata存放类型需要2个字节就够了。C51的存储结构第23页15.5.3指针存放类型与指针所指向数据存放类型关系指针存放类型与指针所指向数据存放类型是不一样概念,在使用时一定要注意。比如:ucharxdatatmp[10]; //在外RAM区占10个字节内存空间(0x0000~0x0009)uchardata*datapstr;pstr=tmp;其中tmp保留在外部RAM,访问外RAM需要2字节来寻址64k空间,而pstr使用data关键字,所以编译器将其编译成指向内部RAM指针变量了。最终赋值语句便是错误。上面语句能够改为:ucharxdatatmp[10]; ucharxdata*datapstr;pstr=tmp;C51的存储结构第24页15.6动态内存分配动态内存分配用于对一些动态结构进行存放空间分配。其中这些动态结构能够是树和链表等。对于大多数情况,应尽可能在编译时候确定所需要内存空间,并进行分配,比如数组大小需要明确指定。而对于一些程序,采取动态内存分配能够实现数据灵活处理。C51的存储结构第25页15.6.1C51动态分配函数在C51语言中提供了多个动态内存分配函数。这些函数要求用户声明一个字节数组作为堆,根据所需要动态内存大小来决定数组长度,被声明数组存放在xdata区中,库函数能够使用特定指针来进行寻址。C51提供动态分配函数示比如下所述。init_mem():此函数功能是初始化动态内存区程序源代码。能够指定动态内存位置及大小,只有使用了init_mem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论