单片机汇编语言程序设计实验报告.docx

上传人:b****2 文档编号:1325865 上传时间:2022-10-20 格式:DOCX 页数:21 大小:218.83KB
下载 相关 举报
单片机汇编语言程序设计实验报告.docx_第1页
第1页 / 共21页
单片机汇编语言程序设计实验报告.docx_第2页
第2页 / 共21页
单片机汇编语言程序设计实验报告.docx_第3页
第3页 / 共21页
单片机汇编语言程序设计实验报告.docx_第4页
第4页 / 共21页
单片机汇编语言程序设计实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机汇编语言程序设计实验报告.docx

《单片机汇编语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《单片机汇编语言程序设计实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

单片机汇编语言程序设计实验报告.docx

单片机汇编语言程序设计实验报告

单片机汇编语言程序设计实验报告

单片机实验1汇编语言程序设计实验

----存储器块赋值

一.实验目的

1熟悉存储器的读写方法,熟悉51汇编语言结构。

2熟悉循环结构程序的编写。

3熟悉编程环境和程序的调试。

二.实验内容

指定存储器中某块的起始地址和长度,要求将其内容赋值。

例如将4000H开始的100个字节内容清零或全部赋值为33H(参考程序),

要求根据参考程序修改:

修改程序,赋值内容为(10,9,8,7,6,5,4,3,2,1。

三.实验仪器

微机、VW,WAVE6000编程环境软件,(单片机实验箱)

仿真器--仿真器设置-→

选择仿真器选择仿真头选择CPU

Lab8000/Lab6000通用微控制器MCS51实验8051

前3个软件实验勾选√使用伟福软件模拟器

四实验步骤

注意:

1文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。

2查看存储器菜单使用:

窗口---数据窗口---XDATA观察存储器内容

3查看SFR:

窗口---CPU窗口查看CPU寄存器SFR

4单步执行:

执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。

5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。

编译器默认设置:

程序框图

 

参考例程序:

Blockequ4000h

movdptr,#Block;起始地址

movr0,#10;清10个字节

mova,#33h;将33H赋值给a

Loop:

movx@dptr,a将a写入外部RAM

incdptr;指向下一个地址

djnzr0,Loop;记数减一

ljmp$;$当前程序指针相当于一直执行自己;ljmp$

end

说明:

$:

是当前语句的程序指针(地址)相当于一直执行自己:

ljmp$,程序死循环

要求赋值数据为10,9,8,7,6,5,4,3,2,1

则以上程序该如何改动?

自己修改程序实现。

修改后的程序:

Blockequ4000h

movdptr,#Block;起始地址

movr0,#10;清10个字节

mova,#0ah;将0ah赋值给a

Loop:

movx@dptr,a;将a写入外部RAM

incdptr;指向下一个地址

deca;a值减一

djnzr0,Loop;记数减一

ljmp$;$当前程序指针相当于一直执行自己;ljmp$

end

 

单片机实验2存储块移动

一.实验目的

1熟悉51汇编语言程序结构。

2熟悉循环结构程序的编写,进一步熟悉指令系统。

3熟悉编程环境和程序的调试。

二.实验内容

将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。

需要先对3000H开始的源数据块赋值为10,9,8.......1。

3.实验仪器微机、WAVE6000软件,(单片机实验箱)

微机、VW,WAVE6000编程环境软件,(单片机实验箱)

仿真器--仿真器设置-→

选择仿真器选择仿真头选择CPU

Lab8000/Lab6000通用微控制器MCS51实验8051

注意:

在编程环境中,可以通过软件仿真,观察程单片机运行情况。

四实验步骤

参考程序与流程图

 

参考程序

移动3000H-->3050H,10字节

由于源地址和目的地址的内容都一样(FF),调试时看不到内容的变化,所以需要给源地址内容赋值。

如要求赋值内容为10,9,8,7,6,5,4,3,2,1。

有多种赋值方式,如以下两种分别独立完成:

1在搬移循环体内赋值一个搬移一个,请在参考程序1的?

处补充程序

2循环体外赋值,先全部赋值再搬移,请在参考程序2的?

处添加赋值程序。

参考程序1

movr0,#30h

movr1,#00h

movr2,#30h

movr3,#50h

movr7,#10

Loop:

movdph,r0;将dptr高八位给r0

movdpl,r1;将dptr低八位给r1

mova,r7;将r7的值赋给a

movx@dptr,a;将a写入RAM/IO口

movxa,@dptr;读外部RAM/IO口

decr7;r7减一

movdph,r2;将dptr高八位给r2

movdpl,r3;将dptr低八位给r3

movx@dptr,a;将a写入RAM/IO口

incr1;r1加一

incr3;r3加一

djnzr7,Loop;计数减一

ljmp$;$当前程序指针相当于一直执行自己;ljmp$

 

参考程序2

movr0,#30h

movr1,#00h

movr2,#30h

movr3,#50h

movr7,#10

Blockequ3000h

Movdptr,#Block;起始地址

movr4,#10;清10个字节

mova,#0ah;将oah赋值给a

Next:

movx@dptr,a;将a写入RAM/IO口

incdptr;指向下一个地址

deca;a旳值减一

djnzr4,Next;计数减一

Loop:

movdph,r0;将dptr高八位给r0

movdpl,r1;将dptr低八位给r1

movxa,@dptr;读外部RAM/IO口

movdph,r2;将dptr高八位给r2

movdpl,r3;将dptr低八位给r3

movx@dptr,a;将a写入RAM/IO口

incr1;r1加一

incr3;r3加一

djnzr7,Loop;计数减一

ljmp$;$当前程序指针相当于一直执行自己;ljmp$

 

单片机实验3数据排序

一.实验目的

1了解数据排序的常用算法,掌握冒泡算法。

2进一步熟悉编程环境和调试方法。

3熟悉汇编程序设计。

二.实验内容

使用冒泡算将法50H开始的10个随机数按从小到大的顺序排列。

三.实验仪器

微机、WAVE6000编程环境

四实验步骤

注意:

由于上电后数据都一样,所以需要手动修改50H后10个数据(要排序的数)方法是:

窗口---数据窗口---DATA找到50H开始的10个2位16进制数,双击,修改其数值如(6,2,9,4,3,7,1,5,8,0)之后编译(下载),单步执行,查看排序执行过程

冒泡算法(两层循环,以下是内层循环开始……)。

6,2,9,4,3,7,1,5,8,0

前大后小交换位置如下:

2,6,9,4,3,7,1,5,8,0

前小后大不交换位置如下;

2,6,9,4,3,7,1,5,8,0

前大后小交换位置如下;

2,6,4,9,3,7,1,5,8,0…第一次内层循环结束顺序如下:

最大的数9先冒出来

2,6,4,3,7,1,5,8,0,9接着开始第二次内层循环……

 

参考程序:

Sizeequ10;数据个数

Arrayequ50h;数据起始地址,需要自己设置10个比较数的值

Changeequ0;交换标志

Sort:

;外层循环

movr0,#Array

movr7,#Size-1

clrChange;清零Change

Goon:

;内层循环

mova,@r0

movr2,a

incr0

movB,@r0

cjnea,B,NotEqual;比较a,B不相等转移

sjmpNext;跳转到Next

NotEqual:

jcNext;前小后大,不交换

setbChange;前大后小,置交换标志;排序是否结束标志?

xcha,@r0;交换

decr0;r0减一

xcha,@r0;交换

incr0;r0加一

Next:

djnzr7,Goon;计数减一

jbChange,Sort;直接寻址位=1,则转移

ljmp$;$:

当前程序指针相当于一直执行自己;ljmp$

end

 

考虑效率问题,每次从外层循环进入内层循环(Goon),相邻数两两比较的次数可以少一次,理论上提高效率一倍。

参考程序如下:

Sizeequ10;数据个数

Arrayequ50h;数据起始地址

Changeequ0;交换标志

movr7,#Size-1

Sort:

;外层循环

movr0,#Array

mova,r7

movr6,a

clrChange;清零Change

Goon:

;内层循环

mova,@r0

movr2,a

incr0

movB,@r0

cjnea,B,NotEqual;比较a,B不相等转移

sjmpNext;跳转到Next

NotEqual:

jcNext;前小后大,不交换

setbChange;前大后小,置交换标志

xcha,@r0;交换

decr0;r0减一

xcha,@r0;交换

incr0;r0加一

Next:

djnzr6,Goon;计数减一

decr7;r7减一

jbChange,Sort;直接寻址位=1,则转移

ljmp$;$当前程序指令指针

end

单片机实验4P1口输入输出实验

一.实验目的

1.熟悉P1口的功能。

2.熟悉延时子程序或定时中断程序的编写和使用。

3.初步熟悉单片机软硬件设计方法。

二.实验内容(两内容分开做)

1.P1口做输出口接八只发光二极管,编写程序,使发光二极管循环亮灭。

注意:

实验箱(LAB6000)的发光二级管LED是高电平点亮,低电平灭。

2.P1.0,P1.1作输入口接两个拨动开关,P1.2,P1.3作输出口,接两个发光二极管。

编写程序读取开关状态,将此状态在发光二极管上显示出来。

三.实验仪器

微机,WAVE6000/VW编程环境、实验箱

硬件实验需要连接硬件仿真器,连接方式如下:

实验箱的仿真器/仿真器设置:

选择仿真器选择仿真头选择CPU

LAB6000通用微控制器/LAB8000MCS51实验8031/51

注意:

当P1口用作输入口时,必须先对它置”1”。

编程时应注意P1.0,P1.1作为输入时应先置1,才能正确读入值。

四实验步骤

(1)流程图:

 

(2)实验程序及注释:

参考程序:

注:

实验箱LED灯1亮0灭

内容1参考程序:

Loop:

mova,#01h(0FEH)将01H赋值给累加器A

movr2,#8将常数8赋值给给R2

Output:

输出函数子程序

movP1,a将A中01H在p1口输出

rla将累加器A的值左移一位

callDelay调用延时子程序延时

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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