微处理器实验报告.docx
- 文档编号:11814262
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:15
- 大小:622.22KB
微处理器实验报告.docx
《微处理器实验报告.docx》由会员分享,可在线阅读,更多相关《微处理器实验报告.docx(15页珍藏版)》请在冰点文库上搜索。
微处理器实验报告
微处理器实验报告
实验1熟悉并使用传送类指令
题3.模仿test1.Asm的循环结构,编写多字节数据的传送程序,把内部RAM的30H--39H单元置为10H-19H,然后传送到外部RAM的0100H--0109H单元。
提示:
(1)用寄存器作内部RAM指针,用DPTR作外部RAM指针。
(2)设置内部RAM的30H--39H单元的值为10H-19H:
解:
程序如下:
ORG0000H
AJMPSTART
ORG0100H
START:
MOVR1,#10H
MOVDPTR,#0100H
MOVR2,#0AH
LOOP:
MOVA,@R1
MOVX@DPTR,A
INCR1
INCDPTR
DJNZR2,LOOP
NOP
SJMP$
END
运行结果如下图所示:
在memory1中,在Address控件填上D:
0x30,可查看内部RAM30h单元开始的值,将30h-39h置为10h-19h。
实验2:
熟悉并使用算术逻辑操作类指令
题2.编写程序,将6位压缩BCD码123456与6位BCD码567890相加,结果仍用BCD码表示。
第一组BCD码放在30H开始连续的内部存储器单元内,第二组BCD码放在40H开始连续的内部存储器单元内,相加结果放在50H开始的连续的内部存储器单元内。
解:
程序如下:
ORG0000H
AJMPSTART
ORG0100H
START:
MOV30H,#56H
MOV31H,#34H
MOV32H,#12H
MOV40H,#90H
MOV41H,#78H
MOV42H,#56H
MOVR0,#30H
MOVR1,#40H
MOVR2,#03H
MOVR3,#50H
LOOP:
MOVA,@R0
ADDA,@R1
DAA
MOV@R1,A
INCR0
INCR1
INCR3
DJNZR2,LOOP
NOP
SJMP$
END
运行结果如下:
实验3:
顺序程序设计:
拆字和拼字
题1.拆字程序
69H存放在片外RAM中0200H地址上。
编写程序,将69H拆开,高位6送0201H地址的低位,低位9送0202H地址的低位;0201H、0202H地址的高位清零,如图所示:
片外RAM
片外RAM
0201H
0200H
69H
0202H
06H
09H
解:
程序如下:
ORG0000H
AJMPSTART
ORG0100H
START:
MOVDPTR,#0200H
MOVXA,@DPTR
MOVB,A
SWAPA
ANLA,#0FH
INCDPTR
MOVX@DPTR,A
INCDPTR
MOVA,B
ANLA,#0FH
MOVX@DPTR,A
LOOP:
SJMPLOOP
END
运行结果如下:
题2.拼字程序
分别编写汇编语言程序和C程序,把片内RAM30H、31H两个字节的低位分别送入32H的高位和低位,过程与拆字程序相反。
假设(30H)=12H,(31H)=34H,运行程序后(32H)=24H
提示:
使用逻辑或ORL指令,例如10H和02H相或,结果为12H
解:
程序如下:
ORG0000H
AJMPSTART
ORG0100H
START:
MOVA,30H
ANLA,#0FH
SWAPA
MOVB,31H
ANLB,#0FH
ORLA,B
MOV32H,A
LOOP:
SJMPLOOP
END
运行结果如下:
该程序的C51程序如下:
#include
#include
voidmain()
{
DBYTE[0x30]=0x12;
DBYTE[0x31]=0x34;
DBYTE[0x030]&=0x0f;
DBYTE[0x030]<<=4;
DBYTE[0x031]&=0x0f;
DBYTE[0x32]=DBYTE[0x030]+DBYTE[0x031];
}
运行结果如下:
实验4:
分支和循环程序设计
题1.分支程序设计:
(1)有两个8位无符号数NA、NB分别存放在内部RAM的40H,41H单元,当NA
源程序如下。
请画出该程序流程图,并比较汇编语言和C51程序编写的不同。
汇编语言程序:
ORG0000H
AJMPSTART
ORG0100H
START:
MOVA,40HN
CJNEA,41H,LOOP1
AJMPLOOP2Y
LOOP1:
JCLOOP3
LOOP2:
MOV42H,#0FFH
AJMPLOOP
LOOP3:
MOV42H,#88H
LOOP:
AJMPLOOP
END
C51程序如下:
#include
#include
voidmain()
{unsignedcharna,nb,f;
na=DBYTE[0x0040];
nb=DBYTE[0x0041];
if(na elsef=0xff; DBYTE[0x0042]=f; } 解: 流程图如上。 整体上看,汇编程序使用了多重循环,而C程序只应用了选择结构语句,显得更加简洁。 (2)修改上汇编语言程序,实现两个16位无符号数的比较: 当NA NA、NB分别存放在内部RAM的40H,41H及50H,51H单元。 解: 程序如下: ORG0000H AJMPSTART ORG0100H START: MOVA,40H CJNEA,41H,LOOP1 AJMPLOOP2 LOOP1: JCLOOP3 LOOP2: MOV42H,#0FFH AJMPLOOP LOOP3: MOV42H,#88H LOOP: AJMPLOOP END 运行结果如下: 题2.循环程序设计 (1)在片内RAM的10H单元存放一个8位无符号二进制数,要求将其每一位转换成相应的ASCII码,并以高位在前,低位在后的顺序依次存放到片内RAM以11H单元为首的连续单元中,编制相应的程序。 分析: 用带进位的循环左移指令RLC,通过对C标志的判断,可知该位为1还是0。 解: 该程序的C51程序为: #include"reg51.h" #include"absacc.h" voidmain() { intj; unsignedchari; unsignedcharpoint=0x11; for(i=0x01,j=0;j<8;i<<=1,j++) { if(DBYTE[0x10]&i) { DBYTE[point]=31; }else { DBYTE[point]=30; } point++; } } 运行结果如下: 题3.选做: 编写程序,从内部RAM的40H为起始地址的10个无符号数中分别找出最大值和最小值并保存。 解: 程序如下: ORG0000H AJMPSTART ORG0100H START: MOVR2,#0AH MOVR0,#40H MOVA,@R0 MOV51H,@R0 MOV52H,@R0 INCR0 LOOP0: CJNEA,51H,LOOP1 MOV51H,A LOOP1: JCLOOP2 MOV51H,A LOOP2: INCR0 MOVA,@R0 DJNZR2,LOOP0 LOOP: AJMPLOOP END 程序运行结果如下: 五.实验收获 四次微处理器实验,让我获益颇多。 现在回想起来,每次程序调试成功的喜悦似乎还未淡去。 首先,此次实验最重要也是最基本的收获,就是我很好的了解了KeilC51这个单片机应用开发集成环境。 通过编写一些简单的汇编及C程序,进一步理解C51单片机的运作方式和内部变化情况。 实践与理论的结合,让我在学习《单片机原理与接口技术》时能够融会贯通,对书上的程序有了更深的理解。 与此同时,许多问题也在实验中得以解决,特别是运行程序时,要观察内部RAM和外部RAM的变化,通过在memory中的Address控件中输入C: 0x00,D: 0x00,X: 0x00可分别查看ROM、片内RAM、片外RAM这三个存储区的数据等,知识就是力量,今天我们努力获取知识,明天我们必将使用我们掌握的知识改变世界。 感谢老师的辛勤指导,路漫漫其修远兮,在求知的道路上,我们还将披荆斩棘,一路向前。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微处理器 实验 报告