MCS-51 单片机大作业 MCS-51 单片机大作业 通过学习 51 单片机资料完成以下作业题: 1、 简述电子计算机的冯诺依曼结构与哈弗结构, 指出两种结构的本质区别。 (1) 冯诺依曼结构: 冯诺依曼结构也称普林斯顿结构, 是一种将程序指令存储器和数据存储器合并在一起的存储器结构。 程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置, 因此程序指令和数据的宽度相同, 如英特尔公司的 8086 中央处理器的程序指令和数据都是 16 位宽。 如图 1 所示: 图 1 冯诺依曼结构 冯诺依曼结构特点: 采用存储程序方式, 指令和数据混合存储在同一个存储器中。 即数据和程序在内存中是没有区别的,它们都是内存中的数据,当 EIP 指针指向哪 CPU 就加载哪段内存中的数据,如果是不正确的指令格式,CPU 就会发生错误中断. 指令和数据都可以送到运算器进行运算,即由指令组成的程序是可以修改的。 存储器是按地址访问的线性编址的一维结构, 每个单元的位数是固定的。 指令由操作码和地址组成。 操作码指明本指令的操作类型,地址码指明操作数和地址。操作数本身无数据类型的标志, 它的数据类型由操作码确定。 通过执行指令直接发出控制信号控制计算机的操作。 指令在存储器中按其执行顺序存放, 由指令计数器指明要执行的指令所在的单元地址。 指令计数器只有一个, 一般按顺序递增, 但执行顺序可按运算结果或当时的外界条件而改变。 以运算器为中心, I/O 设备与存储器间的数据传送都要经过运算器。 数据以二进制表示。 (2) 哈弗结构简述: 哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。 哈佛结 构是一种并行体系结构。 如图 2 所示: 图 2, 哈弗结构 哈弗结构处理器的主要特点是: 使用两个独立的存储器模块, 如图程序存储器和数据存储器, 分别存储 指令和数据, 每个存储模块都不允许指令和数据并存, 每个存储器独立编址、 独立访问; 使用独立的两条总线, 分别作为 CPU 与每个存储器之间的专用通信路径, 而这两条总线之间毫无关联。 程序指令存储和数据存储分开, 可以在硬件上读取指令代码和传输数据时使用不同的传输线宽度。 哈佛结构的计算机由 CPU、 程序存储器和数据存储器组成, 程序存储器和数据存储器采用不同的总线, 从而提供了较大的存储器带宽, 使数据的移动和交换更加方便, 尤其提供了较高的数字信号处理性能。 哈佛结构的微处理器通常具有较高的执行效率。 其程序指令和数据指令分开组织和存储的, 执行时可以预先读取下一条指令。 (3) 两种结构的本质区别: 冯诺依曼结构: 采用存储程序方式, 指令和数据混合存储在同一个存储 器中, 共享同一总线的结构。 存储器是按地址访问的线性编址的一维结构, 每个单元的位数是固定的。 通过执行指令直接发出控制信号控制计算机的操作, 按照程序顺序执行指令。 从而影响了数据处理速度的提高。 哈弗结构: 使用两个独立的存储器模块, 分别存储指令和数据, 每个存 储模块都不允许指令和数据并存, 其程序指令和数据指令分开组织和存储的, 执行时可以预先读取下一条指令; 使用独立的两条总线, 分别作为 CPU 与每个存储器之间的专用通信路径, 而这两条总线之间毫无关联。 从而提供了较大的存储器带宽, 使数据的移动和交换更加方便, 尤其提供了较高的数字信号处理性能。 2、 用具体的技术事实阐述为什么 MCS-51 单片机的体系结构为哈弗结构。 图 3, MCS-51 单片机结构 MCS-51 单片机结构如图 2 所示。 51 单片机的主要功能部件组成为: 微处理器(CPU),数据存储器(RAM), 程序存储器(ROM/EPROM), 4 个 8 位并行 I/O 口(P0、 P1、 P2、 P3) ,一个串行口, 2 个 16 位定时器/计数器, 中断系统, 特殊功能寄存器(SFR) . (a) 程序存储器 (b)数据存储器 图 4, MCS-51 单片机的存储器 如图 4 所示, MCS-51 单片机的程序存储器空间和数据存储器空间是各自独立的, 两种存储器各自有自己的寻址方式和寻址空间。 (1) 程序存储器(ROM/EPROM): 用于存放经调试正确的应用程序和表格之类的固定常数。 采用 16 位的程序计数器 PC 和 16 位地址总线片内 4KB 可扩展到片外 64kb。 程序存储器可分为片内和片外两部分, CPU 访问片内和片外程序存储器由错误! 未找到引用源。 引脚所接电平确定。 当错误! 未找到引用源。 =1 时, 程序从片内 ROM 开始执行, 当 PC 值超过片内 ROM 容量时 会自动转向外部 ROM 空间。 当错误! 未找到引用源。 =0 时, 单片机只能程执行外部存储器中的程序。 MCS-51 系列单片机程序存储器的某些单元被固定用于各中断源的终端服务程序的入口。如图 5 所示。 图 5, 程序存储器中有特殊用途地址: (PC 值) 51 系列单片机复位后 PC=0000H, 系统从 0000H 开始执行程序。 0000H 单元是系统的起始地址, 一般在该单元存放一条无条件转移指令, 用户设计的程序是从转移后的地址开始存放并执行的。 0003H-002AH 单元被保留专用于 5 个中断服务程序入口地址。 每个中断服务程序只有 8 个字节单元存放, 显然不够, 故此 8 个单元通常放一条跳转指令。 指向被实际分配的中断服务程序段。 (2) 数据存储器: 如图 4(b) 所示数据存储器分为片内数据存储器和片外数据存储器。片内、 片外数据存储器的访问是由指令区分的。 片内数据存储器共有 128 个单元, 字节地址为 00H~7FH.地址为 00H~1FH 为 4 组通用工作寄存器区, 20H~2FH 为位寻址, 30H~7FH 为用户 RAM 区, 用以数据缓冲区以及堆栈区。 由此可见, MCS-51 单片机中程序存储器(ROM) 和数据存储器(RAM)在使用上是严格区分的, 不同的操作指令不能混用。 程序存储器只能放置程序指令及表格。 除了程序的运行控制外, 其操作指令不分内片和外片。 而数据存储器只存放数据, 片内和片外操作指令不同。这恰恰符合哈弗结构的要求, 所以 MCS-51 单片机结构是哈弗结构。 3、 说明 MCS-51 单片机寻址方式、 指令系统的特点, 并与 8086CPU 的寻址方式、 指令系统进行对比。 寻址方式比较: MCS-51 单片机指令系统共使用 7 中寻址方式, 包括寄存器寻址、 直接寻址、 立即数寻址、寄存器间接寻址、 变址寻址、 相对寻址、 位寻址等。 8086CPU 系统 7 种寻址方式, 包括直接寻址、 寄存器寻址、 立即数寻址、 寄 存器间接寻址、 寄存器相对寻址、 基址变址寻址、 相对基址变址寻址等。 下面通 MCS-51 单片机指令系统基本指令 111 条— 1) 按指令功能分: 数据传送类指令(28 条)、 算术运算类指令(24 条)、 逻辑运算类指令(25 条)、 控制转移类指令(17 条)、 布尔操作类指令(17 条); 2) 按指令代码长度分: 单字节指令 49 条、 双字节指令 45 条、 三字节指令 17 条; 3) 按指令执行时间长短分: 1 个机器周期指令 64 条、 2 个机器周期 指令 45 条、 4 个机器周期指令 2 条; 80x86 CPU 指令系统由以下六组指令构成: 数据传送指令组, 算术运算指令 组, 逻辑运算指令组, 串处理指令组, 控制转移指令组, 处理机控制指令组 单片机指令格式: 操作码 操作数 单字节指令——操作码、 操作数在一个字节里; 双字节指令——操作码一个字节, 操作数一个字节; 三字节指令——操作码一个字节, 操作数二个字节; 8086 指令格式: 操作码 操作数 51 单片机指令系统符号约定(在 8086CPU 中无特定符号约定) Rn——n=0~7。 当前寄存器组的 8 个通用寄存器。 Ri——i=0,1。(R0、 R1 只能用做间接寻址寄存器) Direct——表示 8 位存储器地址 #data 表示 8 位立即数; #data16 表示 16 位立即数 Bit——片内 ram 直接寻址位 @——间接寻址前缀 MCS-51 单片机指令特点: 运算类指令, 位处理指令以及 MOV 型指令只能用以处理片 地址 (汇编起始地址命令) END (汇编终止命令。 用于结束对汇编语言源程序的汇编工作) DB(定义字节型数据命令。) DW(定义字型数据命令) EQU( 给符号赋值命令。 ) 8086CPU 汇编语言伪指令: 伪操作包括: 数据定义、 符号定义、 段定义、 过程定义、 段对准(定位)、 汇编结束等。 完整的汇编语言源程序的基本框架结构。 data segment ┇ data ends code segment assume ds:data,cs:code main proc far ┇ ┇ main endp subp proc ┇ subp endp code ends end main 8086CPU 存在一定的差异, 但二者可实现相同的功能。 除了编写不同外, 二者的编译和运行、 调试过程也不同。 MCS-51 单片 机 在 WAVE 软件下进行编 译、 调 试、 和 运行。 在其过程中 分别 生成.ASM .DSK .PRJ 文件, 并且在 WAVE 中可直接进行调试, 观察生成结果。 而在 8086CPU汇编过程中生成源文件 (.ASM)、 目标文件 (.OBJ)、 列表文件 (.LST) 及可执行文件 (.EXE),并且要在 DEBUG 下进行调试得到最终的运行结果。 MCS-51 单片机与 8086CPU 汇编语言相同点是: 都包括主程序和子程序, 并在主程序中对子程序进行调用; 都同时使用了指令语言和伪指令语言; 都是按照 4 分段书写格式(标号字段, 操作码字段, 操作数字段, 注释字段); 二者具有相同的分析问题的思路和方法, 都可经过流程图确定相应框架, 然后再对程序进行编写、 调试和运行等过程。 二者汇编语言存在差异的原因: MCS-51 单片机与 8086CPU 在硬件结构上有所不 同, MCS-51 单片机的存储器采用的是哈弗结构, 而 8086CPU 采用的是冯诺依曼结构, 由题 1 可知冯诺依曼结构和哈弗结构特点存在不同(这里不再重复其不同点) 所以不同的硬件设施需要不同的软件语言作支持, 所以要想实现理想的功能 MCS-51 单片机与 8086CPU 的汇编语言有所不同。