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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机实验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利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。

编译器默认设置:

程序框图

参考例程序:

Block equ 4000h

mov dptr, #Block ; 起始地址

mov r0, #10 ; 清10个字节

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

Loop:

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

inc dptr ; 指向下一个地址

djnz r0, Loop ; 记数减一

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

end

说明:

$:是当前语句的程序指针(地址)相当于一直执行自己:ljmp $,程序死循环

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

则以上程序该如何改动? 自己修改程序实现。

修改后的程序:

Block equ 4000h

mov dptr, #Block ; 起始地址

mov r0, #10 ; 清10个字节

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

Loop:

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

inc dptr ; 指向下一个地址

dec a ;a值减一

djnz r0, Loop ; 记数减一

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

单片机实验2 存储块移动

一.实验目的

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

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

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

二.实验内容

将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。需要先对3000H开始的源数据块赋值为10,9 , 8.......1。

三.实验仪器微机、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

mov r0, #30h

mov r1, #00h

mov r2, #30h

mov r3, #50h

mov r7, #10

Loop:

mov dph, r0 ;将dptr高八位给r0

mov dpl, r1 ;将dptr低八位给r1

mov a, r7 ;将r7的值赋给a

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

movx a, @dptr ;读外部RAM/IO口

dec r7 ;r7减一

mov dph, r2 ;将dptr高八位给r2

mov dpl, r3 ;将dptr低八位给r3

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

inc r1 ;r1加一

inc r3 ;r3加一

djnz r7, Loop ;计数减一

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

参考程序2

mov r0, #30h

mov r1, #00h

mov r2, #30h

mov r3, #50h

mov r7, #10

Block equ 3000h

Mov dptr,#Block ;起始地址

mov r4, #10 ;清10个字节

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

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

inc dptr ;指向下一个地址

dec a ;a旳值减一

djnz r4, Next ;计数减一

Loop: mov dph, r0 ;将dptr高八位给r0

mov dpl, r1 ;将dptr低八位给r1

movx a, @dptr ;读外部RAM/IO口

mov dph, r2 ;将dptr高八位给r2

mov dpl, r3 ;将dptr低八位给r3

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

inc r1 ;r1加一

inc r3 ;r3加一

djnz r7, Loop ;计数减一

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

相关文档
最新文档