实验报告001.docx
- 文档编号:14389106
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:33
- 大小:369.83KB
实验报告001.docx
《实验报告001.docx》由会员分享,可在线阅读,更多相关《实验报告001.docx(33页珍藏版)》请在冰点文库上搜索。
实验报告001
专业:
____光电_________
姓名:
____程旭_________
学号:
___32____
日期:
地点:
___寝室
实验报告
课程名称:
__微机原理与接口技术__指导老师:
王晓萍成绩:
__________________
实验名称:
__软件实验1,2,3,4实验类型:
____同组学生姓名:
______________
一、实验目的和要求(必填)二、实验内容和原理(必填)
三、主要仪器设备(必填)四、操作方法和实验步骤
五、实验数据记录和处理六、实验结果与分析(必填)
七、讨论、心得
软件实验1:
一、实验目的
1.熟悉软件实验的基本步骤和汇编程序的调试方法;
2.了解内存块的移动方法;
3.了解将十六进制数转换成ASCII值的方法。
二、实验说明
1、实验例程1给定某块存储器的起始地址和长度,要求能将其内容清零。
通过该例程让学生可以了解单片机读写存储器的方法,同时可以了解单片机的编程、调试方法。
2、块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。
实验例程2是外部RAM之间的数据块移动。
将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去,用地址+1方法移动。
移动3000H起始的256个字节到4000H起始的256个字节。
三、实验内容及步骤
例程1:
1、启动PC机,打开KEIL软件(KEIL软件使用见附录一),软件设置为模拟调试状态。
在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
2、打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的MemoryWindow,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。
在Address窗口输入X:
8000H后回车,观察8000H-800FF起始的256个字节单元的内容,可以发现这256个字节的内容都为1。
3、软件的调试过程,可以看到程序执行的过程和各寄存器的变化情况,加深对实验的了解,用户也可改变A的值,那输出的内容也会改变。
例程2:
1、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
2、打开View菜单中的MemoryWindow,在Address窗口的Memory#1输入X:
3000H后回车,点击运行按钮后,在Memory#2输入X:
4000H后回车,通过比较,可观察到3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同,说明存储块已移动。
3、在单步或跟踪执行方式运行程序时,可以观察CPU窗口各寄存器的变化,看到程序执行的过程,加深对实验的了解。
四、流程图和源程序
例程1:
1.说明:
给外部RAM8000~80FFH的256个单元的内容赋值,赋值的内容取决于程序中A的赋值。
2.流程图:
3.源程序:
ORG0000H
START EQU 8000H
MAIN:
MOV DPTR,#START ;起始地址
MOV R0,#0 ;设置256字节计数值
MOV A,#1H
Loop:
MOVX @DPTR,A
INC DPTR ;指向下一个地址
DJNZ R0,Loop ;计数值减1
NOP
SJMP $
END
运行结果:
外部RAM8000H~80FFH的内容都为1。
例程2:
1.说明:
将3000H起始的256个字节存储块移动到4000H起始的256个字节存储块;
2.流程图:
3.源程序:
ORG 0000H
MOV DPTR,#3000H
MOV A,#01H
MOV R5,#O
LOOP:
MOVX @DPTR,A
INC DPTR
DJNZ R5,LOOP
MOV R0,#30H
MOV R1,#00H
MOV R2,#40H
MOV R3,#00H
MOV R7,#0
LOOP1:
MOV DPH,R0
MOV DPL,R1
MOVX A,@DPTR
MOV DPH,R2
MOV DPL,R3
MOVX @DPTR,A
INC R1
INC R3
DJNZ R7,LOOP1
SJMP $
END
运行结果:
3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同。
3000H开始:
4000H开始:
由图可知符合实验预期结果。
五、思考题
1、如何将存储器块的内容置成某固定值(例全填充为0FFH)请用户修改程序,完成此操作。
程序设计:
采用双重循环,外循环256次,内循环256次,一共65536次,即整个外部RAM存储单元的大小
源代码:
运行结果:
实现外部整个RAM存储块置1,即从0000H单元到0FFFF单元置1
从0000H单元开始:
到0FFFFH单元结束:
2、若源块地址和目标块地址有重叠,程序该如何设计(用地址减1方法移动块)假设源块地址2000H,目标块地址2050H,移动块长度80H。
程序设计:
即把块地址2000H----207FH单元的内容搬到2050H-20BF单元当中,采用地址减1法实现。
源代码:
运行结果:
把2000H单元-207F单元中的1H搬运到2050H单元—20BF单元
六、实验内容
3、将片内30H~3FH单元的内容复制到片外1030H~103FH中。
源代码:
将内部RAM30H-3FH单元置为如下:
将内部RAM30H-3FH单元当中的内容搬到外部RAM1030-103F单元当中:
4、将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中。
程序设计:
设刚开始时(30H)=1CH,(31H)=0D5H,如果程序运行正确,则应有(40H)=31(41H)=43H,(42H)=44H(43H)=35H
源代码:
运行结果:
由图可知程序运行正确,符合预期结论
5、试求内部RAM30H—37H单元中8个无符号数的算术和,2字节结果存入38H(低字节),39H(高字节)单元中。
如8个无符号数分别为:
25H,36H,4AH,65H,7FH,82H,9BH,1DH。
则计算结果为:
02C3H
源代码:
运行结果:
由图可知程序运行正确。
软件实验2:
一、实验目的
1、熟悉软件实验的基本步骤和汇编程序的调试方法;
2、掌握简单的数值算法;
3、掌握多分支结构程序的编程方法。
二、实验说明
单片机中的数值有各种表达方式,这是单片机的基础。
掌握各种数制之间的转换是一种基本功。
我们将给定的一字节二进制数,转换成十进制(BCD)码。
将累加器A的值转换为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123=7BH。
三、实验及步骤
1、启动PC机,打开KEIL软件,软件设置为模拟调试状态。
在所建的Project文件中添加例程的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
2、打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的MemoryWindow,在Address窗口输入D:
30H后回车,点击运行按钮,观察地址30H、31H、32H的数据变化,30H内容将更新为01,31H更新为02,32H更新为03。
3、在单步或跟踪执行方式运行程序时,可以观察CPU窗口各寄存器的变化,看到程序执行的过程,加深对实验的了解。
用户也可改变A的值,重复实验,观察实验效果。
四、例程流程图和源程序
1.例程说明:
将A的值转换为十进制数,存放在30H~32H中。
2.流程图:
3.源程序:
RESULT EQU 30H
ORG 0000H
SJMP START
BINTOBCD:
MOV B,#100
DIV AB
MOVRESULT,A ;除以100得百位数
MOV A,B
MOV B,#10
DIV AB
MOV RESULT+1,A ;余数除以10得十位数
MOV RESULT+2,B ;余数为个位数
RET
START:
MOV SP,#40H
MOV A,#123
CALL BINTOBCD
SJMP $
END
源代码:
运行结果:
30H~32H的内容分别为01,02,03
五、思考题
BCD码转换成二进制数的算法是什么例如:
(91)BCD对应的二进制数是多少
答:
把每一位BCD码译成对应的四位二进制码。
采用除2取余数法,直到被除数小于2为止。
把先到得到的余数放在低字节,后得到的余数放到高字节即可。
(91)BCD对应的二进制数是。
六、实验内容
1、无符号多字节二进制数据减法。
被减数放在30H开始的4个单元中(从低字节到高字节),减数放在40H开始的4个单元中(从低字节到高字节),差放入30H开始处(从低字节到高字节)。
例如:
输入(33H)=0x58,(32H)=0xA2,(31H)=0x34,(30H)=0x7E
(43H)=0x07,(42H)=0x68,(41H)=0x85,(40H)=0x3B
输出(33H)=0x51,(32H)=0x39,(31H)=0xAF,(30H)=0x43
源程序:
运行结果:
由运行结果可知,程序设计正确
2、多字节BCD码加法运算。
两个4字节长的BCD码加数分别存放在外部RAM0100H和0110H开始的单元中(从低字节到高字节),计算两数之和,结果保存在0120H开始的9个单元中。
例如:
输入(0100H)=0x10,(0101H)=0x32,(0102H)=0x54,(0103H)=0x76
(0110H)=0x78,(0111H)=0x56,(0112H)=0x34,(0113H)=0x92
则输出(0120)=0x88,(0121)=0x88,(0122)=0x88,(0123)=0x68,(0124)=0x01
源代码:
运行结果:
由图可知运行结果正确。
3、分别用近程查表指令和远程查表指令,查找R3内容的平方值。
R3内容小于等于0FH。
近程查表指令法,存放到内部RAM20H单元中:
远程查表指令法,存放到内部单元20H单元中:
软件实验3
一、实验目的
1、熟悉软件实验的基本步骤和汇编程序的调试方法;
2、掌握数值的加减运算;
3、掌握用查表的方法将BCD值转换成ASCII值。
二、实验说明
此实验主要让学生了解数值的BCD码和ASCII码的区别,利用查表方法可以快速地进行数值转换。
进一步掌握数值的各种表达方式。
现在我们给出一个BCD数,将其转换成ASCII值。
如下:
将累加器A的值转换为二个ASCII码,并存入Result开始的二个单元,例程A赋值#1AH。
三、实验及步骤
1、启动PC机,打开KEIL软件,软件设置为模拟调试状态。
在所建的Project文件中添加例程的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
2、打开CPU窗口,观察CPU窗口各寄存器的变化,打开View菜单中的MemoryWindow,在Address窗口输入D:
30H后回车,点击运行按钮,观察地址30H、31H的数据变化,30H更新为31,31H更新为41。
3、在单步或跟踪执行方式运行程序时,可以观察CPU窗口各寄存器的变化,看到程序执行的过程,加深对实验的了解。
用户也可改变A的值,重复实验,观察实验效果。
四、例程流程图和源程序
1.例程说明:
将A的值转换为对应的ASCII值,存放在30H、31H单元中。
2.流程图:
3.源程序:
RESULT EQU 30H
ORG 0000H
SJMP START
ASCIITAB:
DB ‘09ABCDEF' ;定义数字对应的ASCII表
BCDTOHEX:
MOV DPTR,#ASCIITAB
MOV B,A ;暂存A
SWAP A
ANL A,#0FH ;取高四位
MOVC A,@A+DPTR ;查ASCII表
MOV RESULT,A
MOV A,B ;恢复A
ANL A,#0FH ;取低四位
MOVC A,@A+DPTR ;查ASCII表
MOV RESULT+1,A
RET
START:
MOV SP,#40H
MOV A,#1AH
CALL BCDTOHEX
SJMP $
END
例程源代码:
运行结果:
30H、31H单元的结果分别为31,41。
五、思考题
BCD码和ASCII码有哪些区别
答:
BCD码是用4位二进制数表示,ASCII码是用8位二进制数表示。
并且BCD码分为压缩BCD码与非压缩BCD码,BCD码一共有10种状态,而ASCII一共有128种状态。
六、实验内容
1、查找关键字节(1字节),要查找的字节在R3中,一串字节存放在30H开始的20个单元中,查找结果放入A,若查找不到,则将FFH放入A.。
源代码:
2、在内部RAM的30H单元开始,有一串带符号数据块,其长度在10H单元中。
编程求其中正数与负数的和,并分别存入2FH与2EH开始的2个单元中。
(负数存放形式为补码)。
请分别在30H单元开始写入5个正数、11个负数和9个正数、7个负数的情况,记录程序运行结果。
例如:
输入-69H,65H,-7H,-25H,-47H,56H,-3H,17H,6H,-5H,-45H,-1H,-57H,23H,-5H,-13H。
结果应为:
正数的和89,负数的和-199H
源程序代码:
负数以对应补码输入,一共输入16个数,存放在内部RAM30H开始处。
分别为:
97H,65H,0F9H,0DBH,0B9H,56H,0FDH,17H,06H,0FBH,0BBH,0FFH,0A9H,23H,0FBH,0EDH如果程序运行正确,正数和为0FBH,负数和为0967H
运行结果:
高位在前,低位在后。
(2CH)是正数高位,(2DH)是正数低位,(2EH)是负数高位,(2FH)是负数低位。
由图可知,正数和为00FBH,负数和为0967H,所以程序运行正确。
3、要求同上。
请分别求出这一串数据块中正数、负数和零的个数,存入2FH、2EH和2DH单元中。
请分别在30H单元开始写入5个正数、8个负数、3个零和9个正数、5个负数、2个零的情况,记录程序运行结果。
例如:
输入61H,-19H,12H,0,78,3,-13H,0,17H,-89H,-5H,-14H,-31H,-43H,-67H,0
则2FH、2EH、2DH单元的值分别为5,8,3
源代码:
输入数据如下,一共3个0,8个负数,5个正数:
0E7H,0EDH,0FEH,0EBH,0ADH,0BCH,0BCH,0EAH
0,0,0
12H,78H,37H,65H,24H
0的个数存放在(2DH)中,负数个数存放在(2EH)中,正数的个数存放在(2FH)中
运行结果:
(2DH)=03,(2EH)=08,(2FH)=05说明有3个0,8个负数,5个正数,程序运行结果正确
软件实验4:
一、实验目的
1、熟悉软件实验的基本步骤和汇编程序的调试方法;
2、了解简单的函数计算;
3、掌握程序的多分支结构。
二、实验说明
多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。
若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。
三、实验及步骤
1、启动PC机,打开KEIL软件,软件设置为模拟调试状态。
在所建的Project文件中添加例程的源程序进行编译,编译无误后可以选择单步或跟踪执行方式或全速运行程序。
2、打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的MemoryWindow,在Address窗口输入D:
30H后回车,点击运行按钮,观察地址30H、31H、32H、33H的数据变化,30H更新为0,31H更新为1,32H更新为2,33H更新为3
3、在单步或跟踪执行方式运行程序时,可以观察CPU窗口各寄存器的变化,看到程序执行的过程,加深对实验的了解。
可修改源程序中给30H~33H的赋值,重复实验,观察实验效果。
四、例程流程图和源程序
1.例程说明:
程序顺序跳转到相应的地址,执行对应的操作。
2.流程图
3.源程序:
ORG 0000H
SJMP START
START:
MOVA,#0
CALL FUNCENTER
MOV A,#1
CALL FUNCENTER
MOV A,#2
CALL FUNCENTER
MOV A,#3
CALL FUNCENTER
SJMP $
FUNC0:
MOV 30H,#0
RET
FUNC1:
MOV31H,#1
RET
FUNC2:
MOV32H,#2
RET
FUNC3:
MOV33H,#3
RET
FUNCENTER:
ADDA,ACC;A×2
MOVDPTR,#FUNCTAB
JMP@A+DPTR
FUNCTAB:
AJMPFUNC0
AJMPFUNC1
AJMPFUNC2
AJMPFUNC3
END
源程序:
运行结果:
30H~33H单元的值分别为0、1、2、3。
五、思考题
1、写跳转程序时要注意些什么
答:
要注意跳转指令的范围
2、跳转的作用有哪些
答:
控制程序走向,根据不同条件转移到程序的不同分支。
六、实验内容
1、根据外部RAM8100H单元中的值X,决定Y的值,保存到8101H单元中。
2X X大于0时;
Y= 80H X等于0时;
X的反 X小于0时;
源代码:
设(8100H)初始值为05H,则运行结果应该为0AH
运行结果:
由图可知,程序运行正确。
2、编程实现2字节与1字节的乘法。
2字节数放在30H(高字节)、31H(低字节),1字节数放在32H,乘积请放在40H开始的4个单元中。
源程序代码:
设(30H)=01H(31H)=02H(32H)=05H
即258*5,如果程序运行正确则应等于1290,即050A。
运行结果:
由图可知,运行结果正确。
3、在外部RAM1000H开始处有10H个带符号数,请找出其中的最大值和最小值,分别存入内部RAM的MAX、MIN单元。
源代码如下:
已阅
实验心得
首先感谢老师您对我不厌其烦的指导,您那么及时的回复了我的邮件,解答了我的问题,还专门抽出了一个下午的宝贵时间给我远程在线指导。
在这里真心的谢谢您对我的帮助,谢谢您了!
从刚开始的一头雾水,不知道问题出现了什么地方,几天都没有进展,到最后用了仅仅一天半的时间把所有的软件实验做完,我心里十分高兴。
每一个程序编写的完成,我都可以享受到油然而生的成功的喜悦。
构思—编写---调试---ok是这一天半最真实的写照,也是我编程的程序,哈哈。
上课时很多东西当时都觉得听懂了,可真正上机实验的时候才发现了许许多多的问题。
而仅仅一个疏漏就使得编译无法通过。
学而不思则罔,思而不学则殆。
编程的过程就是一个复习,学习的过程,学习到的知识在实践时才掌握的更加的牢固与扎实。
从最最简单的mov指令,到循环,到多分支,到查表,一个个的知识点混合在一起,使得能力得到了最充分的锻炼。
最痛苦的时候莫过于调试的时候,一步一步的盯着屏幕查找错误,给自己的程序打上补丁;而有时候连编译都无法通过就更加痛苦了,自己必须尝试着去寻找一切可能的疏漏,一个题目常常几个小时都无法找到问题,没有丝毫的进展…
其中实验书上的有些地方是错误的,刚开始时按照书上的要求取做时,怎样都无法得到正确的答案,逼得自己最后实在没有办法了重新取读题目时,才发现了问题,找到了答案,所以不能盲目的迷信书本。
收获了很多快乐,谢谢老师!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 001