微机原理与接口技术软件实验3451单片机算术运算比较和查表

上传人:仙*** 文档编号:35008016 上传时间:2021-10-25 格式:DOC 页数:12 大小:123KB
收藏 版权申诉 举报 下载
微机原理与接口技术软件实验3451单片机算术运算比较和查表_第1页
第1页 / 共12页
微机原理与接口技术软件实验3451单片机算术运算比较和查表_第2页
第2页 / 共12页
微机原理与接口技术软件实验3451单片机算术运算比较和查表_第3页
第3页 / 共12页
资源描述:

《微机原理与接口技术软件实验3451单片机算术运算比较和查表》由会员分享,可在线阅读,更多相关《微机原理与接口技术软件实验3451单片机算术运算比较和查表(12页珍藏版)》请在装配图网上搜索。

1、本科实验报告课程名称:微机原理与接口技术姓 名:陈肖苇学 院:信息与电子工程学院专 业:电子科学与技术学 号:3140104580指导教师:黄凯2016年 11 月 17 日专业:_电子科学与技术_姓名: 陈肖苇 学号: 3140104580 日期: 2016.11.17 地点:教十一400室 实验报告课程名称: 微机原理与接口技术 指导老师: 黄凯 成绩:_实验名称: 单片机软件实验三四 实验三 算术运算1. 基础型实验内容 以下程序完成单字节的BCD码加法功能,完成空白处程序填写,并在WAVE环境运行程序,观察寄存器及内存单元的变化。代码: RESULT EQU 30H ORG 0000H

2、 MOV A,#99H MOV B,#99H ADD A,B DA A ; BCD码相加并得到BCD码结果,即对结果进行十进制处理 MOV RESULT, A MOV A,#00H ADDC A,#00H ;加上进位 MOV RESULT+1, A ;高位处理 LJMP $ END实验现象:30H开始的内部单元中被放入了结果,低位在前,即98 01。图一:单字节的BCD码加法结果,即99+99=01 98 下列程序完成多字节BCD码加法运算。内部RAM30H开始的4字节长的BCD码和外部RAM 1000H开始的4字节长的BCD码相加,结果放在1100H开始的单元中(从低字节到高字节)。代码:

3、ORG 0000H CLR C MOV R5, #04H MOV R0,#30H MOV R1,#10H MOV R2,#00H MOV R3,#11H MOV R4,#00HL0: MOV DPH,R1 MOV DPL,R2 MOV A,#15H ;1000H开始的外部RAM都写入15H MOVX DPTR,A MOV R0,#15H ;30H开始的内部RAM都写入15H INC R2 INC R0 DJNZ R5,L0 MOV R0,#30H ;重新初始化 MOV R2,#00H MOV R5, #04HL1: MOV DPH,R1 MOV DPL,R2 MOVX A,DPTR ADDC

4、A, R0 DA A ;十进制调整 MOV DPH,R3 MOV DPL,R4 MOVX DPTR,A INC R2 INC R4 INC R0L2: DJNZ R5, L1 JNC L3 MOV DPTR,#1104H ;有进位则结果的第五个字节置1 MOV A,#01H MOVX DPTR,A SJMP EXITL3: MOV DPTR,#1104H ;若没有进位则置为00H MOV A,#00H MOVX DPTR,AEXIT:END 代码分析:L0部份为我自己单独加入的部份,原来的代码会使FFH+00H=66H的错误,因为DA指令只可对BCD码表示的数进行调整,即只能调整09,而F为1

5、6,不是十进制数,所以会产生调整错误。加入L0段,使加法变为15H+15H=30H(BCD码加法)。同时,源代码在产生进位的时候会将第1104H位置1,没有进位的时候为FFH,所以又将L3的NOP改为了若没有进位,则置为00H,使结果更加合理。实验现象:外部RAM的1100H开始的连续五个单元变为30 30 30 30 0图二:完成多字节BCD码加法运算之后,1100H单元开始的内存单元变为30 30 30 30 00 2. 设计型实验内容 设计程序,实现任意字节压缩BCD码的相加,使用单步、断点方式调试程序,查看结果。代码: MOV R0,#30H ;BCD码的起点 MOV R2,#00H

6、;写入值 MOV R1,#40H ;BCD码的起点 MOV R3,#10H MOV R4,#0AH ;写入次数控制L1: MOV A,R2 ;30H开始的内部RAM写入00H09H MOV R0,A MOV A,R3 ;40H开始的内部RAM写入10H19H MOV R1,A INC R0 INC R1 INC R2 INC R3 DJNZ R4,L1 MOV R0,#30H ;重新初始化 MOV R1,#40H MOV DPH,#10H ;求和后的结果保存点1000H MOV DPL,#00H MOV R4,#0AH ;求和次数控制 CLR CL2: MOV A,R0;开始求和 ADDC A

7、, R1 DA A ;十进制调整 MOVX DPTR,A INC R0 INC R1 INC DPL DJNZ R4,L2 ;循环求和十次 JNC L3 ;无进位则求和结果最后一位的下一个字节置0 MOV A,#01H ;有进位则求和结果最后一位的下一个字节置1 MOVX DPTR,A SJMP EXITL3: MOV A,#00H MOVX DPTR,AEXIT: END实验现象: 外部RAM中存入了求和结果10 12 14 16 18 20 22 24 26 28 00(低位在前)图三:初始化后内存中的BCD码值(低位在前)图四:求和后的结果 设计程序,实现多字节十六进制数的减法12345

8、6H005634H,使用单步、断点方式调试程序,查看结果。代码: ORG 0000H MIN EQU 30H;被减数 SUB EQU 40H;减数 RES EQU 50H;结果存放 MOV MIN,#12H;初始化被减数 MOV MIN+1,#34H MOV MIN+2,#56H MOV SUB,#00H;初始化减数 MOV SUB+1,#56H MOV SUB+2,#34H CLR C MOV A,MIN+2;从最后一位开始求差 SUBB A,SUB+2 MOV RES+2,A MOV A,MIN+1;开始求差 SUBB A,SUB+1 MOV RES+1,A MOV A,MIN;开始求差

9、SUBB A,SUB MOV RES,A END实验结果:30H和40H开始的单元处被存入被减数和减数123456和005634(高位在前),50H开始存入十六进制减法结果11DE22。图五:123456(30H)-005634(40H)=11DE22(50H)实验四 比较和查表1. 基础型实验内容 以下程序完成共阴数码管数值显示译码的功能,在WAVE环境运行程序,观察寄存器及内存单 元的变化,将变化结果注释于右侧。代码:ORG 0000H MOV R2,#10H ;循环16次 MOV DPTR,#TBL ;将表头地址存入DPTRL0: MOV A,#00H MOVC A,A+DPTR ;变址

10、寻址查表 INC DPTR ;DPTR自增,查找下一个 DJNZ R2,L0 ;循环16次 SJMP $TBL:DB 3FH,06H,5BH,4FH,66H,6DH ;表格 DB 7DH,07H,7FH,6FH,77H,7CH DB 58H,5EH,79H,71H,00H,40H END实验结果:ROM区从0013H开始存入表格3FH40H。对于内部寄存器,R2循环10H之后,最终值为0;A中最终值为71H,即TBL中的第16个数。图六:ROM区从0013H开始存入表格3FH40H图七:对于REG,R2循环10H之后,最终值为0;A中最终值为71H,即TBL中的第16个数。 以下子程序完成一个

11、两位十六进制数到ASCII码的转换,数值存放在R2中,转换结果地位存于R2,高位存于R3。用PC做基址实现。代码: ORG 0000H HEXA:MOV R2,#1BH ;将1BH存入R2 MOV A,R2 ANL A,#0FH ;取A的低4位 ADD A,#09H ;以PC为基址的偏移量 MOVC A,A+PC ;以PC为基址寻址 XCH A,R2 ;交换A与R2中的内容 ANL A,#0F0H ;得到A的高位 SWAP A ;将高位换到地位 ADD A,#02H ;以PC为基址的指令偏移量 MOVC A,A+PC MOV R3,A ;高位结果写回R3 RETTAB: DB 0,1,2,3,

12、4 DB 5,6,7,8,9 DB A,B,C,D,E,F END实验现象: 转换后的结果存入R2、R3,其中,R2中存入低位B的ASCII码,即42;R3中存入高位1的ASCII码,即31图九:R2中存入低位B的ASCII码,即42;R3中存入高位1的ASCII码,即31图十:ROM中从0012H开始存入0F的ASCII码3145 以下程序完成256字节范围内程序散转的功能,根据R7的内容转向各个子程序,在WAVE环境运行程序,观察寄存器及内存单元的变化,将变化结果注释于右侧。代码: ORG 0000HSTART: MOV DPTR,#TAB ;将表头地址传给DPTR MOV A, R7 A

13、DD A, R7 ;R7*2为了与JMP A+DPTR的机器码匹配,若TAB JMP A+DPTR ;中的AJMP 换成LJMP则R7*3 ORG 0100HTAB: AJMP PROG0 ;无条件跳转到对应地址 AJMP PROG1 AJMP PROG2 AJMP PROG3 SJMP $PROG0: MOV A,#00H ;对应的给A赋值 SJMP REPROG1: MOV A,#01H SJMP REPROG2: MOV A,#02H SJMP REPROG3: MOV A,#03HRE: NOPEND代码解读:先将R7中的值赋给A,再将A中数据扩大两倍当作指令的偏移量;DPTR作为散转

