微机原理与接口技术软件实验报告

  • 格式:docx
  • 大小:290.77 KB
  • 文档页数:18

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一篇软件实验

实验一存储器块操作实验

一、实验目的

1. 熟悉KEIL集成调试环境和汇编程序的调试方法。

2. 掌握存储器读写方法;

3. 了解内存块的移动方法;

二、实验说明

实验1 指定某存储器的其实地址和长度,要求能将其内容赋值。通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。

块移动是单片机常用操作之一,多用于大量的数据复制和图像操作。例程2给出起始地址,用地址加1方法移动块,将指定源地址和长度的存储块移到指定目标为起始地址的单元中去。移动3000H起始的256个字节到4000H起始的256个字节。

三、实验内容

1. 试编程将片内RAM中的数据依次复制到片外RAM。假设源数据区的首地址为40H,目的数据区的首地址为1000H,数据块长度为10H。

流程图:

程序:

运行结果:

Memory显示,片内RAM中40H开始数据为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明测试数据已经成功输入片内RAM。从片外RAM中1000H位置开始记录为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明片内RAM从40H开始的数据已经成功复制到片外从1000H开始的地址。

2. 两个16位无符号二进制数分别存放在片外RAM首址为2000H和2002H单元内,将它们相加,结果存入RAM 30H(低8位)、31H(高8位)。

程序(以0506H+CDEFH为例):

0506H和CDEFH已存入片外单元,运算结果D2F5已存入30H和31H中。

四、思考题

1. 如何将存储块的内容置成某固定值(例全填充为0FFH)?请用户修改程序,完成此操作。答:将源程序中的MOV A, #01H 改为MOV A,#0FFH即可。

2. 若源块地址和目标地址有重叠,该如何避免?

答:先执行一次数据转移操作将源块地址中的数据先暂存入一块地址与目标地址和源块地址均不重叠的存储区,再执行一次数据转移操作将暂存区的数据移入目标地址区域。

五、心得体会

本次实验我学会了数据块的移动和赋值。片内数据的移动和计算比较简便,涉及到片外数据的计算时要增加移动到片内的步骤。当数据需要进行保护时可以设定数据暂存区。

本实验微机原理的第一个实验,刚开始编程时有一点困难。我体会到了汇编语言的特点。与其他语言相比,它不仅要求良好的逻辑能力,而且要求编程者有较好的硬件知识。比如本次实验中,一开始我的编译一直报错,原来是将MOVX A,@DPTR指令错写成了MOV A,@DPTR。MOV指令用于内部RAM数据传送,而MOV用于外部数据传送。我体会到只有充分了解单片机的硬件结构,才能使用正确的指令,让编程正确无误的进行。这也是我今后要加强学习的重点。

实验二数值转换实验

一、实验目的

1、熟悉Keil集成调试环境和汇编程序的调试方法。

2、掌握简单的数值转换算法。

3、基本了解数值的各种表达方法。

4、掌握数值的加减法运算。

5、掌握用查表的方法将BCD值转换成ASCII值。

二、实验说明

单片机系统内部运算用二进制,而输入输出常用十进制,以符合日常习惯,因此数制转换是仪表设计中常用的程序之一。单片机中的数值有各种表达方式,这是单片机的基础。掌握各种数制之间的转换是一种基本功。

三、实验内容

1. 把R

3中的8位二进制数转换成压缩BCD 码,存放在

45

R R中。

流程图:

程序:

从寄存器中R4、R5的记录可以知道,输入的源数据123被分解成01H和23H 分别储存在R4、R5,程序运行成功。

2. 设4位BCD码abcd依次存放在内部RAM中50H~53H单元的低4位,(高4位为0)。试编程将其转换为二进制数并存入R6R7中。

方法思路:

1)计算1000a,高位存入30H,低位存入31H

2)计算100c,高位存入32H,低位存入33H

3)计算10b,结果存入52H

4)计算1000a+100c,高位存入R0,低位存入R1

5)计算10b+d,结果存入R2

运行结果:

可知运行结果是2694H,与9876BCD转化成二进制码的结果一致,所以程序正确。

四、思考题

BCD码转换成二进制的算法是什么?例如:(91)BCD对应的二进制数是多少?

答:对于一个8位BCD码,高四位*10+低四位即为二进制。如(91)BCD=1001B*1010B+0001B=01011011B 五、心得体会

经过本实验,我对BCD码和二进制、十进制码之间的相互关系进行了更深一步的了解,学会了单片机这几种数制之间的相互转化。我深刻体会到,在运算中要注意单片机中数字溢出的问题。如在实验2中,计算1000*a,不能直接使用语句MOV A,#1000语句,因为无符号8位二进制数的表示范围只有0~255。所以将1000拆成100*10,与a相乘两次。至于先乘100还是10,考虑到BCD码,a的最大值是9,与10相乘不会产生进位,比较方便第二次与100相乘时的程序书写。如果与100相乘可能会出现结果大于255,程序编写比较复杂。以上思考分析过程需要对各种数制的特点非常了解,这也是一名工程人员的基本要求。

实验三程序跳转表实验

一、实验目的

1、熟悉KEIL集成调试环境和汇编程序的方法。

2、了解简单的函数计算。

3、掌握多分支结构程序的编程方法。

二、实验说明

多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号指向相应的功能,完成指定操作。若给出调用号来调用子程序,一般用查表法,查到子程序的地址,转到相应子程序。

三、实验内容

流程图如下: