版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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以及其他一些硬件资源。7.1
3、.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、储区和访问方式code程序代码存储区(64KB)data直接寻址片内数据存储区,访问速度快(128字节)bdata可位寻址片内数据存储区,允许位与字节混合访问(16字节)idata间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节)pdata分页寻址外部数据存储区(256字节)xdata可寻址片外数据存储区(64KB)7.2.1 code存储类型使用code存储类型定义数据时,编译器会将其定义在程序代码储存器(ROM或者EPPROM)中。该code存储区使用16位寻址,寻址空间可达64KB。一般用来存放可执行的代码段,也可以存放数据。将变量设置为code存储类型的一般形式如下:
5、标识符 code 变量名其中,标识符为变量的类型,code为关键字,表示存储类型为code。例如:char code string=”Good Morning”; /在code区定义存储字符串数组7.2.2 data存储类型data区是8051单片机128字节的片内RAM(或者8052单片机的前128字节)。该区采用直接可寻址,访问速度较快,因此将使用频率大的变量和局部变量储存在data区。将变量设置为data存储类型的一般形式如下: 标识符 data 变量名其中,标识符为变量的类型,data为关键字,表示存储类型为data。7.2.3 bdata存储类型bdata区是可位寻址数据存储器,可以
6、将要求可位寻址的数据定义为bdata。该区中可以声明变量和位变量。将变量设置为bdata存储类型的一般形式如下: 标识符 bdata 变量名其中,标识符为变量的类型,bdata为关键字,表示存储类型为bdata。7.2.4 idata存储类型8051系列的一些单片机包含附加的128字节的片内RAM区,位于地址开始于80H的存储空间中,该存储区称为idata区。将变量设置为idata存储类型的一般形式如下: 标识符 idata 变量名其中,标识符为变量的类型,idata为关键字,表示存储类型为idata。7.2.5 pdata存储类型pdata类型存储在分页寻址的外部数据存储区的一页内,共256
7、字节。将变量设置为pdata存储类型的一般形式如下: 标识符 pdata 变量名其中,标识符为变量的类型,pdata为关键字,表示存储类型为pdata。7.2.6 xdata存储类型xdata区为可寻址的片外数据存储区,大小可达64KB,共65536字节单元。对xdata区寻址,须装入16位地址,因此尽量将外部数据存放在xdata区。将变量设置为xdata存储类型的一般形式如下: 标识符 xdata 变量名其中,标识符为变量的类型,xdata为关键字,表示存储类型为xdata。7.3 C51的扩展数据类型扩展数据类型不属于ANSI C标准数据类型,是8051单片机和C51编译器所特有的数据类型
8、。这些类型的数据可以对8051的特殊功能寄存器进行操作,但是不能用指针对其进行存取。扩展数据类型位数字节数取值的范围含义sfr810255用于字节寻址,定义8位特殊功能寄存器。sfr16162065535用于字寻址,定义16位特殊功能寄存器,且该16位必须低位在低字节,高位在紧跟在高字节。sbit1-01用于位寻址,从位寻址字节中定义位变量。bit1-01定义位变量,其值为0或者1。7.3.1 sfr和sfr16型变量sfr和sfr16主要用于定义8051的特殊功能寄存器。其中sfr用来定义8位特殊功能寄存器,sfr16用来定义16位特殊功能寄存器。其一般形式为下:sfr 特殊功能寄存器名=特
9、殊功能寄存器地址常数;Sfr16 特殊功能寄存器名=特殊功能寄存器地址常数;其中,sfr和sfr16为关键字。特殊功能寄存器的定义示例如下:sfr P2=0 xA0;/定义P2的I/O端口,其地址为A0H sfr P1=0 x90;/定义P1的I/O端口,其地址为90H Sfr16 T2=0 xCC;/定义定时器/计数器2,其地址T2L=CCH,T2H=CDH7.3.2 sbit型变量sbit用于定义可位寻址对象,用于位寻址,从位寻址字节中定义位变量。例如,定义特殊功能寄存器某位为位变量。在C51语言中,有3种方式定义位变量: sbit 位变量名=位地址。 sbit 位变量名=特殊功能寄存器名
10、位的位置。 sbit 位变量名=字节地址位的位置。该语句和第二种方法是一样的,只是将特殊功能寄存器名用位地址常数直接表示。7.3.3 bit型变量bit型变量即位变量,可用于变量类型、函数声明、函数返回值等场合。位变量在C语言里是外部变量,但编译系统不对其进行初始化,因此必须在程序中初始化位变量。其定义的一般形式为: bit 变量名采用bit定义的位变量将存放于内部RAM(20H2FH)。bit型变量的定义,示例如下:extern bit ch;/定义外部bit型位变量chbit flag;flag=1;7.3.4 51单片机寄存器的定义头文件“reg51.h”中定义了51单片机常用的特殊功能
11、寄存器。如果需要使用单片机的硬件资源,必须在C51源程序的开始处包含这个文件。该头文件中对寄存器用以上介绍的sfr和sbit扩展数据类型进行了定义。7.4 C51变量的存储模式存储模式是指编译环境中默认的变量的存储类型。一般来说,如果在定义变量时缺省存储类型,编译系统将按照存储模式所规定的默认存储区来指定变量、函数参数等的存储区域。Keil Vision3编译系统支持的8051系列单片机存储模式有Small模式、Compact模式和Large模式3种。7.4 C51变量的存储模式存储模式一般是在C51编译器选项中进行选择,也可以在程序中指定。在Keil Vision3编译系统中存储器模式的选择
12、,如图所示,在“Memory Model”的下拉列表用来从中选择默认的存储模式。7.4.1 Small模式Small模式用于将所有未指明存储区的变量均保存在单片机内部数据存储器,即片内RAM中。该模式与采用data存储类型方式相同。采用Small模式的优点是访问速度快、效率高;缺点是由于片内RAM存储空间有限,需要节约使用存储空间,因此Small模式只适用于规模较小的程序。由于内部数据存储器也可以存放堆栈,但是所有存放的数据和堆栈的大小都必须适合。尤其是堆栈,堆栈空间的大小是由函数的嵌套深度所决定的。通常如果连接/定位器将变量都设置在片内RAM中时,采用Small模式是最适合的。7.4.2 C
13、ompact模式Compact模式用于将所有未指明存储区的变量均保存在单片机外部数据存储器一页中,即片外RAM的256字节内。该模式与采用pdata存储类型方式相同。采用Compact模式的优点是存储空间较Small模式宽裕,缺点是访问速度要慢些,但相对于Large模式访问速度要快,是一种介于两种模式之间的中间状态。Compact模式适用于变量不超过256字节,此限制是由其寻址方式所决定的。可以通过P2口指定地址的高字节,编译器没有对该口进行设置。7.4.3 Large模式Large模式用于将所有未指明存储区的变量存放在单片机外部数据存储器中,即空间多达64KB的外部RAM区内。该模式与采用x
14、data存储类型方式相同。采用Large模式的优点是空间大,可存变量多,缺点是访问速度较慢。Large模式使用数据指针DPTR来对变量进行寻址。通过数据指针访问外部数据存储器的效率较低。当数据的大小为2字节或更多字节时,采用Large模式进行数据访问,将会产生比Small模式和Compact模式更多的代码。7.5 C51的存储器指针在C51语言中可以定义一般指针和存储器指针。对变量进行声明时可以指定变量的存储类型,在对于指针变量声明的时候,也同样可以指定其存储类型。 7.5.1 一般指针关于一般指针的定义,在第五章数据结构已经作过详细的介绍。例如:char *pc;long * pl;一般指针
15、可存放于任何存储器中,一般用3个字节进行存放。第一个字节为存储器类型,第二个字节为偏移量的高位,第三个字节为偏移量的低位。使用一般指针可以访问存放在存储器任何位置的数据而不用考虑其存储器类型,因此使用十分方便。7.5.2 存储器指针存储器指针是指在声明指针时明确指定其存储类型,即声明该指针指向特定的存储区的变量类型。1 1存储器指针声明存储器指针声明在定义一般指针的同时说明指针的存储类型。其一般形式如下: 标识符 关键字 *指针变量名7.5.2 存储器指针2 2指针存储类型与指针所指向的数据的存储类型指针存储类型与指针所指向的数据的存储类型在使用存储器指针时,要注意指针存储类型与指针所指向的数据的存储类型是两个不同的概念。例如:uchar xdata t10;uchar data *pt;pt=t; /赋值语句是错误的上面的语句可以改为:uchar xdata t10;uchar xdata *data
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一年级数学(上)计算题专项练习汇编
- 规范校外培训合同(2篇)
- 小丑电影课件教学课件
- 老师课件制作教学
- 南京工业大学浦江学院《土力学与地基基础》2023-2024学年第一学期期末试卷
- 南京航空航天大学《法律文书》2022-2023学年期末试卷
- soc芯片课件教学课件
- 石林县风貌改造施工组织设计书(二标段)
- 南京工业大学浦江学院《企业家精神创新精神与商业规划》2022-2023学年第一学期期末试卷
- 《咏柳》的说课稿
- 医学课件血管性痴呆
- 2024年国家基本公卫培训考核试题
- 教科版物理八年级上册教案(全册)
- 电阻的实验报告
- JGJ58-2008 电影院建筑设计规范
- CJJ101-2016 埋地塑料给水管道工程技术规程
- DL-T5710-2014电力建设土建工程施工技术检验规范
- 2024年春季国开《学前教育科研方法》期末大作业(参考答案)
- 储能技术系统安全评估与风险控制
- 《医疗卫生信用信息规范》
- 牙周病学考试模拟题+答案
评论
0/150
提交评论