好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

单片机存储器填充程序实验报告

单片机存储器填充程序实验报告 本文关键词:存储器,单片机,填充,实验,程序

单片机存储器填充程序实验报告 本文简介:实验一单片机存储器填充程序一、实验目的1、了解单片机汇编语言程序的基本结构2、了解单片机汇编语言程序的设计和调试方法3、掌握几个的基本的传送类、控制类指令的使用方法二、实验仪器单片机开发板、万利仿真机、稳压电源、计算机三、实验原理1、单片机存储器的结构51系列单片机数据存储器分为内部直接寻址存储器(

单片机存储器填充程序实验报告 本文内容:

实验一

单片机存储器填充程序

一、实验目的

1、了解单片机汇编语言程序的基本结构

2、了解单片机汇编语言程序的设计和调试方法

3、掌握几个的基本的传送类、控制类指令的使用方法

二、实验仪器

单片机开发板、万利仿真机、稳压电源、计算机

三、实验原理

1、

单片机存储器的结构

51系列单片机数据存储器分为内部直接寻址存储器(工作寄存器区,位寻址区),内部间接寻址存储器,外部存储器。如图3-1所示。

00H-07FH

0000H-0FFFFH

外部数据存储器,需要扩展,有些单片在内部扩展一部分

80H—0FFH

直接寻址区,用于特殊功能,有很多没有用

80H—0FFH

间接寻址区,保存一般数据,52单片机内部有高128B存储器

通用存储器

30H-7FH

位寻址寄存器

20H-2FH

工作寄存器

00H-1FH

图3-1

单片机存储器结构

2、

单片机内部存储器操作指令

51单片机内部将数据存储器划分成多个区域,每个区域用的存储器访问指令也不相同(操作码或操作数不同)。

a、内部直接寻址通用存储器访问指令

MOVA

,40H;将内部直接寻址存储器中的40H单元内容复制到累加器A

MOVR2

,30H;将内部直接寻址存储器中的40H单元内容复制到寄存器R2

MOV30H,40H;将内部直接寻址存储器中的40H单元内容复制到30H

MOVA

,@R0;将R0指向的内部直接寻址存储器的内容复制到累加器A

PUSHACC;将累加器A的内容复制到堆栈栈顶

POPACC;将堆栈指针SP指向的内部直接寻址存储器内容复制到A

b、内部间接寻址通用存储器访问指令

MOVA

,@R0;将R0指向的内部间接寻址存储器的内容复制到累加器A

MOVA

,@R0;将累加器A的内容复制到R0指向的内部间接寻址存储器

PUSHACC;将累加器A的内容复制到系统堆栈栈顶

POPACC;将堆栈指针SP指向的内部间接寻址存储器内容复制到A

c、内部位寻址区存储器访问指令

MOVC

,00H;位寻址区的00H位内容复制到C标志

MOV01H,C;将C标志内容复制到位寻址区的00H

3、

单片机外部数据存储器操作指令

MOVXA

,@DPTR;将DPTR指向的外部存储器的内容复制到累加器A

[email protected]

,A;将累加器A的内容复制到由DPTR指向的外部存储器

四、实验内容

1、单片机内部RAM填充程序

开始

装备输入参数

填充一字节

指向下一字节

完成?

完成,退出

图3-2

区域填充程序流程图

Y

N

把单片机片内30H—50H的单元全部清零。流程图如图3-2所示。

ORG0

LJMPSTART

ORG100

START:

MOVA,#00H;填充的内容

MOVR0,#30H;填充的区域的首地址

MOVR7,#32;填充的区域的字节数

RamClear:

[email protected],A;填充数据

INCR0;下一单元

DJNZR7,RamClear;没有完成,则返回

SJMP$;填充完成

2、采用输入参数的方式设计的程序

ORG0

LJMPSTART

ORG100

START:

MOVA,#00H

MOVR0,#30H

MOVR7,#32

LCALLRamClear

SJMP$-3

;------------------------------------------------------------------------------

;RAM区域填充

;输入:A:填充内容,R7:填充字节数,R0:填充指针(加计数)

;输出:无

;-------------------------------------------------------------------------------

RamClear:

[email protected],A

INCR0

DJNZR7,RamClear

RET

3、采用宏汇编结构设计的程序

在万利集成开发环境中建立项目文件,并建立两个文件,添加到项目中,文件内容如下:

File:Init.asm

PUBLIC

RamClear

MiscCodeSEGMENTCODE

RSEGMiscCode

RamClear:

[email protected],A

INCR0

DJNZR7,RamClear

RET

END

在主程序中调用另一个文件中的子程序,要在调用之前声明是引用外部程序。

File:mainpro.asm

EXTRNCODE(RamClear)

……

MOVR7,#32

MOVA,#00H

MOVR0,#30H

LCALLRamClear

SJMP$-3

……

END

五、实验步骤及调试信息

(1)、新建实验项目xuefenghai

(2)、输入实验程序并补充完整

(3)、编译下载实验程序,并修改错误(按附录说明)

1、编译出错:

提示:MISSING

END

STATEMENT

原因:文件结尾处没有写END。

修改后正确:

2、全速运行程序出现以下现象:

原因:驱动器的选择出现错误。

(4)全速运行程序,查看实验现象。

实验前的数据

内容1运行后的数据

内容2运行数据如下:

6、单步执行,分析各程序的功能特点。

若单步执行,则实验结果会从30H逐步执行,实现逐步清零。同时R0从30H逐渐递增到3CH,R7从0CH逐渐递减到00H。

7、整理实验设备

六、实验思考题

1、实验内容1对哪些单元进行清零,程序是否执行正确?

答:实验1从30H到3CH进行清零,程序执行正确。

2、说明MOV、MOVX、MOVC三条指令的区别。

答:MOV:

单片机内部的寄存器或者存储器之间相互传递数据(内部RAM),MOVX:

单片机内部的A累加器与片外的数据存储器(片外RAM)或I/O传送数据的指令,MOVC:

单片机内部的A累加器向ROM(程序存储器)读取数据,因为程序存储器是固定的不可以写的,所以,A只能读数据,却不能向它写数据。

3、如果要在单片机内部填充N个双字节数,请写出相关程序?

ORG

0

LJMP

START

ORG

100

START:

MOV

DPTR,#0001H;填充的内容

MOV

R0,#30H

;填充的区域的首地址

MOV

R7,#N

;填充的区域的字节数

RamClear:

MOV

@R0,DPH

;填充数据

INC

R0

MOV

@R0,DPL

INC

R0;

;下一单元

DJNZ

R7,RamClear

;没有完成,则返回

SJMP

$

;填充完成

END

七、实验心得体会

通过这次实验,让我重新认识了单片机的内部信息,以及他那强大的功能,也让我认识到要想学好单片机,必须学会这些实验,以及要对这些实验现象等要有很多深层次的认识。只有这样我们才算是没白学过这门课。

TAG标签: