第7章c51的存储结构讲义

上传人:今*** 文档编号:107047964 上传时间:2019-10-17 格式:PPT 页数:27 大小:731KB
返回 下载 相关 举报
第7章c51的存储结构讲义_第1页
第1页 / 共27页
第7章c51的存储结构讲义_第2页
第2页 / 共27页
第7章c51的存储结构讲义_第3页
第3页 / 共27页
第7章c51的存储结构讲义_第4页
第4页 / 共27页
第7章c51的存储结构讲义_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《第7章c51的存储结构讲义》由会员分享,可在线阅读,更多相关《第7章c51的存储结构讲义(27页珍藏版)》请在金锄头文库上搜索。

1、第7章 C51的存储结构,7.1 单片机的存储器结构,单片机的存储器结构是指单片机内部存储器的硬件组织形式。不同型号单片机的存储器结构会有所不同,但是原理是相似的。本章以最常用的51系列单片机为例,介绍其存储器结构。 51系列单片机将程序代码存储器(ROM)和数据存储器(RAM)分开,各部分遵循各自的寻址机构和寻址方式。,7.1.1 51系列单片机的存储区域,51系列单片机的存储器被划分成几个不同的区域。为了C51的程序运行时,可以方便地调取数据和程序代码,C51的程序中的数据和程序代码,被分类存放在单片机的不同存储区域内。51系列单片机及其兼容的单片机在物理上,可划分为以下4个不同的存储区:

2、 片内数据存储区(片内RAM) 片外数据存储区(片外RAM) 片内程序存储区(片内ROM) 片外程序存储区(片外ROM),7.1.2 片内RAM的存储器结构,片内RAM是指单片机的片内数据存储区。C51程序中的变量一般保存在片内RAM中,因为该存储区的取址速度较快,便于及时调用数据。51系列单片机的片内数据存储区(片内RAM)可以划分为2大区域。 片内低128字节RAM区:地址范围为00H7FH。该区域主要采用直接字节地址寻址方式,用来存储数据,也可存放堆栈和寄存器。 特殊功能寄存器区(SFR):地址范围为80H0FFH。该区域可位寻址、字节寻址或字寻址,用以控制定时器、计数器、串口、I/O以

3、及其他一些硬件资源。,7.1.2 片内RAM的存储器结构,地址范围为00H07FH的低128字节片内RAM区,又可进一步划分为如下所示的3个区域。 通用寄存器区。地址范围为00H1FH,共由如下所示的4个寄存器组构成。 第0组寄存器:地址范围为00H07H。 第1组寄存器:地址范围为08H0FH。 第2组寄存器:地址范围为10H17H。 第3组寄存器:地址范围为18H1FH。,7.2 C51的存储类型,单片机C51语言中支持code、bdata、idata、pdata、xdata和data型6种不同的存储类型。不同的存储类型对应于不同的存储区域和寻址方式。8051系列单片机的硬件系统中数据的存

4、储类型与对应的存储区的关系。,7.2.1 code存储类型,使用code存储类型定义数据时,编译器会将其定义在程序代码储存器(ROM或者EPPROM)中。该code存储区使用16位寻址,寻址空间可达64KB。一般用来存放可执行的代码段,也可以存放数据。将变量设置为code存储类型的一般形式如下: 标识符 code 变量名 其中,标识符为变量的类型,code为关键字,表示存储类型为code。例如: char code string=”Good Morning”; /在code区定义存储字符串数组,7.2.2 data存储类型,data区是8051单片机128字节的片内RAM(或者8052单片机的

5、前128字节)。该区采用直接可寻址,访问速度较快,因此将使用频率大的变量和局部变量储存在data区。将变量设置为data存储类型的一般形式如下: 标识符 data 变量名 其中,标识符为变量的类型,data为关键字,表示存储类型为data。,7.2.3 bdata存储类型,bdata区是可位寻址数据存储器,可以将要求可位寻址的数据定义为bdata。该区中可以声明变量和位变量。将变量设置为bdata存储类型的一般形式如下: 标识符 bdata 变量名 其中,标识符为变量的类型,bdata为关键字,表示存储类型为bdata。,7.2.4 idata存储类型,8051系列的一些单片机包含附加的128

6、字节的片内RAM区,位于地址开始于80H的存储空间中,该存储区称为idata区。将变量设置为idata存储类型的一般形式如下: 标识符 idata 变量名 其中,标识符为变量的类型,idata为关键字,表示存储类型为idata。,7.2.5 pdata存储类型,pdata类型存储在分页寻址的外部数据存储区的一页内,共256字节。将变量设置为pdata存储类型的一般形式如下: 标识符 pdata 变量名 其中,标识符为变量的类型,pdata为关键字,表示存储类型为pdata。,7.2.6 xdata存储类型,xdata区为可寻址的片外数据存储区,大小可达64KB,共65536字节单元。对xdat

7、a区寻址,须装入16位地址,因此尽量将外部数据存放在xdata区。将变量设置为xdata存储类型的一般形式如下: 标识符 xdata 变量名 其中,标识符为变量的类型,xdata为关键字,表示存储类型为xdata。,7.3 C51的扩展数据类型,扩展数据类型不属于ANSI C标准数据类型,是8051单片机和C51编译器所特有的数据类型。这些类型的数据可以对8051的特殊功能寄存器进行操作,但是不能用指针对其进行存取。,7.3.1 sfr和sfr16型变量,sfr和sfr16主要用于定义8051的特殊功能寄存器。其中sfr用来定义8位特殊功能寄存器,sfr16用来定义16位特殊功能寄存器。其一般

