哈工大单片机实验报告

来源:工作范文网 时间:2020-11-26 11:33:48

哈工大单片机实验报告

Harbin Institute of Technology

单片机原理与应用

实验报告

学生姓名 学班专

号 级 业

: : : : : :

任课教师 所在单位

软件实验

-1-

在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。

实验一 清零程序

一、实验目的

掌握汇编语言设计和调试方法,熟悉键盘操作。

二、实验内容

把2000~20FFh的内容清零。

三、程序框图

四、实验过程

实验中利用MOVX语句,将外部存储器指定内容清零。利用数据指针DPTR完成数据传送工作。程序采用用循环结构完成,R0移动单元的个数,可用CJNE比较语句判断循环是否结束。

五、实验结果及分析

【问题回答】清零前2000H~20FFH中为内存里的随机数,清零后全变为0。

-2-

六、实验源程序

;清零程序 ORG 0640H

MOV DPTR,#2000H ;(2000H)送DPTR MOV R0,#00H

HERE: MOVX @DPTR,A ;0送(DPTR)

INC DPTR ;DPTR+1 INC R0

CJNE R0,#0FFH,HERE SJMP $ END

实验二 拆字程序

一、实验目的

掌握汇编语言设计和调试方法。

二、实验内容

把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。

三、程序框图

四、实验过程

将寄存器中内容送入2000H,分别将高低四位移到低位,将高四位置零然后移入2001H和2002H中。利用MOVX指令、DPTR指针可实现数据的传送,利用高低四位交换指令SWAP和与指令ANL可进行对高低位的清零。

五、实验结果及分析

-3-

【问题回答】将ANL A,#0FH改为ORL A,#0F0H可以实现将高位置为1。

六、实验源程序

; 拆字程序

START:MOV DPTR,#2000H MOVX A,@DPTR MOV R0,A SWAP A ANL A,#0FH INC DPTR MOVX @DPTR,A MOV A,R0 ANL A,#0FH INC DPTR MOVX @DPTR,A ENDEND

实验三 拼字程序

一、实验目的

进一步掌握汇编语言设计和调试方法。

二、实验内容

把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。

-4-

三、程序框图

四、实验过程

本实验主要应用与指令ANL对高四位进行屏蔽,利用SWAP指令将2000H低四位交换到高四位,再用或ORL语句将2000H和2001H的高低四位组合在一起送入2002H中,从而实现两个数低四位组合。

五、实验结果及分析

【问题回答】本实验运行程序后2002H内容为34H,即2000H单元中低四位“3”作为2002H的高四位,2001H的低四位“4”作为2002H的低四位。

六、实验源程序

;拼字程序

START: MOV DPTR,#2000H MOVX A,@DPTR ANL A,#0FH SWAP A MOV B,A INC DPTR MOVX A,@DPTR

-5-

ANL A,#0FH ORL A,B INC DPTR MOVX @DPTR,A

END

实验四 数据区传送子程序

一、实验目的

掌握RAM中的数据操作。

二、实验内容

把R2、R3源RAM区首址内的R6、R7字节数据传送到R4、R5目的RAM区。

三、程序框图

四、实验过程

实验要求将一段内存中数据移动到另一段内存中,本次实验通过寄存器内容截图显示,是把0000H单元开始20H个字节的内容送到1000H开始的连续数据单元中。先把初始地址分别放入源地址寄存器和目的地址寄存器,然后利用一组寄存器作为需转移数据区长度计数器,开始数据转移循环。每进行一次转移地址寄存器向下加一,计数寄存器内容减一,计数寄存器内容为0退出循环移动结束。由于计数以及地址寄存器是由两个八位寄存器组成,需要在加一减一时对其高字节和低字节进行判断。加一时若低字节加一变为0,则高字节加一,否则低字节加一高字节不变。减一时若低字节已是0则高字节减一,同时低字节变为0FFH,否则低字节减一高字节不变。

-6-

五、实验结果及分析

【问题回答】如图R4、R5定义的目的地址单元中转移之前为随机数,转移后内容与以R2、R3开始的的源地址单元中20个字节内容相同,即实现了数据的传送。

六、实验源程序

;数据区传送子程序 START: MOV R0,#03H MOV R2,#00H MOV R3,#00H MOV R4,#10H MOV R5,#10H HERE: MOV DPH,R2 MOV DPL,R3 MOVX A,@DPTR MOV DPH,R4 MOV DPL,R5 MOVX @DPTR,A INC R3 INC R5 DEC R0

CJNE R0,#01H,HERE END

-7-

实验六 查找相同数个数

一、实验目的

熟悉汇编语言编程。

二、实验内容

在2000~200FH中查出有几个字节是零,把个数放在2100H中。

三、程序框图

四、实验过程

实验中利用R0放置需查找段长度,即从2000H单元开始,每次检查完一个单元R0减一,指针下移,直到R0等于0结束循环。R1存放等于零数据的个数,程序中利用等于零跳转指令JZ,实现找到0则R1加一计数的功能。循环终止后,将R1内容存入2100H中即可。

五、实验结果及分析

-8-

【问题回答】若需查找0FFH,只需将语句JZ LOOP1改为CJNZ R0, #0FFH, LOOP1即可,即数据等于0FFH时跳转到计数+1的程序段进行计数。

六、实验源程序

ORG 0000H LJMP MAIN

ORG 0AA0H

MAIN:MOV DPL,#00H

MOV DPH,#20H MOV R0,#10H

MOV R1,#00H

LOOP:MOVX A,@DPTR

JZ LOOP1 DEC R0 INC DPTR

SJMP LOOP2

LOOP1:INC R1

DEC R0

INC DPTR

LOOP2:CJNE R0,#00H,LOOP

MOV DPL,#00H MOV DPH,#21H MOV A,R1 MOVX @DPTR,A

SJMP $ END

-9-

实验七 无符号双字节快速乘法子程序

一、实验目的

掌握MCS-51汇编语言程序设计方法。

二、实验内容

将(R2 R3)和(R6 R7)中双字节无符号整数相乘,乘积送R4 R5 R6 R7中。

三、程序框图

四、实验过程

本程序是利用单字节的乘法指令MUL,根据下面的公式实现双字节数的乘法。

(R2 R3)×(R6 R7)

= ((R2)×28+(R3))×((R6)×28+(R7))

= (R2)×(R6)×216+(R2)×(R7)+(R3)×(R6)×28+(R3)*(R7)

将乘数与被乘数高低字节拆开分别相乘,然后再将每个高字节因子向前移动8位进行调整,进行加权求和。利用ADDC语句可实现带进位的加法运算。得到的最终结果存入R4、R5、R6、R7寄存器中。

五、实验结果及分析

【问题回答】寄存器R2、R3、R6、R7分别输入01、10、11、10,运行程序,即进行0110H

-10-

  • 下载文档
  • 收藏
  • 0