14、表的起始地址;通过JMP A+DPTR指令,寻找到对应的指令,然后跳转到相应指令对A赋值。整个代码的功能是通过散转的方法,将R7中的值写入A。实验现象: 代码执行后,R7中值为00,A中数据被写入00;修改代码,加入一条MOV R7,#01H,则代码执行之后,R7中值为01,A中数据被写入01。图十: R7中值为00,A中数据被写入00图十一:R7中值为01,A中数据被写入012.设计型实验内容 分别用近程查表指令和远程查表指令,查找R3内容的平方值。 R3内容小于等于0FH,即平方值为单字节数据。代码:近程查表: ORG 0000H MOV R3,#15 ;取数 MOV A,R3 ADD A

15、,#04H ;偏移量 MOVC A,A+PC ;近程查表 MOV 30H,A SJMP $TAB:DB 0,1,4,9,16 ;平方值表格构建 DB 25,36,49,64,81 DB 100,121,144,169,196,225END实验结果:内部RAM的30H处写入E1(即14*16+1=225,即15的平方),完成设计目标。图十一:代码执行后,内部RAM的30H处写入E1远程查表: ORG 0000H MOV R3,#10 ;取出R3中的值 MOV A,R3 MOV DPTR,#TAB ;将表头地址写入DPTR MOVC A,A+DPTR ;远程查表 MOV 30H,A SJMP $T

16、AB:DB 0,1,4,9,16 ;平方值表格构建 DB 25,36,49,64,81 DB 100,121,144,169,196,225 END实验现象:内部RAM的30H处写入64(即6*16+4=100,即10的平方),完成设计目标。图十二:代码执行后,内部RAM的30H处写入64 在外部RAM 1000H开始处有10H个带符号数,请找出其中的最大值和最小值,分别存入内部RAM的MAX、 MIN单元。代码: MAX EQU 30HMIN EQU 31H ORG 0000H MOV R7,#0FH ;循环次数 MOV DPTR,#1000H ;将外部RAM起始地址存入DPTR MOVX

17、A,DPTR ;将对应数据存入A ADD A,#80H ;加80H便于直接比较,将有符号数化为无符号数 MOV MAX,A ;初始化MAX(即存入第一个数) MOV MIN,A ;初始化MIN(即存入第一个数)L1: INC DPTR ;读入下一个数 MOVX A,DPTR ADD A,#80H CLR C CJNE A,MAX,S1 ;相减比较,若不想相等则跳转至S1 ,且若AMAX,则将C置1 SJMP NEXT ;相等则跳到NEXTS1: JC S2 ;若C=1,则说明AMAX,则跳转至S2 MOV MAX,A ;将MAX值更新 SJMP NEXTS2: CJNE A,MIN,S3 ;相

18、减比较,若不想相等则跳转至S2 ,且若AMIN,则转入NEXT MOV MIN,A ;否则,将MIN更新NEXT:DJNZ R7,L1 ;判断循环次数,若没到0FH次,则继续循环 MOV A,MAX SUBB A,#80H MOV MAX,A ;得到最大值 MOV A,MIN SUBB A,#80H MOV MIN,A ;得到最小值 SJMP $ END实验结果:内部RAM30H处,即MAX处,写入最大值7A; 31H处,即MIN处,写入最小值00;同时,因为是有符号数,所以对含有负数的进行检测,也符合要求,完成设计目标。 图十三:手动修改后的外部RAM值,其中最大值为7A,最小值为00图十四

19、:内部RAM30H处,即MAX处,写入最大值7A; 31H处,即MIN处,写入最小值00图十五:当有负数时的结果,最小值为9C(有符号数)实验心得:经过微机软件实验,自己可谓是收获颇丰。首先,最重要的就是熟悉了各种各样的指令以及具体的使用方法。课本上的学习难免会显得冰冷一点,而对一些存有疑问的地方(一个指令有几个操作的,比如DJNZ是先减一再判断,还是先判断再减一),通过具体的实验,基本上解决了存在的疑惑。同时也发现了一些自己学习上的漏洞,比如:关于访问不同存储区间的不同指令;比如对几种寻址模式的理解等等。(在这里不得不吐槽一下51真的有点落后了,寄存器间接寻址只有R0,R1,对于一个对字节的

20、加法,如果要用循环的话,两个加数就用掉了,和要存入的话就很麻烦,要来回倒腾)其次,我觉得为实验指导书的模块还是划分的比较好的,基本上在课本上或者是课堂上所讲解的典型的应用程序都有涉及到,所以,对于典型的操作,现在已经基本上掌握了。但是美中不足的是,实验指导书中也有一定的美中不足,比如有的填空题,要填多行,却只给了一行的空,有的地方还没有留空;还有一些细节的,就是有些观察现象的实验,没有初始化,导致00H+FFH=FFH,实际内容还是FFH,看不出来变化,还要自己来写入一些值才可以看到变化,希望可以修改一下。最后,因为这个学期一直比较忙,参加了好多培训班。所以交的有些迟,还望助教您能谅解,谢谢。祝好!

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!