8、形式为下: sfr 特殊功能寄存器名=特殊功能寄存器地址常数; Sfr16 特殊功能寄存器名=特殊功能寄存器地址常数; 其中,sfr和sfr16为关键字。特殊功能寄存器的定义示例如下: sfr P2=0xA0; /定义P2的I/O端口,其地址为A0H sfr P1=0x90; /定义P1的I/O端口,其地址为90H Sfr16 T2=0xCC;/定义定时器/计数器2,其地址T2L=CCH,T2H=CDH,7.3.2 sbit型变量,sbit用于定义可位寻址对象,用于位寻址,从位寻址字节中定义位变量。例如,定义特殊功能寄存器某位为位变量。在C51语言中,有3种方式定义位变量: sbit 位变量名

9、=位地址。 sbit 位变量名=特殊功能寄存器名位的位置。 sbit 位变量名=字节地址位的位置。 该语句和第二种方法是一样的,只是将特殊功能寄存器名用位地址常数直接表示。,7.3.3 bit型变量,bit型变量即位变量,可用于变量类型、函数声明、函数返回值等场合。位变量在C语言里是外部变量,但编译系统不对其进行初始化,因此必须在程序中初始化位变量。其定义的一般形式为: bit 变量名 采用bit定义的位变量将存放于内部RAM(20H2FH)。bit型变量的定义,示例如下: extern bit ch; /定义外部bit型位变量ch bit flag; flag=1;,7.3.4 51单片机寄

10、存器的定义,头文件“reg51.h”中定义了51单片机常用的特殊功能寄存器。如果需要使用单片机的硬件资源,必须在C51源程序的开始处包含这个文件。该头文件中对寄存器用以上介绍的sfr和sbit扩展数据类型进行了定义。,7.4 C51变量的存储模式,存储模式是指编译环境中默认的变量的存储类型。一般来说,如果在定义变量时缺省存储类型,编译系统将按照存储模式所规定的默认存储区来指定变量、函数参数等的存储区域。 Keil Vision3编译系统支持的8051系列单片机存储模式有Small模式、Compact模式和Large模式3种。,7.4 C51变量的存储模式,存储模式一般是在C51编译器选项中进行

11、选择,也可以在程序中指定。在Keil Vision3编译系统中存储器模式的选择,如图所示,在“Memory Model”的下拉列表用来从中选择默认的存储模式。,7.4.1 Small模式,Small模式用于将所有未指明存储区的变量均保存在单片机内部数据存储器,即片内RAM中。该模式与采用data存储类型方式相同。采用Small模式的优点是访问速度快、效率高;缺点是由于片内RAM存储空间有限,需要节约使用存储空间,因此Small模式只适用于规模较小的程序。 由于内部数据存储器也可以存放堆栈,但是所有存放的数据和堆栈的大小都必须适合。尤其是堆栈,堆栈空间的大小是由函数的嵌套深度所决定的。通常如果连

12、接/定位器将变量都设置在片内RAM中时,采用Small模式是最适合的。,7.4.2 Compact模式,Compact模式用于将所有未指明存储区的变量均保存在单片机外部数据存储器一页中,即片外RAM的256字节内。该模式与采用pdata存储类型方式相同。采用Compact模式的优点是存储空间较Small模式宽裕,缺点是访问速度要慢些,但相对于Large模式访问速度要快,是一种介于两种模式之间的中间状态。 Compact模式适用于变量不超过256字节,此限制是由其寻址方式所决定的。可以通过P2口指定地址的高字节,编译器没有对该口进行设置。,7.4.3 Large模式,Large模式用于将所有未指

13、明存储区的变量存放在单片机外部数据存储器中,即空间多达64KB的外部RAM区内。该模式与采用xdata存储类型方式相同。采用Large模式的优点是空间大,可存变量多,缺点是访问速度较慢。 Large模式使用数据指针DPTR来对变量进行寻址。通过数据指针访问外部数据存储器的效率较低。当数据的大小为2字节或更多字节时,采用Large模式进行数据访问,将会产生比Small模式和Compact模式更多的代码。,7.5 C51的存储器指针,在C51语言中可以定义一般指针和存储器指针。对变量进行声明时可以指定变量的存储类型,在对于指针变量声明的时候,也同样可以指定其存储类型。,7.5.1 一般指针,关于一

14、般指针的定义,在第五章数据结构已经作过详细的介绍。例如: char *pc; long * pl; 一般指针可存放于任何存储器中,一般用3个字节进行存放。第一个字节为存储器类型,第二个字节为偏移量的高位,第三个字节为偏移量的低位。使用一般指针可以访问存放在存储器任何位置的数据而不用考虑其存储器类型,因此使用十分方便。,7.5.2 存储器指针,存储器指针是指在声明指针时明确指定其存储类型,即声明该指针指向特定的存储区的变量类型。 1存储器指针声明 在定义一般指针的同时说明指针的存储类型。其一般形式如下: 标识符 关键字 *指针变量名,7.5.2 存储器指针,2指针存储类型与指针所指向的数据的存储

15、类型 在使用存储器指针时,要注意指针存储类型与指针所指向的数据的存储类型是两个不同的概念。例如: uchar xdata t10; uchar data *pt; pt=t; /赋值语句是错误的 上面的语句可以改为: uchar xdata t10; uchar xdata *data pt; pt = t;,7.6 小结,本章详细介绍了单片机的存储器结构、变量的存储类型、变量的存储模式以及C51的存储器指针等知识点。 数据的存储结构是单片机系统所特有的概念,这部分的内容涉及单片机的硬件资源知识较多,在学习该部分时,可以对照着各型号单片机的具体说明来进行参考,这样可以加深对本部分内容的理解和掌握。 熟练掌握存储结构的相关知识,对数据存储的情况清楚明了,可以防止发生存储错误或数据溢出,并且还可以提高访问数据的效率,加快程序运行的速度,这一点在大型较复杂程序中显得尤为重要。,

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

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号