第7章C51的存储结构_第1页
第7章C51的存储结构_第2页
第7章C51的存储结构_第3页
第7章C51的存储结构_第4页
第7章C51的存储结构_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、 第7章 C51的存储结构 ? C51语言是面向51系列单片机及其硬件控制系统的 开发语言,因此C51语言和单片机的硬件资源有非 常密切的联系。C51的程序经过编译后将在单片机 上进行运行,C51的程序的代码和数据都是按照一 定的存储类型,存放在单片机的特定存储区域中, 否则该数据无意义。存储结构是单片机C51语言很 重要的一部分内容,也是其特有的内容。C51的存 储结构包括存储器结构、存储类型、存储模式以 及存储器指针等知识点。下面就分别介绍这几部 分内容。 7.1 单片机的存储器结构 ? 单片机的存储器结构是指单片机内部存储器的硬 件组织形式。不同型号单片机的存储器结构会有 所不同,但是原

2、理是相似的。本章以最常用的51 系列单片机为例,介绍其存储器结构。 ? 51系列单片机采用哈佛结构,将程序代码存储器 (ROM)和数据存储器(RAM)分开,各部分遵循 各自的寻址机构和寻址方式。下面概述一下51系 列单片机存储器的硬件构成。 7.1.1 51系列单片机的存储区域 ? 51系列单片机的存储器被划分成几个不同的区域。 为了C51的程序运行时,可以方便地调取数据和程 序代码,C51的程序中的数据和程序代码,被分类 存放在单片机的不同存储区域内。51系列单片机 及其兼容的单片机在物理上,可划分为以下4个不 同的存储区: ? 片内数据存储区(片内RAM) ? 片外数据存储区(片外RAM)

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

4、 以及其他一些硬件资源。 ?其中,地址范围为00H07FH的低128字节片内RAM区,又可进一步 划分为如下所示的3个区域。 ?通用寄存器区。地址范围为00H1FH,共由如下所示的4个寄存器 组构成。 7.2 C51的存储类型 ? 存储类型是指程序中数据(变量、常量和代码等) 在8051硬件系统中的存放方式。单片机C51语言中 支持code、bdata、idata、pdata、xdata和data 型6种不同的存储类型。不同的存储类型对应于不 同的存储区域和寻址方式。8051系列单片机的硬 件系统中数据的存储类型与对应的存储区的关系, 如表所示。 存储类型与对应的存储区 存储类型 对应的存储区

5、和访问方式 code 程序代码存储区( 64KB),由MOVCDPTR访问 data 直接寻址片内数据存储区,访问速度快( 128字节) bdata 可位寻址片内数据存储区,允许位与字节混合访问(16字节) idata 间接寻址片内数据存储区,可访问片内全部 RAM地址空间(256字节) pdata 分页寻址外部数据存储区( 256字节)由MOVXR0访问 xdata 可寻址片外数据存储区( 64KB),由MOVXDPTR访问 7.2.1 code存储类型 ? 使用code存储类型定义数据时,编译器会将其定 义在程序代码储存器(ROM或者EPPROM)中。该 code存储区使用16位寻址,寻址

6、空间可达64KB。 一般用来存放可执行的代码段,也可以存放数据。 将变量设置为code存储类型的一般形式如下: ? 标识符 code 变量名 ? 其中,标识符为变量的类型,code为关键字,表 示存储类型为code。例如: ? char code string=”Good Morning”; /在code区定义存储字符串数 组 7.2.2 data存储类型 ?data区是8051单片机128字节的片内RAM(或者8052单片机 的前128字节)。该区采用直接可寻址,访问速度较快,因 此将使用频率大的变量和局部变量储存在data区。将变量 设置为data存储类型的一般形式如下: ?标识符 dat

7、a 变量名 ?其中,标识符为变量的类型,data为关键字,表示存储类 型为data。例如: ?int data a5; ?char data str10; ?float data f; ?MyType data n1; /自定义的数据类型 7.2.3 bdata存储类型 ?bdata区是可位寻址数据存储器,可以将要求可位寻址的数 据定义为bdata。该区中可以声明变量和位变量。将变量设 置为bdata存储类型的一般形式如下: ?标识符 bdata 变量名 ?其中,标识符为变量的类型,bdata为关键字,表示存储类 型为bdata。例如: ?char bdata bet; /在位寻址区定义字符变

8、量bet ?int bdata n10; /在 位寻址区定义整型数组n10 ?sbit bet5=bet3; /用关键字sbit定义位变量来可寻址对象其中一位 ?sbit n8=n16; 7.2.4 idata存储类型 ? 8051系列的一些单片机包含附加的128字节的片内 RAM区,位于地址开始于80H的存储空间中,该存 储区称为idata区。将变量设置为idata存储类型 的一般形式如下: ? 标识符 idata 变量名 ? 其中,标识符为变量的类型,idata为关键字,表 示存储类型为idata。例如: ? extern float idata t; /在idata区定义浮点型变量t 7

9、.2.5 pdata存储类型 ? pdata类型存储在分页寻址的外部数据存储区的一 页内,共256字节。将变量设置为pdata存储类型 的一般形式如下: ? 标识符 pdata 变量名 ? 其中,标识符为变量的类型,pdata为关键字,表 示存储类型为pdata。例如: ? unsigned char pdata pn; /在pdata区定义字符变量pn 7.2.6 xdata存储类型 ?xdata区为可寻址的片外数据存储区,大小可达64KB,共65536字节单元。对xdata区寻址,须装入 16位地址,因此尽量将外部数据存放在xdata区。将变量设置为xdata存储类型的一般形式如下: ?标

