软件实验
在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。
实验一 清零程序
一、实验目的
掌握汇编语言设计和调试方法,熟悉键盘操作。
二、实验内容
把2000~20FFh的内容清零。
三、程序框图
四、实验过程
(1)实验中定义R0为循环次数,利用定义了初值的数据指针DPTR不断加1指向需要被清零的外部数据存储器单元。
(2)再利用MOVX语句,将外部存储器指定内容清零。 (3)用CJNE比较语句判断循环是否结束。
五、实验结果及分析
-1-
问题回答:清零前2000H~20FFH中为内存里的随机数,清零后全变为0。
六、实验源程序
;清零程序 ORG 0000H MOV DPTR,#2000H MOV R0,#0FFH ORG 0660H
MAIN:
MOV A,#00H MOVX @DPTR,A INC DPTR DJNZ R0,MAIN END
实验二 拆字程序
一、实验目的
掌握汇编语言设计和调试方法。
二、实验内容
把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。
三、程序框图
四、实验过程
(1)定义数据指针DPTR为2000H,将其中内容送入累加器A中,利用高低四位交换语句SWAP可将高四位移至低四位,再用语句ANL与0FH进行与操作取出高四位送入2001H低位
(2)再次让数据指针DPTR为2000H,将其中内容送入累加器A中,直接与0FH相与取出低四位送入2002H低位。
五、实验结果及分析
-2-
问题回答:将ANL A,#0FH改为ORL A,#0F0H可以实现将高位置为1。
六、实验源程序
;拆字程序
ORG 0000H MAIN:
MOV DPL, #00H
MOV DPH, #20H MOVX A, @DPTR SWAP A ANL A, #0FH INC DPTR MOVX @DPTR, A MOV DPL,#00H MOVX A, @DPTR ANL A, #0FH INC DPTR INC DPTR MOVX @DPTR, A
END
实验三 拼字程序
一、实验目的
进一步掌握汇编语言设计和调试方法。
二、实验内容
把2000h、2001h的低位分别送入2002h高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。
三、程序框图
-3-
四、实验过程
(1)首先利用数据指针DPTR 取出2000H中的内容给累加器A,交换高低位后再进行与操作取出2000H中的低位,但在A 中是位于高位,将其送入B中。
(2)再利用数据指针取出2001H 中的内容送给累加器A,直接进行与操作取出其低位数据。
(3)再用或ORL语句将2000H和2001H的高低四位组合在一起送入2002H中,从而实现两个数低四位组合。
五、实验结果及分析
问题回答:本实验运行程序后2002H内容为0CEH,即2000H单元中低四位“C”作为2002H的高四位,2001H的低四位“E”作为2002H的低四位。
六、实验源程序
;拼字程序 ORG 0000H
MAIN:
AJMP MAIN ORG 0680H MOV DPL, #00H MOV DPH, #20H MOVX A, @DPTR ANL A, #0FH SWAP A MOV B, A INC DPTR
-4-
MOVX A, @DPTR ANL A, #0FH ORL A, B INC DPTR MOVX @DPTR, A END
实验四 数据区传送子程序
一、实验目的
掌握RAM中的数据操作。
二、实验内容
把R2、R3源RAM区首址内的R6、R7字节数据传送到R4、R5目的RAM区。
三、程序框图
四、实验过程
实验要求将一段内存中数据移动到另一段内存中,这个程序在开始定义源RAM首址为0000H,目的区首址为0030H,但是在进行搬移的子程序中选择将INC语句置于开始,所以结果是把0001H单元开始20H个字节的内容送到0031H开始的连续数据单元中。
(1)先把初始地址分别放入源地址寄存器和目的地址寄存器,因为转移区的长度定义的较小,所以就是只利用了R3作为数据转移循环条件。
(2)每进行一次转移地址寄存器向下加一,由于转移区较短所以整个程序的源RAM和目的RAM区的指针加1 的操作只需要对R3、R5进行。
五、实验结果及分析
-5-