华科光电 单片机第一次试验报告.docx

上传人:b****6 文档编号:6260061 上传时间:2023-01-04 格式:DOCX 页数:11 大小:278.28KB
下载 相关 举报
华科光电 单片机第一次试验报告.docx_第1页
第1页 / 共11页
华科光电 单片机第一次试验报告.docx_第2页
第2页 / 共11页
华科光电 单片机第一次试验报告.docx_第3页
第3页 / 共11页
华科光电 单片机第一次试验报告.docx_第4页
第4页 / 共11页
华科光电 单片机第一次试验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

华科光电 单片机第一次试验报告.docx

《华科光电 单片机第一次试验报告.docx》由会员分享,可在线阅读,更多相关《华科光电 单片机第一次试验报告.docx(11页珍藏版)》请在冰豆网上搜索。

华科光电 单片机第一次试验报告.docx

华科光电单片机第一次试验报告

《微机实验》报告

实验名称

专业班级姓名学号序号

联系方式

 

一、任务要求

1.掌握KeilC环境的使用

1)字节拆分、合并:

调试e421.asm程序,观察相关寄存器和单元的内容。

2)数据块填充:

调试fill.asm程序,观察相关寄存器和单元的内容。

2.编写两个十六位数的加法程序。

有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。

二、设计思路

1.对于两个程序的调试,由于代码已经给出,只需利用软件进调试。

字节拆分程序调试

数据块填充程序调试

2.对于16位无符号数的加法,可以先低位相加,再高位相加,分别存入相应地址。

在低位相加时,使用ADD指令即可,而在高位相加时,应考虑进位,故使用ADDC指令,考虑到高位相加也可能产生进位,故分配另一个地址存放。

三、资源分配

根据题目的条件,将加数与被加数分别存放在以20H、30H开始的数据区中,然后将二者之和存放于寄存器R3(高8位)、R4(低8位),进位位存放于R2中。

四、流程图

 

五、源代码(含文件头说明、资源使用说明、语句行注释)

Filename:

test01.asm

Description:

两个16位数加法的程序

Date:

2013/09/30

Designed:

haha

Sourceused:

20H:

加数A的低位

21H:

加数A的高位

30H:

加数B的低位

31H:

加数B的高位

R4:

和的低位

R3:

和的高位

R2:

和的进位位

ORG0000H

LJMPSTART

ORG0100H

START:

MOV20H,#78H;将加数存放到相应的内存中

MOV21H,#56H

MOV30H,#76H

MOV31H,#98H

MOVR0,#20H;以R0作为被加数的地址索引

MOVR1,#30H;以R1作为加数的地址引索引

MOVA,@R0

ADDA,@R1;低字节相加

MOVR4,A;存放低字节之和至寄存器R4

INCR0

INCR1:

地址索引加1

MOVA,@R0

ADDCA,@R1;高字节相加带进位位

MOVR3,A;高字节之和存入R3

CLRA;将A清零

ADDCA,#00H

MOVR2,A;将进位位存入R2

END

 

六、程序测试方法与结果、软件性能分析

测试方法:

手动输入两个加数,运行程序,观察结果是否正确。

在调试过程中,跟踪A、R4、R3、R2的值,看是否与预期相同。

结果:

各项指标均与预期相同,程序正确。

截图如下

附加:

思考题

1.怎样查看工作寄存器、SFR、片内RAM、片外RAM及程序代码空间内容?

Disassembly窗口有何作用?

答:

点击调试后,在左侧Register窗口中可以清晰的看到,工作寄存器R0-R7,特殊功能寄存器SFW,和PSW中的内容。

再右下角Memory窗口中,输入d:

0x____可以看片内RAM的内容;输入x:

0x____可以查看片外RAM的内容。

输入c:

0x____可以查看程序代码空间内容。

Disassembly窗口的作用是显示每一步指令的执行情况,包括源代码的储存位置机器码和相应的助记符。

2.字节拆分、合并还有哪些方法,举一例说明。

答:

可以使用逻辑运算类指令屏蔽高四位和第四位,再对第四位和高四位进行操作,然后利用SWAP指令,就可以完成字节的拆分和合并。

不妨设20H单元中有待操作数86H,要将其字节拆分,高四位存于R3,低四位存于R4,接着进行字节的合并,将合并后的结果存于R2中,源代码如下:

ORG0000H

LJMPSTART

ORG0100H

START:

MOV20H,#86H;20H单元赋初值

MOVA,20H;20H单元的内容赋给A

ANLA,#0FH;高四位清零

MOVR4,A;低四位存于R4

MOVA,20H;20H单元内容赋给A

ANLA,#0F0H;低四位清零

SWAPA;低四位移至高四位

MOVR3,A;结果存于R3,字节拆分结束

SWAPA;移回低四位

ADDA,R4;A中的内容与R4的内容相加

MOVR2,A;结果存于R2中,字节合并完成

HERE:

SJMPHERE

END

调试结果如下:

字节拆分字节合并

 

3.若按递减一的规律填充数据块,应如何修改程序

答:

程序的修改后的源代码如下:

ORG0000H

LJMPSTART

ORG0100H

START:

MOVA,#0FFH;将立即数OFFH存入累加器A

MOVR0,#00H;RO指向00H

MOVDPTR,#7000H;DPTR指向7000H

FILL:

MOVX@DPTR,A;传递到片外RAM

DECA;A减一

INCDPTR;数据指针加一

INCR0;修改循环计数器

CJNER0,#00H,FILL;判断是否结束

HERE:

SJMPHERE;原地踏步

END

调试截图如下:

4.若从7020H单元开始,连续填充10个字节,应该如何修改程序?

ORG0000H

LJMPSTART

ORG0100H

START:

CLRA;累加器A清零

MOVR0,#0AH;设计数器初值

MOVDPTR,#7020H;设数据指针初值

FILL:

MOVX@DPTR,A;传送到片外RAM

INCA;累加器A加一

INCDPTR;数据指针加一

DJNZR0,FILL;判断是否结束

HERE:

SJMPHERE;原地踏步

END

结果如图

5.若完成双字节BCD码加法,应如何修改程序?

不妨设第一个BCD码存于40H,41H;第二个存于45H,46H

程序代码:

ORG000H

LJMPSTART

ORG0100H

START:

MOVA,40H;将加数低8位存入A

ADDA,45H;两者低8位相加,和存于A

DAA;二-十进制转化

MOV50H,A;和的低8位存于50H

MOVA,41H;将加数高位存于A

ADDCA,46H;两者高8位相加,和存于A

DAA;二—十进制转化

MOV51H,A;和的高位存于51H

HERE:

SJMPHERE

END

七、心得与体会

通过本次试验,了解了keil软件的安装与使用,强化了各种转移指令,运算指令的应用。

基本熟悉了汇编语言的格式与使用规则,受益匪浅。

在独立完成实验的同时,锻炼了我们保持冷静,独立思考的能力。

 

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

当前位置:首页 > 表格模板 > 合同协议

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

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