单片机汇编语言程序设计实验报告Word格式文档下载.docx
《单片机汇编语言程序设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机汇编语言程序设计实验报告Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
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
则以上程序该如何改动?
自己修改程序实现。
修改后的程序:
mova,#0ah;
将0ah赋值给a
movx@dptr,a;
将a写入外部RAM
deca;
a值减一
单片机实验2存储块移动
1熟悉51汇编语言程序结构。
2熟悉循环结构程序的编写,进一步熟悉指令系统。
将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。
需要先对3000H开始的源数据块赋值为10,9,8.......1。
3.实验仪器微机、WAVE6000软件,(单片机实验箱)
在编程环境中,可以通过软件仿真,观察程单片机运行情况。
参考程序与流程图
参考程序
移动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
incr1;
r1加一
incr3;
r3加一
djnzr7,Loop;
计数减一
ljmp$;
参考程序2
movr0,#30h
movr3,#50h
Blockequ3000h
Movdptr,#Block;
起始地址
movr4,#10;
清10个字节
mova,#0ah;
将oah赋值给a
Next:
指向下一个地址
deca;
a旳值减一
djnzr4,Next;
计数减一
movdph,r0;
movdpl,r1;
movxa,@dptr;
movdpl,r3;
incr3;
单片机实验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减一
incr0;
r0加一
djnzr7,Goon;
jbChange,Sort;
直接寻址位=1,则转移
$:
当前程序指针相当于一直执行自己;
考虑效率问题,每次从外层循环进入内层循环(Goon),相邻数两两比较的次数可以少一次,理论上提高效率一倍。
参考程序如下:
数据起始地址
movr0,#Array
mova,r7
movr6,a
clrChange;
清零Change
前小后大,不交换
前大后小,置交换标志
r0减一
incr0;
djnzr6,Goon;
decr7;
$当前程序指令指针
单片机实验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参考程序:
mova,#01h(0FEH)将01H赋值给累加器A
movr2,#8将常数8赋值给给R2
Output:
输出函数子程序
movP1,a将A中01H在p1口输出
rla将累加器A的值左移一位
callDelay调用延时子程序延时