10、识符 xdata 变量名 ?其中,标识符为变量的类型,xdata为关键字,表示存储类型为xdata。xdata存储类型的程序示例 如下: ?#include /头文件 ?#include /头文件 ? ?unsigned char xdata RXData1; /声明xdata变量 ?unsigned char xdata RXData2; /声明xdata变量 ? ?void main() /主函数 ? ?while(1) ? ?RXData1=P3; /赋值 ?RXData2=P1; /赋值 ? ? 7.3 C51的扩展数据类型 ? 扩展数据类型不属于ANSIC标准数据类型,是8051 单

11、片机和C51编译器所特有的数据类型。这些类型 的数据可以对8051的特殊功能寄存器进行操作, 但是不能用指针对其进行存取。扩展数据类型如 表所示。 扩展数据类型 扩展数据类型 位数 字节数 取值的范围 含义 sfr 8 1 0255 用于字节寻址,定义 8位特殊功能寄存器。 sfr16 16 2 065535 用于字寻址,定义 16位特殊功能寄存器,且该 16位 必须低位在低字节,高位在紧跟在高字节。 sbit 1 - 01 用于位寻址,从位寻址字节中定义位变量。 bit 1 - 01 定义位变量,其值为 0或者1。 7.3.1 sfr和sfr16型变量 ?sfr和sfr16主要用于定义805

12、1的特殊功能寄存器。其中sfr用来定 义8位特殊功能寄存器,sfr16用来定义16位特殊功能寄存器。其 一般形式为下: ?sfr 特殊功能寄存器名=特殊功能寄存器地址常数; ?sfr16 特殊功能寄存器名=特殊功能寄存器地址常数; ?其中,sfr和sfr16为关键字。特殊功能寄存器的定义示例如下: ?sfr P2=0 xA0; /定义P2的I/O端口,其地址为A0H ?sfr P1=0 x90; /定义P1的I/O端口,其地址为90H ?该语句用于定义寄存器P2的I/O端口,其地址为A0H;定义寄存器 P1的I/O端口,其地址为90H。 ?sfr16 T2=0 xCC; /定义定时器/计数器2

13、,其地址T2L=CCH, T2H=CDH 7.3.2 sbit型变量 ? sbit用于定义可位寻址对象,用于位寻址,从位 寻址字节中定义位变量。例如,定义特殊功能寄 存器某位为位变量。在C51语言中,有3种方式定 义位变量: ? sbit 位变量名=位地址。 ? sbit 位变量名=特殊功能寄存器名位位置。 ? sbit 位变量名=字节地址位位置。该语句和第二 种方法是一样的,只是将特殊功能寄存器名用位 地址常数直接表示。 7.3.3 bit型变量 ?bit型变量即位变量,可用于变量类型、函数声明、函数返 回值等场合。位变量在C语言里是外部变量,但编译系统不 对其进行初始化,因此必须在程序中初

14、始化位变量。其定 义的一般形式为: ?bit 变量名 ?采用bit定义的位变量将存放于内部RAM(20H2FH)。bit 型变量的定义,示例如下: ?extern bit ch; /定义外部bit型位变量ch ?再例如: ?bit flag; ?flag=1; 7.3.4 51单片机寄存器的定义 ? 头文件“reg51.h”中定义了51单片机常用的特殊 功能寄存器。如果需要使用单片机的硬件资源, 必须在C51源程序的开始处包含这个文件。该头文 件中对寄存器用以上介绍的sfr和sbit扩展数据类 型进行了定义。 7.4 C51变量的存储模式 ?存储模式是指编译环境中默认的变量的存储类型。一般来说

15、,如 果在定义变量时缺省存储类型,编译系统将按照存储模式所规定 的默认存储区来指定变量、函数参数等的存储区域。Keil Vision3编译系统支持的8051系列单片机存储模式有Small模式、 Compact模式和Large模式3种。 ?存储模式一般是在C51编译器选项中进行选择,也可以在程序中指 定。在Keil Vision3编译系统中存储器模式的选择,如图7.1所 示。图中所示,“Memory Model”的下拉列表用来从中选择默认 的存储模式。 Keil Vision3 中存储器模式的选择 7.4.1 Small模式 ? Small模式用于将所有未指明存储区的变量均保存 在单片机内部数据

16、存储器,即片内RAM中。该模式 与采用data存储类型方式相同。采用Small模式的 优点是访问速度快、效率高;缺点是由于片内RAM 存储空间有限,需要节约使用存储空间,因此 Small模式只适用于规模较小的程序。 ? 由于内部数据存储器也可以存放堆栈,但是所有 存放的数据和堆栈的大小都必须适合。尤其是堆 栈,堆栈空间的大小是由函数的嵌套深度所决定 的。通常如果连接/定位器将变量都设置在片内 RAM中时,采用Small模式是最适合的。 7.4.2 Compact模式 ? Compact模式用于将所有未指明存储区的变量均保 存在单片机外部数据存储器一页中,即片外RAM的 256字节内。该模式与采

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

18、rge模式使用数据指针DPTR来对变量进行寻址。 通过数据指针访问外部数据存储器的效率较低。 当数据的大小为2字节或更多字节时,采用Large 模式进行数据访问,将会产生比Small模式和 Compact模式更多的代码。 7.5 C51的存储器指针 ? 在C51语言中可以定义一般指针和存储器指针。对 变量进行声明时可以指定变量的存储类型,在对 于指针变量声明的时候,也同样可以指定其存储 类型。下面分别进行介绍。 7.5.1 一般指针 ?关于一般指针的定义,在数据结构一章指针一节已经作过 详细的介绍。例如: ?char *pc; /pc为一个指向char数据的指针,按默认存储 模式存放 ?long * pl; /pl为指向long型整数的指针,按默认存储模 式存放 ?一般指针可存放于任何存储器中,一般用3个字节进

温馨提示

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

评论

0/150

提交评论