微机实验一.docx

上传人:scccc 文档编号:12055856 上传时间:2021-12-01 格式:DOCX 页数:13 大小:605.39KB
返回 下载 相关 举报
微机实验一.docx_第1页
第1页 / 共13页
微机实验一.docx_第2页
第2页 / 共13页
微机实验一.docx_第3页
第3页 / 共13页
微机实验一.docx_第4页
第4页 / 共13页
微机实验一.docx_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《微机实验一.docx》由会员分享,可在线阅读,更多相关《微机实验一.docx(13页珍藏版)》请在三一文库上搜索。

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没有自减一的指令,所以需要

4、换一种方式来实现。DPTR实际上是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:存放数据用于循环控制R

5、1:用于保护累加器A中的内容累加器A:存放要写入片外RAM的数据四、 流程图1. 无符号十六位数加法推荐精选2. 双字节BCD码加法3. 顺序填充4. 逆序填充推荐精选五、 源代码1. 无符号十六位加法 ORG 0000HLJMP MAINORG 0200HMAIN:MOV 20H, #0A0HMOV 21H, #11HMOV 30H, #0A0HMOV 31H, #23HMOV R0, #20H ;R0指向加数1首地址MOV R1 , #30H ;R1指向加数2首地址CLR CMOV A , R0ADD A , R1MOV R4 , A ;不带标志位相加,结果存放于R4INC R0 INC

6、R1 ;修正指针推荐精选MOV A , R0ADDC A , R1 ;带符号相加MOV R3 , A ;存放MOV R2 , #00H ;R2置零MOV A , #00H ;A清零ADDC A , R2 MOV R2 , A ;存放进位位SJMP $END2. 双字节BCD码加法ORG 0000HLJMP MAINORG 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

7、 A , R1 DA A ;修正结果 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 ORG0100HMAIN:MOV SP, #40H推荐精选FILL: CLR A ;累加器A清零 M

8、OV R0, #00H ;设循环计数器 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 LJMPMAIN ORG0100HMAIN: MOV SP,#40H CLR A ;A累加器清零 MOV R0, #00H ;设为循环计数器 MOV DPTR, #7020H ;设为数据指针FILL1: MOVXDPTR

9、, A ;将数据写到片外RAM INC A ;A内容加1MOV R1,A ;将A的值给R1,保护A的内容MOV A,DPL;将DPTR低八位给ACLR CSUBB A,#00H ;将A与00H做减法,JZ HDO ;若为零说明则DPH要减1,;跳转到HDO处,否则顺序执行SJMPGOON ;若顺序执行则跳转,;用于屏蔽高八位减1的代码HDO: DECDPH;DPTR高八位减1GOON: MOVA,R1 ;还原A的数据DECDPL ;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) 顺序填充可以看到片外R

11、AM的7000H到7009H顺序写入了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存放的是由片内

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1