




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章C51的存储结构 C51语言是面向51系列单片机及其硬件控制系统的开发语言 因此C51语言和单片机的硬件资源有非常密切的联系 C51的程序经过编译后将在单片机上进行运行 C51的程序的代码和数据都是按照一定的存储类型 存放在单片机的特定存储区域中 否则该数据无意义 存储结构是单片机C51语言很重要的一部分内容 也是其特有的内容 C51的存储结构包括存储器结构 存储类型 存储模式以及存储器指针等知识点 下面就分别介绍这几部分内容 7 1单片机的存储器结构 单片机的存储器结构是指单片机内部存储器的硬件组织形式 不同型号单片机的存储器结构会有所不同 但是原理是相似的 本章以最常用的51系列单片机为例 介绍其存储器结构 51系列单片机采用哈佛结构 将程序代码存储器 ROM 和数据存储器 RAM 分开 各部分遵循各自的寻址机构和寻址方式 下面概述一下51系列单片机存储器的硬件构成 7 1 151系列单片机的存储区域 51系列单片机的存储器被划分成几个不同的区域 为了C51的程序运行时 可以方便地调取数据和程序代码 C51的程序中的数据和程序代码 被分类存放在单片机的不同存储区域内 51系列单片机及其兼容的单片机在物理上 可划分为以下4个不同的存储区 片内数据存储区 片内RAM 片外数据存储区 片外RAM 片内程序存储区 片内ROM 片外程序存储区 片外ROM 7 1 2片内RAM的存储器结构 多数单片机均提供片内RAM 片内RAM是指单片机的片内数据存储区 C51程序中的变量一般保存在片内RAM中 因为该存储区的取址速度较快 便于及时调用数据 51系列单片机的片内数据存储区 片内RAM 可以划分为如下所示的2大区域 片内低128字节RAM区 地址范围为00H 7FH 该区域主要采用直接字节地址寻址方式 用来存储数据 也可存放堆栈和寄存器 特殊功能寄存器区 SFR 地址范围为80H 0FFH 该区域可位寻址 字节寻址或字寻址 用以控制定时器 计数器 串口 I O以及其他一些硬件资源 其中 地址范围为00H 07FH的低128字节片内RAM区 又可进一步划分为如下所示的3个区域 通用寄存器区 地址范围为00H 1FH 共由如下所示的4个寄存器组构成 7 2C51的存储类型 存储类型是指程序中数据 变量 常量和代码等 在8051硬件系统中的存放方式 单片机C51语言中支持code bdata idata pdata xdata和data型6种不同的存储类型 不同的存储类型对应于不同的存储区域和寻址方式 8051系列单片机的硬件系统中数据的存储类型与对应的存储区的关系 如表所示 存储类型与对应的存储区 7 2 1code存储类型 使用code存储类型定义数据时 编译器会将其定义在程序代码储存器 ROM或者EPPROM 中 该code存储区使用16位寻址 寻址空间可达64KB 一般用来存放可执行的代码段 也可以存放数据 将变量设置为code存储类型的一般形式如下 标识符code变量名其中 标识符为变量的类型 code为关键字 表示存储类型为code 例如 charcodestring GoodMorning 在code区定义存储字符串数组 7 2 2data存储类型 data区是8051单片机128字节的片内RAM 或者8052单片机的前128字节 该区采用直接可寻址 访问速度较快 因此将使用频率大的变量和局部变量储存在data区 将变量设置为data存储类型的一般形式如下 标识符data变量名其中 标识符为变量的类型 data为关键字 表示存储类型为data 例如 intdataa 5 chardatastr 10 floatdataf MyTypedatan1 自定义的数据类型 7 2 3bdata存储类型 bdata区是可位寻址数据存储器 可以将要求可位寻址的数据定义为bdata 该区中可以声明变量和位变量 将变量设置为bdata存储类型的一般形式如下 标识符bdata变量名其中 标识符为变量的类型 bdata为关键字 表示存储类型为bdata 例如 charbdatabet 在位寻址区定义字符变量betintbdatan 10 在位寻址区定义整型数组n 10 sbitbet5 bet 3 用关键字sbit定义位变量来可寻址对象其中一位sbitn8 n 1 6 7 2 4idata存储类型 8051系列的一些单片机包含附加的128字节的片内RAM区 位于地址开始于80H的存储空间中 该存储区称为idata区 将变量设置为idata存储类型的一般形式如下 标识符idata变量名其中 标识符为变量的类型 idata为关键字 表示存储类型为idata 例如 externfloatidatat 在idata区定义浮点型变量t 7 2 5pdata存储类型 pdata类型存储在分页寻址的外部数据存储区的一页内 共256字节 将变量设置为pdata存储类型的一般形式如下 标识符pdata变量名其中 标识符为变量的类型 pdata为关键字 表示存储类型为pdata 例如 unsignedcharpdatapn 在pdata区定义字符变量pn 7 2 6xdata存储类型 xdata区为可寻址的片外数据存储区 大小可达64KB 共65536字节单元 对xdata区寻址 须装入16位地址 因此尽量将外部数据存放在xdata区 将变量设置为xdata存储类型的一般形式如下 标识符xdata变量名其中 标识符为变量的类型 xdata为关键字 表示存储类型为xdata xdata存储类型的程序示例如下 include 头文件 include 头文件unsignedcharxdataRXData1 声明xdata变量unsignedcharxdataRXData2 声明xdata变量voidmain 主函数 while 1 RXData1 P3 赋值RXData2 P1 赋值 7 3C51的扩展数据类型 扩展数据类型不属于ANSIC标准数据类型 是8051单片机和C51编译器所特有的数据类型 这些类型的数据可以对8051的特殊功能寄存器进行操作 但是不能用指针对其进行存取 扩展数据类型如表所示 扩展数据类型 7 3 1sfr和sfr16型变量 sfr和sfr16主要用于定义8051的特殊功能寄存器 其中sfr用来定义8位特殊功能寄存器 sfr16用来定义16位特殊功能寄存器 其一般形式为下 sfr特殊功能寄存器名 特殊功能寄存器地址常数 sfr16特殊功能寄存器名 特殊功能寄存器地址常数 其中 sfr和sfr16为关键字 特殊功能寄存器的定义示例如下 sfrP2 0 xA0 定义P2的I O端口 其地址为A0HsfrP1 0 x90 定义P1的I O端口 其地址为90H该语句用于定义寄存器P2的I O端口 其地址为A0H 定义寄存器P1的I O端口 其地址为90H sfr16T2 0 xCC 定义定时器 计数器2 其地址T2L CCH T2H CDH 7 3 2sbit型变量 sbit用于定义可位寻址对象 用于位寻址 从位寻址字节中定义位变量 例如 定义特殊功能寄存器某位为位变量 在C51语言中 有3种方式定义位变量 sbit位变量名 位地址 sbit位变量名 特殊功能寄存器名 位位置 sbit位变量名 字节地址 位位置 该语句和第二种方法是一样的 只是将特殊功能寄存器名用位地址常数直接表示 7 3 3bit型变量 bit型变量即位变量 可用于变量类型 函数声明 函数返回值等场合 位变量在C语言里是外部变量 但编译系统不对其进行初始化 因此必须在程序中初始化位变量 其定义的一般形式为 bit变量名采用bit定义的位变量将存放于内部RAM 20H 2FH bit型变量的定义 示例如下 externbitch 定义外部bit型位变量ch再例如 bitflag flag 1 7 3 451单片机寄存器的定义 头文件 reg51 h 中定义了51单片机常用的特殊功能寄存器 如果需要使用单片机的硬件资源 必须在C51源程序的开始处包含这个文件 该头文件中对寄存器用以上介绍的sfr和sbit扩展数据类型进行了定义 7 4C51变量的存储模式 存储模式是指编译环境中默认的变量的存储类型 一般来说 如果在定义变量时缺省存储类型 编译系统将按照存储模式所规定的默认存储区来指定变量 函数参数等的存储区域 Keil Vision3编译系统支持的8051系列单片机存储模式有Small模式 Compact模式和Large模式3种 存储模式一般是在C51编译器选项中进行选择 也可以在程序中指定 在Keil Vision3编译系统中存储器模式的选择 如图7 1所示 图中所示 MemoryModel 的下拉列表用来从中选择默认的存储模式 Keil Vision3中存储器模式的选择 7 4 1Small模式 Small模式用于将所有未指明存储区的变量均保存在单片机内部数据存储器 即片内RAM中 该模式与采用data存储类型方式相同 采用Small模式的优点是访问速度快 效率高 缺点是由于片内RAM存储空间有限 需要节约使用存储空间 因此Small模式只适用于规模较小的程序 由于内部数据存储器也可以存放堆栈 但是所有存放的数据和堆栈的大小都必须适合 尤其是堆栈 堆栈空间的大小是由函数的嵌套深度所决定的 通常如果连接 定位器将变量都设置在片内RAM中时 采用Small模式是最适合的 7 4 2Compact模式 Compact模式用于将所有未指明存储区的变量均保存在单片机外部数据存储器一页中 即片外RAM的256字节内 该模式与采用pdata存储类型方式相同 采用Compact模式的优点是存储空间较Small模式宽裕 缺点是访问速度要慢些 但相对于Large模式访问速度要快 是一种介于两种模式之间的中间状态 Compact模式适用于变量不超过256字节 此限制是由其寻址方式所决定的 可以通过P2口指定地址的高字节 编译器没有对该口进行设置 7 4 3Large模式 Large模式用于将所有未指明存储区的变量存放在单片机外部数据存储器中 即空间多达64KB的外部RAM区内 该模式与采用xdata存储类型方式相同 采用Large模式的优点是空间大 可存变量多 缺点是访问速度较慢 Large模式使用数据指针DPTR来对变量进行寻址 通过数据指针访问外部数据存储器的效率较低 当数据的大小为2字节或更多字节时 采用Large模式进行数据访问 将会产生比Small模式和Compact模式更多的代码 7 5C51的存储器指针 在C51语言中可以定义一般指针和存储器指针 对变量进行声明时可以指定变量的存储类型 在对于指针变量声明的时候 也同样可以指定其存储类型 下面分别进行介绍 7 5 1一般指针 关于一般指针的定义 在数据结构一章指针一节已经作过详细的介绍 例如 char pc pc为一个指向char数据的指针 按默认存储模式存放long pl pl为指向long型整数的指针 按默认存储模式存放一般指针可存放于任何存储器中 一般用3个字节进行存放 第一个字节为存储器类型 第二个字节为偏移量的高位 第三个字节为偏移量的低位 使用一般指针可以访问存放在存储器任何位置的数据而不用考虑其存储器类型 因此使用十分方便 7 5 2存储器指针 存储器指针是指在声明指针时明确指定其存储类型 即声明该指针指向特定的存储区的变量类型 1 存储器指针声明在定义一般指针的同时说明指针的存储类型 其一般形式如下 标识符关键字 指针变量名2 指针存储类型与指针所指向的数据的存储类型在使用存储器指针时 要注意指针存储类型与指针所指向的数据的存储类型是两个不同的概念 例如 ucharxdatat 10 数组t在xdata存储区占10个字节的内存空间 0 x0000
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025跟单员考试基础理论:合同与订单的生效要素
- 《2025舞蹈培训机构教练聘请合同》
- 2025年短期外债借款合同范本
- 公猪采购合同范本
- 低价出租摊位合同范本
- 电缆施工总价合同范本
- 简单燃气工程合同范本
- 土地托管协议合同范本
- 有房子出租合同范本
- 特级保姆服务合同范本
- 工作交接表模板
- 佛吉亚卓越体系知识手册
- 3.2 歌曲《牧童之歌》课件(9张)
- 可穿戴设备可靠性优化技术
- 小升初分班考必刷题(试题)-2023-2024学年六年级下册数学人教版
- 数据治理与数据中台建设方案
- NBT 33018-2015 电动汽车充换电设施供电系统技术规范
- 《科技英语翻译方法》课件
- DL-T5455-2012火力发电厂热工电源及气源系统设计技术规程
- 公司自行车管理制度
- TSG-T7001-2023电梯监督检验和定期检验规则宣贯解读
评论
0/150
提交评论