ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:537.26KB ,
资源ID:4793137      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4793137.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机实验一.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机实验一.docx

1、微机实验一单片微型计算机实验第一次实验姓名: Elliott班级: xxxxxx学号: xxxxxxxxx电话: xxxxxxxxxx一、任务要求1.调试例程,观察相关寄存器和单元的内容。2.编写两个十六位数的加法程序。有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。3.编写两个双字节BCD码的加法程序。有两个双字节BCD码,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。4.编写程序,使之实现从片外RAM的7020H单元开始,连

2、续填充10个字节的数据的功能。5.编写程序,实现对片外RAM按递减1规律填充数据块的功能。二、设计思路1.无符号十六位数加法对于无符号十六位加法,低八位使用不带标志位的加法,相加后存放。由于此处可能有进位,所以下一次加法时要用带进位标志位的加法。为了避免程序最初时CY标志位的随机取值影响带高八位运算的结果,最好在做第一加法的之前将CY置零。获取最高位进位位时,还是采用ADDC指令,所以两个加数应该都是0。为了程序的扩展性能,读取加数时,采用R0和R1做指针,这样只要把加数的初始位置赋给R0和R1后,便可以通过R0和R1的自加实现自动取下一位值。这样有利于多位数相加时的循环实现,同时程序的移植性

3、也得到提高。2.双字节BCD码加法本程序的实现方式和无符号十六位加法的实现方式没有本质上的区别,不同之处在于通过加法获得相加的结果后,要用DA指令将数据调整为BCD码,然后再存储数据。3.顺序填充数据对于片外RAM的数据访问,只有通过MOVX DPTR,A这条指令实现,所以要写入的数据得先存放在A当中,DPTR中存放地址。每次写入数据后,将DPTR的数据加一,指针向下移一位。由于要写入大量的数据,所以要采用循环,采用工作寄存器R0来计数,用CJNE指令来实现循环的控制。4.逆序填充数据逆序填充的程序和顺序填充的程序并没有太大的区别,但是由于DPTR没有自减一的指令,所以需要换一种方式来实现。D

4、PTR实际上是DPH和DPL两个字节组成的,而DPH和DPL都具有自减一的指令,通过对DPH和DPL的修改便可以实现逆序填充。三、资源分配1.无符号十六位加法20H、21H、30H、31H:存放加数R0、R1:用做数据指针R2、R3、R4:存放结果2.双字节BCD码加法20H、21H、30H、31H:存放加数R0、R1:用做数据指针R2、R3、R4:存放结果3.顺序填充片外RAM的7020H至702AH:存放数据R0:存放数据用于循环控制累加器A:存放要写入片外RAM的数据4.逆序填充片外RAM的7020H至702AH:存放数据R0:存放数据用于循环控制R1:用于保护累加器A中的内容累加器A:

5、存放要写入片外RAM的数据四、流程图1.无符号十六位数加法2.双字节BCD码加法3.顺序填充4.逆序填充五、源代码1.无符号十六位加法 ORG 0000H LJMP MAIN ORG 0200HMAIN: MOV 20H, #0A0H MOV 21H, #11H MOV 30H, #0A0H MOV 31H, #23H MOV R0 , #20H ;R0指向加数1首地址 MOV R1 , #30H ;R1指向加数2首地址 CLR C MOV A , R0 ADD A , R1 MOV R4 , A ;不带标志位相加,结果存放于R4 INC R0 INC R1 ;修正指针 MOV A , R0

6、ADDC A , R1 ;带符号相加 MOV R3 , A ;存放 MOV R2 , #00H ;R2置零 MOV A , #00H ;A清零 ADDC A , R2 MOV R2 , A ;存放进位位 SJMP $ END 2.双字节BCD码加法ORG 0000H LJMP MAIN ORG 0200HMAIN: MOV 20H, #55H MOV 21H, #11H MOV 30H, #50H MOV 31H, #23H ;赋值 MOV R0,#20H ;R0指向加数1首地址 MOV R1,#30H ;R1指向加数2首地址 CLR C MOV A , R0 ADD A , R1 DA A

