




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章80C51单片机的存储器结构 3 1存储器的分类存储器的的作用是用来存放程序和数据 存储器可分为磁存储和半导体存储器 半导体存储器按功能又可分为只读存储器ROM和随机存储器RAM 如图3 1所示 单片机存储器结构中都采用半导体存储器 1 只读存储器ROM只读存储器在正常工作状态下只能从中读出数据 用户不能快速地随时修改或者重新写入数据 数据可长时间的保存 1 可编程ROM 可通过专用设备 编程器 将数据写入ROM PROM 用户可一次编程 EPROM 紫外线擦除 电改写 多次 EEPROM 电擦除 电改写 多次 FLASHROM 闪存 多次 2 掩膜ROM用户不能将数据写入 由厂家写入数据 由于上述特点 所以在单片机中一般做为程序存储器 2 随机存取存储器RAM在加电期间 可以随时向存储器里写入数据或从中读出数据 但掉电后 数据丢失 SRAM 静态存储器 加电期间数据可以长久保存 掉电信息丢失 DRAM 动态存储器 即使在加电期间数据也会丢失 数据要刷新 由于上述特点 所以在单片机中一般作为数据储存器 3 2计算机中储存器的两种结构在计算机中存储器的用途是存放程序和数据 它有两种结构 冯 诺伊曼结构和哈佛结构 冯 诺伊曼结构 程序和数据共用一个存储器逻辑空间 统一编址 哈佛结构 程序与数据分为两个独立存储器逻辑空间 分开编址 注 个人电脑 PC机 采用的是冯 诺伊曼结构 单片机一般采用哈佛结构 8051 8051 80C51 单片机 数据存储器用的是SRAM程序存储器用的是ROM 3 380C51单片机的储存器3 3 18051 80C51 系列存储器结构1 物理空间有四个部分 1 内部数据存储器 128BSRAM 2 外部扩展数据存储器 最大64KRAM 3 内部程序存储器 4KFlashROMAT89S51 4 外部扩展程序存储器 最大64KRAM 2 逻辑空间有三个部分 1 程序存储器ROM 包括内部和外部 共用一个64K的寻址空间 2 内部数据存储器RAM 128B 独立的一个128B的寻址空间 3 外部数据存储器RAM 64K 独立的一个64K的寻址空间 如图3 2所示 内部数据存储器和外部数据存储器相互之间独立编址 内部程序存储器和外部程序存储器统一编址 共用一个64K的寻址空间 3 3 2数据储存器数据存储器是采用了静态随机存储器 SRAM 的结构 掉电信息丢失 故用于暂存数据及运算的中间结果 1 内部数据存储器的结构内部数据储存器它由工作寄存器区 位寻址区 用户区三个部分组成 地址范围00H 7FH 共128个单元 用户对这些单元的访问 可以用 直接寻址 的方法 即在指令中用 direct 表示 指的就是00H 7FH这128个地址单元 指令中直接给出操作数所在单元地址的这种寻址方式称之为 直接寻址 何为寻址方式 即寻找操作数的方法 图3 3内部数据存储器结构 1 工作寄存器区 00H 1FH 共32个单元 又分为4组 每组8个单元 都用R0 R7表示 如图3 4所示 个寄存器对应的地址见表3 1所示在内部工作寄存器中的地址是唯一 但寄存器名重名 一个寄存器名对应有4个单元 为了解决重名问题 单片机用特殊功能寄存器PSW中的RS1 RS0来选择 也就是说 单片机在工作时不会同时使用这4组寄存器 在某一时刻 只能选择其中的一组 在指令系统中对于这些空间的访问有以下方法 直接使用地址 在指令系统中用 direct 表示 这种方式称之为直接寻址 如 指令MOVA direct 指令中的 direct 就是指内部数据存储器中的地址 00H 7FH 该指令就是把direct这个单元中的操作数传送到A中 操作数是指指令中参与操作的数据 指令系统中出现的 direct 在实际编程的过程中不能出现 必须写对应的实际地址 00H 7FH 这一点非常重要 如 MOVA 30H 就是将30H中的数送给A 直接使用寄存器名R0 R7 指令系统中用 Rn 表示这8个寄存器 这种方式的寻址称之为 寄存器寻址 就是操作数放在寄存器中 如 指令MOVA Rn 指令中的 Rn 就是指工作寄存器R0 R7 该指令就是把Rn中的操作数传送到A中 指令系统中出现的 Rn 在实际编程的过程中不能出现 必须写对应的寄存器 R0 R7 如 MOVA R3 就是将工作寄存器R3中的数传送到A中 R0和R1这两个寄存器还有一种用法 称之为 寄存器间接寻址 用 Ri 表示 i 0 1 R0和R1存放的是操作数所在单元的地址 如 MOVA Ri 指令中的 Ri 就是指工作寄存器R0和R1 该指令就是把Ri中的数取出作为所取数据的单元地址 指令系统中出现 Ri 在实际编程的过程中不能出现 必须写 R0或 R1 如 MOVA R0 就是将R0中的数取出 作为所取数据的地址 将该地址单元的数取出送到A中 如图3 5所示 R0所指的操作数就是10101010B AAH 3 5所示 指令MOVA R0操作示意 可以用 R0 40H AAH表示 注 在寄存器寻址中 Rn 这4组寄存器 由用户使用中通过PSW中的RS1和RS0的设定 来确定用户使用的组 这32个单元可以使用 直接寻址 方式 也可使用 寄存器寻址 方式来进行访问 4组中的R0和R1除了 直接寻址 和 寄存器寻址 外 还可采用 寄存器间接寻址 方式来访问 2 位寻址区 20H 2FH 这16个RAM单元具有双重功能 它们既可以像普通RAM单元一样按字节存取 即 直接寻址 direct 也可以对每个RAM单元中的任何一个二进制位单独存取 这就是位寻址 bit 80C51单片机为这些区域专门设置了位处理器 一个1位的CPU 用于这些空间的访问 如图3 6所示 图3 6 位地址表 在指令系统中对于这些空间的访问有以下方法 可以采用 直接寻址 的方式去访问这16个单元 如 MOVA 20H MOVA direct 也可以采用 位寻址 bit 的方式去访问这128个二进制位 如 MOVC 00H MOVC bit 该指令就是把00H中的一个二进制数送到C中 指令中 bit 指的就是位地址 00H 7FH 注 字节地址 20H 2FH 位地址 00H 7FH 为了区分位地址 00H 7FH 和内部数据存储器的地址 00H 7FH 提到位寻址区中的位地址时 必须注明位地址 单元地址 称之为字节地址 也可简称地址 3 数据缓冲区 用户区 30H 7FH 数据缓冲区共有80个RAM单元 用于存放用户数据或作堆栈区使用 也称用户RAM区 80C51对用户RAM区中每个RAM单元只能按字节存取的 不可位寻址 在指令系统中对于这些空间的访问只有一种方法 即直接寻址 direct 如 MOVA 40H MOVA direct 内部数据存储器小结 内部数据存储器中所有的单元 128B 都可以用直接寻址的方法来进行访问 direct 工作寄存器区也可以用寄存器寻址 Rn 的方法来访问 指令系统中一般都用寄存器寻址 Rn 的方法来访问该空间 除了寄存器寻址的方式 R0和R1也可采用寄存器间接寻址 Ri的方式 在使用中R0和R1必须先满足间接寻址方式 有多余的可用于寄存器寻址方式 位寻址区 对这16个单元可以使用直接寻址方式 这16个单元中的128个位 都有位地址 还可以用位寻址的方式来访问 用户区只能用直接寻址的方式来访问 指令系统中所有的数据处理 运算都是在内部数据存储器中完成 所以指令系统也是非常丰富的 大部分指令都是针对该空间 2 外部数据存储器当内部数据存储器不够用时 在单片机的外总线上可以最大扩展64K的RAM 可独立寻址 有专用指令系统 MOVX传送指令 不能用于数据的运算及处理 所以仅有4条指令 两条读 两条写 用于一般数据的存放 地址为0000H FFFFH 寻址方式采用寄存器间接寻址的方式 如MOVXA DPTR 指令中DPTR 开辟在特殊功能寄存器 SFR 中 是一个16位的数据存储器 数据指针 用于访问外部数据存储器和程序存储器 一般用于存放的是外部数据存储器和程序存储器的地址 外部数据存储器的地址也是16位 存储器结构见图3 7所示 图3 7外部数据存储器结构 3 3 3特殊功能寄存器 SFR 80C51系列单片机内的锁存器 定时器 串行口 数据缓冲器及各种控制寄存器 状态寄存器都以特殊功能寄存器 SFR 的形式出现 它们离散地分布在高128位片内RAM80H FFH中 51子系列共有18个特殊功能寄存器 占用21个单元 其余107个单元用户不好使用 AT89C51 表3 2SFR地址映像表 这18个特殊功能寄存器 其中有15个特殊功能寄存器占用1个单元 另外3个特殊功能寄存器占用2个单元 这就是为什么18个特殊功能寄存器占用21个单元的原因 这18个特功能寄存器我们先学5个 其余的放在以后学习 1 累加器ACC E0H 累加器ACC是80C51型单片机中最常用的寄存器 许多指令的操作数取自ACC 许多运算的结果存放在ACC中 乘除法指令必须通过ACC进行 累加器ACC的指令助记符为 简单的讲就是一个8位的存储器 使用非常频繁 很多指令中必须用到ACC 在指令系统中 可直接使用寄存器名ACC A 和字节地址E0H对这八个二进制位进行操作 前者称之为寄存器寻址 后者称之为直接寻址 direct 用户一般使用寄存器寻址 即寄存器寻址 在特殊条件下才会使用直接寻址 累加器ACC也是一个可以对8个二进制位进行位寻址的寄存器 8个二进制位都有唯一的位地址 指令中只能使用位地址 bit 也称之为位寻址 若使用位编号 编译软件会将位编号转换成位地址 再进行编译 最后形成目标文件 2 寄存器 F0H 80C51单片机乘除法指令中要用到寄存器 用于存放操作数和操作结果 也可作为通用存储器器使用 在乘除指令中 直接使用寄存器名B 称之为寄存器寻址 用作通用存储器时只能使用地址F0H称之为直接寻址 若用寄存器名B 编译软件会将其转换成地址F0H来使用 寄存器B是可以进行位寻址的单元 8个二进制位都有唯一的位地址 在对二进制位寻址时 指令中只能使用位地址 bit 称之为位寻址 若使用位编号 编译软件会将位编号转换成位地址 再进行编译 最后形成目标文件 见图3 9所示 3 程序状态字寄存器PSW D0H 程序状态字寄存器PSW也称为标志寄存器 存放各有关标志和对工作寄存器的选择设置 其结构和定义如图3 10所示 在指令系统中该单元只能使用字节地址D0H来访问 称之为直接寻址 direct 若用寄存器名PSW 编译软件会将其转换成地址D0H来使用 程序状态字寄存器PSW是可以进行位寻址的单元 8个二进制位都有唯一的位地址 在对二进制位寻址时 指令中只能使用位地址 bit 称之为位寻址 若使用位定义或位编号 编译软件会将位定义和位编号转换成位地址 再进行编译 最后形成目标文件 该单元各位的定义如下 CY 进 借 位标志位 有进 借 位 CY 1 否则 CY 0 主要用于加减运算中 AC 辅助进 借 位标志位 低四位向高四位的进 借 位 有进 借 AC 1 否则 AC 0 主要用于加减运算中 RS1 RS0 工作寄存器组的选择位 见表3 3所示 OV 溢出标志位 80C51单片机CPU的位数是8位 则表示带符号数的位数只能是8位 最高位是符号位 数据位只有7位 数的范围在 128 127之间 若运算的结果超出这个范围 溢出 结果出错 计算机中判断结果溢出的算法是公式 OV Cy6 Cy7 式中 Cy6表示D6位向D7位的进位或借位 Cy7表示D6位向CY的进位或借位 F0 用户位 用户可以作为一般的一位二进制数的存储器使用 P 奇偶标志位 累加器A中1的个数为奇数时 P 1 否则 P 0 只要A中的数值发生变化 就影响P 实时反映累加器A中1的个数的奇偶性 注 CY AC OV P这4个标志位由指令运行后 对其产生影响 由硬件产生各标志 主要用于算术运算类指令 除了CY一般这3位不会用于数据的存储 CY也是位处理器 1位的CPU 中的累加器 在位操作中使用较为频繁 P在任何一条指令中 只要有累加器A出现并且A中的值发生变化 就会影响P RS1 RS0是工作寄存器组的选择位 由用户根据需要通过指令来设定 去选择寄存器组 软件设定 例1 X 13 Y 6 求X Y的补码运算 解 X 补码 F3H Y 补码 FAH X Y 补码 则 X 补码 11110011B Y 补码 11111010B X 补码 Y 补码 111101101B在单片机中 上述运算后 CY 1 AC 0 OV Cy6 Cy7 1 1 0 结果正确 P 0 4 数据指针DPTR 83H 82H 数据指针DPTR是一个16位的特殊功能寄存器 不可位寻址 由两个 位寄存器DPH 83H 和DPL 82H 组成 DPH是DPTR的高 位 DPL是DPTR的低 位 DPTR既可合并作为一个16位寄存器 又可分开按 位寄存器单独操作 见图3 11所示 在指令中一般都是以一个16位的寄存器DPTR使用 用于存放外部数据存储器的地址和程序程序器的地址 访问外部数据存储器是用 DPTR 称之为寄存器间接寻址 访问程序存储器是用 A DPTR 称之为变址寻址 作为两个独立的8位寄存器 DPH DPL 使用时 只能使用其地址 在指令系统中会详解 5 堆栈指针SP 81H 堆栈是CPU用于暂时存放部分数据的 仓库 它的作用是用来保护现场和保护断点 在80C51中 由内部数据存储器中若干存储单元组成 可由用户自定义单元地址 一般开辟在内部数据存储器30H 7FH这个空间 存储单元的个数称为堆栈的深度 可理解为仓库容量 为了实现上述数据保护的需要 数据的存取 要遵循先进后出 后进先出的原则 80C51单片机中用堆栈指针SP 81H 来实现数据的先进后出 后进先出 即不可位寻址 它开辟在特殊功能寄存器81H中 没有位地址 即不可位寻址 如图3 12所示 堆栈指针SP是用来存放堆栈数据区的地址 如图3 13所示 一般为了书写方便 堆栈的示意图 如图3 14所示 堆栈数据的存取又称之为进栈和出栈 进栈时 首先堆栈指针加1 即 SP SP 1 然后数据进栈 出栈时 先取堆栈的数据 然后堆栈指针减1 即 SP SP 1 数据的进栈和出栈 又有两种操作形式 一是硬件操作 计算机执行某个操作时 硬件自动进栈 中断 调用 和出栈 返回指令 用于保护断点 二是软件操作 由指令PUSHdirect 进栈 和指令POPdirect 出栈 来实现 不管是硬件操作还是软件操作 进栈时 首先堆栈指针加1 然后数据进栈 出栈时 先取堆栈的数据 然后堆栈指针减1 下面以软件操作加以说明 例2 已知 SP 2FH 40H 22H 41H 33H执行下列程序 PUSH40HPUSH41HPOP40HPOP41H解 根据初始条件 得示意图 存储器中没有提到单元的数据为任意值 执行第一条指令PUSH40H 首先 SP SP 1 2FH 1 30H 然后将40H中的数据22H 送入堆栈指针SP指向的单元30H中 如图3 16 a 所示 第一个进栈的数据不是堆栈指针指向的初始单元 在计算机中数据的传送 不是完全给予的意思 而是复制 40H单元数据进栈后 影响了堆栈指针指向的单元 但不影响40H这个单元的原始数据 所以40H的数据仍为22H 执行第二条指令PUSH41H 进栈过程同第一条指令 进栈后 示意图如图3 16 b 所示 执行第三条指令POP40H 首先是取堆栈指针指向单元的数据给40H 则40H的数据为33H 然后将 SP SP 1 31H 1 30H 执行完后 示意图如图3 16 c 所示 执行第四条指令POP41H 出栈过程同第四条指令 示意图如图3 16 d 所示 当数据取出后 堆栈指针又回到初始状态 如图3 15所示 但原来进栈的数还存于堆栈中 直到下次进栈的数据将其覆盖 该程序 是将40H和41H的数据交换 进栈两次 出栈两次 所以堆栈指针SP的值 仍为初始值2FH 堆栈指针的初始值指向的单元 是不能用于存放堆栈数据的 第一个入栈的数据 是该单元的地址加1单元 系统复位时堆栈指示器的值为07H 即指向的是工作寄存器区0组的R7单元 如图3 17所示 第一个入栈的数放于08H单元 但堆栈一般开辟在用户区 30H 7FH 中 堆栈的深度是由数据连续进栈的次数来决定的 若根据某个程序设计的需要 需要16个单元堆栈来存储数据 堆栈开辟在40H到4FH单元 则堆栈指示器SP的初始值应付3FH 第一个入栈的数放入40H中 在程序的设计中 40H 41H中不能用于其它的数据的存放 否则数据被覆盖 若实际进栈的数据超出了16个单元 则堆栈溢出 溢出的单元在50H以上 这些单元没有数据 则没有影响 否则影响原有数据 堆栈指针始终指向的是堆栈的栈顶位置 注 51子系列中 共有18个SFR 特殊功能寄存器 占用21个单元 我们先学5个SFR 共6个单元 其余SFR在后面的学习中 会逐步的给大家介绍 这18个SFR 21个单元中 字节地址能被8整除的单元是可以进行位寻址的 也就是说字节地址的后面一位是0或者8 都是可以进行位寻址的 bit 可位寻址的单元 可以用位地址 位编号或位定义 在寻址中都称之为位寻址 bit 系统复位后 各寄存器的值如表3 4所示 3 3 4程序存储器程序存储器的作用是用来存放程序和数表 固定不变的常数 AT89S51单片机内部有4K的程序存储器FlashROM 外部最多可扩展64K的程序存储器 内外程序存储器采用统一编址的方法 即共用64K的地址 地址范围0000H FFFFH 不管是内部还是外部都是用指令MOVC来访问 如图3 18所示 1 程序存储器的结构 8051 80C51 系列有64KROM的寻址区 地址范围0000H FFFFH 用于存放程序 其中低4K 0000H 0FFFH 的地址区可以为片内ROM和片外ROM共用 但不能同时使用 由外引脚决定 高60K 1000H FFFFH 的地址区为片外ROM所专用 注 低4K共用地址 这样出现一个地址两个单元 地址不能唯一 这在计算机中是不允许的 解决方法 通过单片机的外引脚来实现 a 当 0时 CPU直接访问外ROM 0000H FFFFH 内部不用 b 当 1时 CPU先访问内部ROM 0000H 0FFFH 结束后 再去访问外部ROM 1000H FFFFH 外部低4K不用 也就是说外部低4K无需扩展 这种情况下 外部最多可扩展6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国广电本溪市2025秋招技术岗专业追问清单及参考回答
- 玉林市中储粮2025秋招战略研究博士岗高频笔试题库含答案
- 国家能源唐山市2025秋招笔试综合知识题专练及答案
- 中国广电资阳市2025秋招面试典型题目及答案
- 成都市中石化2025秋招面试半结构化模拟题及答案新材料与新能源岗
- 江苏音乐中考模拟试题及答案
- 中国广电玉树藏族自治州2025秋招供应链采购类专业追问清单及参考回答
- 中国广电怒江自治州2025秋招笔试模拟题及答案
- 国家能源烟台市2025秋招笔试模拟题及答案
- 中国移动鹤壁市2025秋招企业文化50题速记
- 2025-2026学年粤教粤科版(2024)小学科学二年级上册(全册)教学设计(附目录)
- 企业安全生产费用预算表模板
- 小学生班干部竞选
- 机场消防安全管理培训课件
- 妇科外阴解剖学课件
- (正式版)DB44∕T 2697-2025 《岩土工程勘察安全技术标准》
- 2025年生态环境综合行政执法考试参考题库(附答案)
- QC/T 262-2025汽车渗碳齿轮金相检验
- 畜牧兽医专业毕业论文豆
- T-CFLP 0016-2023《国有企业采购操作规范》【2023修订版】
- 【NIFD】2025H1人民币汇率分析报告-“对等关税”加剧汇市震荡 美元指数步入贬值周
评论
0/150
提交评论