7、;修正结果 MOV R4 , A ;结果存放于R4 INC R0 ;修正指针 INC R1 ;修正指针 MOV A , R0 ADDC A , R1 ;带进位相加 DA A ;修正结果 MOV R3 , A ;存放结果 MOV R2 , #00H ;R2清零 MOV A , #00H ;A清零 ADDC A , R2 ;带进位位加法 DA A ;修正结果 MOV R2 , A ;存放 SJMP $ ;原地踏步 END3.顺序填充ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV SP, #40HFILL: CLR A ;累加器A清零 MOV R0, #00H ;设循环

8、计数器 MOV DPTR, #7000H ;设数据指针FILL1: MOVX DPTR, A ;传送到片外RAM INC A ;A内容加1 INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 CJNE R0, #09H, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步 END 4.逆序填充ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV SP,#40H CLR A ;A累加器清零 MOV R0, #00H ;设为循环计数器 MOV DPTR, #7020H ;设为数据指针 FILL1: MOVX DPTR, A ;将数据写到片外R

9、AM INC A ;A内容加1 MOV R1,A ;将A的值给R1,保护A的内容 MOV A,DPL ;将DPTR低八位给A CLR C SUBB A,#00H ;将A与00H做减法, JZ HDO ;若为零说明则DPH要减1,;跳转到HDO处,否则顺序执行 SJMP GOON ;若顺序执行则跳转,;用于屏蔽高八位减1的代码HDO: DEC DPH ;DPTR高八位减1GOON: MOV A,R1 ;还原A的数据 DEC DPL ;DPTR低八位减1 INC R0 ;修改循环计数器 CJNE R0, #0AH, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步 END 六、

10、程序测试方法与结果、软件性能分析1.程序测试方法本次上机实验程序调试的方法是用Keil进行仿真,用“d:xxxx”和“x:xxxx”命令查看片内RAM和片外RAM的数据。在Register窗口查看累加器A、DPTR和R0,R1,R2,R3,R4内的内容。2.测试结果1)无符号十六位加法 从左侧的Register窗口可以看到11A0H+23A0H运算结果是003540H(R2、R3、R4)说明程序是正确的。2)双字节BCD码加法 从左侧的Register窗口可以看到1155+2350的结果是003405(R2、R3、R4),说明程序是正确的。3)顺序填充可以看到片外RAM的7000H到7009H

11、顺序写入了0到9共十位数,说明程序是正确的。4)逆序填充可以看到片外RAM的7017H到7020H被逆序写上了0到9,说明此算法能够完成逆序写数据的功能,但是不能说明此代码能够应对DPL向DPH借位的情况,下一张图将证明本代码确实能够实现该功能。可以看到片外RAM的7017H到7020H被逆序写上了0到9,说明此算法能够完成逆序写数据的功能,并能应对DPL向DPH借位的情况。5)BCD码与ASCII码转换调试 数字4的ASCII码为34H,9为39H,在memory窗口中可以看到片内RAM的31H存放的是34H,32H存放的是39H,33H存放的是由片内RAM的31H和32H单元的数据转换成的

12、BCD码。3.软件性能分析由于本次程序设计的时候所有的代码都有良好的可移植性,同时采用了循环或者循环雏形,这样的程序在以后处理大量数据时有良好的性能。采用指针的方式进行数据访问,在对其他区域的数据进行处理时只需要修改数据的起始地址。七、心得与体会虽说我在上单片机这门课之前我已经和单片机打了一年的交道,也用单片机做了一些中小型的程序,但是都是用C51来做的。使用C51的时候从来没有考虑过很多底层的东西,比如说两个数相加,用汇编的时候得考虑什么时候用ADD,什么时候用ADDC而在C51中只要用“+”就完成了。看起来用汇编要麻烦很多,但是这才是真正的懂了单片机。在编写逆序存放的代码时候我最终想到用修改DPL和DPH来修改DPTR的数据,从功能上我实现了要求,同时我也加深了对DPTR工作原理的认识。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1