第8章 典型子程序设计.docx
- 文档编号:17616893
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:35
- 大小:613.76KB
第8章 典型子程序设计.docx
《第8章 典型子程序设计.docx》由会员分享,可在线阅读,更多相关《第8章 典型子程序设计.docx(35页珍藏版)》请在冰点文库上搜索。
第8章典型子程序设计
第8章典型子程序设计实验
实验1多字节加法程序设计实验
一.实验目的
1.学习多节加法程序的设计方法;
2.了解顺序结构程序设计的一般要求。
二.实验设备及器件
1.PC机一台
2.QTH仿真器一台
三.实验内容
1.顺序结构也称简单结构,是程序设计的基础。
所说的简单结构是指在整个程序中没有分支,从程序的第一条指令开始顺序执行到最后一条指令结束。
虽然程序结构简单,但程序的内容不一定简单。
要学会合理选用指令、工作寄存器,节省内存。
2.有两个加数Data1、Data2存放于内部RAM30H、31H、32H、33H单元,Data1的低字节#34H占用30H单元、高字节#92H占用31H单元,Data2的低字节#0EAH占用32H、高字节#87H占用33H单元。
编写一段程序,完成二数相加,和Result存放在30H、31H、32H单元,低字节放在30H单元,进位位在32H单元。
四.实验要求
1.在QTH2003软件仿真环境下编写、运行实验程序;
2.内部RAM30H~33H单元的初值即两个加数Data1、Data2的存放,不用MOV数据传送指令,用临时修改内部RAM区数值的方法。
五.实验步骤
1.在QTH2003软件仿真环境下输入参考程序清单,建立新项目进行软件仿真;
2.在Memory-1窗口上单击选项卡Data,将内部RAM30H~33H单元内容由原来的“00”修改成“3492EA87”(注意:
修改RAM数据时输入法必须是“中文(中国)”),如图8-1-1所示;
图8-1-1内部RAM初值设置图8-1-2程序运行结束内部RAM的值
3.填写实验数据表
表8-1-1程序运行前后相关内部RAM与REG的值
调试程
序状态
相关内存单元值
R0
R1
30H
31H
32H
33H
运行前
运行后
六.预习要求
1.预习教材相关章节,掌握多字节加法程序的设计方法;
2.写出预习报告。
七.参考程序
1.实验参考程序框图如图8-1-3所示。
图8-1-3参考程序框图
2.实验内容2参考程序
ORG
0000H
SJMP
START
ORG
0030H
START:
MOV
R0,#30H
;将加数Data1和Data2地址送给R0和R1
MOV
R1,#32H
MOV
A,@R0
;将加数Data1低字节送A
ADD
A,@R1
;Data1与Data2低字节相加
MOV
@R0,A
;和低字节存放于30H
INC
R0
INC
R1
MOV
A,@R0
;Data1高字节送A
ADDC
A,@R1
;Data1与Data2高字节相加
MOV
@R0,A
;将和高字节存放于31H
INC
R0
MOV
A,#00H
;清A
ADDC
A,#00H
;求Data1与Data2和的高字节进位值
MOV
@R0,A
;高字节和的进位值存放在32H
HERE:
SJMP
HERE
;停PC指针
END
八.实验报告要求
1.按上述步骤写出实验报告;
2.写出完成实验要求的程序清单。
实验2数据块传送程序设计实验
一.实验目的
1.掌握循环结构程序的设计方法;
2.掌握存放地址有重叠区的数据块传送方法法。
二.实验设备及器件
1.PC机一台
2.QTH仿真器一台
三.实验内容
1.在内部RAM30H单元开始的26个单元存放着英语字母表,编写一段程序,将这26个字母放到35H单元开始的连续26个单元里。
四.实验要求
1.掌握循环程序设计的四个主要部分,弄清每部分应完成的任务;
2.了解循环程序结构程序的特点;
3.理解循环结程序流程图图8-2-1中“初始化部分”、“循环处理部分”、“循环控制部分”和“结束处理部分”,在整个循环程序中所起的作用;
4.在QTH2003仿真软件环境,完成实验程序的编写与仿真运行;
五.实验步骤
1.在QTH2003软件仿真环境下,输入参考程序,建立新的仿真项目,运行实验程序,完成上述功能;
2.对内部RAM30H~49H进行初始化。
(1)方法1
直接修改内部RAM值(注意:
修改RAM数据时输入法必须是“中文(中国)”):
打开内部RAM(Memory窗口Data选项卡)存储区,选中30H~49H将初值“00”修改成“41424344…5A”,如图8-2-2所示。
运行参考程序1,得到图8-2-3所示的内部RAM35H~4EH图8-2-2内部RAM初始值图8-2-3参考程序1运行结果单元值。
(2)方法2
用片内数据传送指令:
用片内数据传送指令也可以完成对内部RAM30H~4EH单元初始化。
运行参考程序2,得到图8-2-4、图8-2-5。
图8-2-2与图8-2-4,图8-2-3与图8-2-5所示的内部RAM值完全相同。
8-2-4参考程序2初始化内部RAM图8-2-5参考程序2运行结果
六.预习要求
1.预习教材相关章节,掌握循环程序设计方法;
2.写出预习报告。
七.参考程序
1.参考程序流程图如图8-2-6所示;
图8-2-1循环结程序流程图图8-2-6数据块传送流程图
2.参考程序
;数据块传送参考程序1
ORG
0000H
SJMP
START
;源数据块与目标数据块地址有重叠区时,应该先
ORG
0030H
;从没重叠地址区开始传送
START:
MOV
R0,#49H
;源数据块最后一个单元地址49H送R0
MOV
R1,#4EH
;目标数据块最后一个单元地址4EH送R1
MOV
R7,#26
;传送数据个数26送R7,即计数器R7置初值
LOOP:
MOV
A,@R0
;源数据块数据送A
MOV
@R1,A
;A中数据送目标单元
DEC
R0
;源数据块地址减1
DEC
R1
;目标数据块地址减1
DJNZ
R7,LOOP
;计数器不为0,继续传送
HERE:
SJMP
HERE
;停PC
END
;数据块传送参考程序2
ORG
0000H
SJMP
START
ORG
0030H
;为源数据块置初值
START:
MOV
R7,#26
;计数器R7置初值26
MOV
R0,#30H
;源数据块首地址30H送R0
MOV
A,#41H
;源数据块第一个数据送A
LOOP:
MOV
@R0,A
;A中数据送R0指向的地址
INC
R0
;地址加1
INC
A
;数据加1
DJNZ
R7,LOOP
;计数器不为0,继续赋值
MOV
R0,#49H
;源数据块最后一个单元地址49H送R0,
MOV
R1,#4EH
;目标数据块最后一个单元地址4EH送R1,
MOV
R7,#26
;传送数据个数26送R7,即计数器R7置初值
LOOP1:
MOV
A,@R0
;源数据块数据送A
MOV
@R1,A
;A中数据送目标单元;
DEC
R0
;源数据块地址减1
DEC
R1
;目标数据块地址减1
DJNZ
R7,LOOP1
;计数器不为0,继续传送
HERE:
SJMP
HERE
;停PC
END
八.实验报告要求
1.按照上述步骤写出实验报告;
2.写出完成实验要求的程序清单。
实验3数码转换程序设计实验
一.实验目的
1.掌握分支结构程序的设计方法;
2.掌握数制转换的规律。
二.实验设备及器件
1.PC机一台
2.QTH仿真器一台
三.实验内容
1.在内部RAM30H开始的10个单元存放着10个ASCII表示的数,编写一段程序,将这10个数中的十六进制数找出来,并译成十六进制数,存放在内部RAM40H开始的单元内。
四.实验要求
1.掌握分支结构程序设计的特点;
2.明确由不同转移条件形成的分支所能寻址的范围;
3.在QTH2003仿真软件环境下,完成实验程序的编写与仿真运行;
4.对内部RAM30H起始单元的初始化,采用直接修改内部数据存储区Data和用数据传送、查表指令两种方法完成;
5.比较两种方法的优缺点;
6.内部RAM存储数据为“292F3035393B40414647”。
五.实验步骤
1.在QTH2003软件仿真环境下,输入参考程序,建立新的仿真项目,运行实验程序,完成上述功能;
2.对内部RAM30H~39H进行初始化。
(1)直接修改RAM存出区(修改RAM数据时输入法必须是“中文(中国)”):
图8-3-1内部RAM初始值图8-3-2参考程序1运行结果打开内部RAM(Memory窗口Data选项卡)存储区,选中30H~39H单元将其初值“00”修改成“292F3035393B40414647”,如图8-3-1所示。
运行参考程序1得到图8-3-2所示的内部RAM30H~39H单元的值。
(2)用片内数据传送指令、查表指令对内部RAM30H~39H单元初始化:
运行参考程序2,得到图8-3-3、图8-3-4所示数据。
图8-3-1与图8-3-3,图8-3-2与图8-3-4所示的内部RAM值完全相同。
图8-3-3参考程序2初始化内部RAM图图8-3-4参考程序2运行结果
六.预习要求
1.预习教材相关章节,掌握分支结构程序设计方法;
2.复习数制转换相关知识;
3.写出预习报告。
七.参考程序
1.参考程序1流程图如图8-3-5所示;
图8-3-5参考程序1流程图
;2.参考程序1
ORG
0000H
SJMP
START
ORG
0030H
START:
MOV
R7,#10
;计数器置初值
MOV
R1,#40H
;存放有效数据首地址40H送R1
MOV
R0,#30H
;源数据块首地址30H送R0
LOOP:
MOV
A,@R0
;(R0)指向的地址存放的数据送A
CJNE
A,#30H,NEQ1
;(A)≠30H,转到NEQ1
SJMP
Y1_ASCII
;(A)=30H,转到Y1_ASCII
NEQ1:
JC
NEXT
;C=1,(A)<30H转到NEXT
CJNE
A,#39H,NEQ2
;(A)>30H,(A)≠39H,转到NEQ2
SJMP
Y1_ASCII
;(A)=39H,转到Y1_ASCII
NEQ2:
JC
Y1_ASCII
;C=1,(A)<39H,转到Y1_ASCII
CJNE
A,#41H,NEQ3
;(A)>39H,(A)≠41H,转到NEQ3
SJMP
Y2_ASCII
;(A)=41H,转到Y2_ASCII
NEQ3:
JC
NEXT
;C=1,(A)<41H,转到NEXT
CJNE
A,#46H,NEQ4
;(A)>41H,(A)≠46H,转到NEQ4
SJMP
Y2_ASCII
;(A)=46H,转到Y2_ASCII
NEQ4:
JC
Y2_ASCII
;C=1,(A)<46H,转到Y2_ASCII
SJMP
NEXT
;(A)>46H,转到NEXT
Y1_ASCII:
CLR
C
;清C
SUBB
A,#30H
;(A)-30H,转换成16进制数
MOV
@R1,A
;A中数据存放在R1指向的地址单元
INC
R1
;地址加1
SJMP
NEXT
;下一个数
Y2_ASCII:
CLR
C
;清C
SUBB
A,#40H
;A中数据减40H
ADD
A,#09H
;A中数据加09H
MOV
@R1,A
;将16进制数存放于R1指向的地址单元
INC
R1
;地址加1
NEXT:
INC
R0
DJNZ
R7,LOOP
END
参考程序2:
ORG
0000H
SJMP
START
ORG
0030H
START:
MOV
R0,#30H
;初始化数据块首地址30H送R0
MOV
R7,#10
;计数器置初值10
MOV
DPTR,#DAT
;数据块数据表
MOV
R6,#0
GO_ON1:
MOV
A,R6
MOVC
A,@A+DPTR
;查表,取数
MOV
@R0,A
;表中数据送R0指向的地址
INC
DPTR
;查表指针加1
INC
R0
;地址加1
DJNZ
R7,GO_ON1
;计数器不为0,继续查表
MOV
R7,#10
;初始化计数器
MOV
R1,#40H
;有效数据首地址40H送R1
MOV
R0,#30H
;源数据块首地址30H送R0
LOOP:
MOV
A,@R0
;以下注释同参考实验程序1
CJNE
A,#30H,NEQ1
SJMP
Y1_ASCII
NEQ1:
JC
NEXT
CJNE
A,#39H,NEQ2
SJMP
Y1_ASCII
NEQ2:
JC
Y1_ASCII
CJNE
A,#41H,NEQ3
SJMP
Y2_ASCII
NEQ3:
JC
NEXT
CJNE
A,#46H,NEQ4
SJMP
Y2_ASCII
NEQ4:
JC
Y2_ASCII
SJMP
NEXT
Y1_ASCII:
CLR
C
SUBB
A,#30H
MOV
@R1,A
INC
R1
SJMP
NEXT
Y2_ASCII:
CLR
C
SUBB
A,#40H
ADD
A,#09H
MOV
@R1,A
INC
R1
NEXT:
INC
R0
DJNZ
R7,LOOP
DAT:
DB
29H,2FH,30H,35H,39H
DB
3BH,40H,41H,46H,47H
END
八.实验报告要求
1.按照上述步骤写出实验报告;
2.写出完成实验要求的程序清单。
实验4数制转换程序设计实验
一.实验目的
1.掌握二进制码与BCD码之间转换程序的设计方法;
2.了解二、十进制数的转换规律。
二.实验设备及器件
1.PC机一台
2.QTH仿真器一台
三.实验内容
在计算机中常用二进制编码的BCD码来表示十进制数,由于进制不同,必须进行二—十进制的转换。
一般常用四位二进制数表示一位BCD码,一个字节表示2位BCD码。
在内部RAM30H、31H单元存放着二进制数“3B”、“5C”。
编写一段程序将这双字节二进制数“3B5C”转换成BCD码,并存放在内部RAM40H开始的连续单元内。
四.实验要求
1.用R4、R5、R6作转换BCD码时的缓冲器,高字节送R4,低字节送R6;
2.明确由不同转移条件形成的分支所能寻址的范围;
3.在QTH2003仿真软件环境下,完成实验程序的编写与仿真运行;
4.单步运行程序,观察相关内部RAM数值的变化情况。
五.实验步骤
1.在QTH2003软件仿真环境下,输入参考程序,建立新的仿真项目,运行实验程序,完成上述功能;
2.单步运行参考程序;
3.观察相关存储单元数值的变化;
4.记录实验数据,填写表8-4-1。
图8-4-1内部RAM初始值图8-4-2参考程序运行结果
表8-4-1程序运行前后相关RAM值
调试程
序状态
相关内存单元值
30H
31H
40H
41H
42H
运行前
运行后
六.预习要求
1.预习教材相关章节,掌握循环结构程序设计方法;
2.复习数制转换相关知识;
3.写出预习报告。
七.参考程序
1.参考程序流程图如图8-4-3所示。
图8-4-3参考程序流程图1.实验参考程序
ORG
0000H
SJMP
START
;转到主程序入口地址
ORG
0030H
START:
MOV
R4,#0
;将缓冲器R4,R5,R6清0
MOV
R5,#0
MOV
R6,#0
MOV
30H,#3BH
;初始化30H31H单元
MOV
31H,#5CH
MOV
R7,#16
;计数器R7赋初值
MOV
R2,30H
;高字节地址30H送R2
MOV
R3,31H
;低字节地址31H送R3
BIT_BCD:
MOV
A,R3
;R3、R2中存放的16位二进制数左移1位
RLC
A
;低字节最高位值保留在进位位C中
MOV
R3,A
MOV
A,R2
RLC
A
;高字节最高位值保留在进位位C中
MOV
R2,A
MOV
A,R6
ADDC
A,R6
DA
A
;(R6)+(R6)+(C),和进行二-十进制调整
MOV
R6,A
;调整后BCD码送R6
MOV
A,R5
ADDC
A,R5
DA
A
;(R5)+(R5)+(C),和进行二-十进制调整
MOV
R5,A
;调整后BCD码送R5
MOV
A,R4
ADDC
A,R4
DA
A
;(R4)+(R4)+(C),和进行二-十进制调整
MOV
R4,A
;调整后BCD码送R4
DJNZ
R7,BIT_BCD
;R7≠0,转到BIT_BCD
MOV
40H,R4
;将转换后的BCD码送如存储区
MOV
41H,R5
MOV
42H,R6
HERE:
SJMP
HERE
;停PC指针
END
八.实验报告要求
1.按照上述步骤写出实验报告;
2.写出完成实验要求的程序清单。
实验5寻找最大/最小值程序设计实验
一.实验目的
1.掌握寻找无符号数最大/最小值程序的设计方法。
二.实验设备及器件
1.PC机一台
2.QTH仿真器一台
三.实验内容
1.在外部RAM0030H开始的10个单元中连续存放着10个无符号数随机数,编写一段程序,将这10个数中的最大或最小值取出,存放在内部RAM30H单元。
四.实验要求
1.外部RAM数据存储区的数据,通过修改QTH仿真软件的外部数据存储区XData直接地址单元实现;
2.存储数据自定;
3.本实验要求取最大值;
4.在QTH2003仿真软件环境下,完成实验程序的编写与仿真运行。
五.实验步骤
1.在QTH2003软件仿真环境下,输入参考程序,建立新的仿真项目,运行实验程序,完成上述功能;
2.对外部RAM0030H~0039H进行初始化(注意:
修改RAM数据时输入法必须是“中文(中国)”)):
打开外部RAM(Memory窗口XData选项卡)存储区,选中0030H~0039H单元,将其初值“00”修改成“315243445AFEOC8B2A1D”,如图8-5-1所示;
图8-5-1外部RAM初始化结果图8-5-2参考程序运行结果
3.单步运行参考程序,观察A、R1、R2特殊功能寄存器数值的变化情况;
4.图8-5-2所示内部RAM30H数据为实验参考程序运行的结果。
六.预习要求
1.预习教材相关章节,掌握数据查找程序的编写特点;
2.写出预习报告。
七.参考程序
1.实验参考程序流程图
图8-5-3实验参考程序流程图
在图8-5-3实验参考程序流程图中,R1中存放基准值,R2存放每次从外部RAM读出的结果。
1.实验内容1参考程序
MAX
EQU30H
;定义最大值单元
ORG
0000H
SJMP
START
;避开中断向量入口
ORG
0030H
START:
CLR
A
;A清0
MOV
R1,A
;R1清0
MOV
R7,#10
;计数器赋初值
MOV
DPTR,#0030H
;数据块首地址
LOOP:
MOVX
A,@DPTR
;读数据
INC
DPTR
;地址加1
MOV
R2,A
;读出数据存R2
MOV
A,R1
;基准值送A
CLR
C
;C清0
SUBB
A,R2
;基准数与读出数比较
JNC
NEXT
;C=0,(A)>(R2),转移到NEXT
MOV
A,R2
;C=1,(A)送R2
MOV
R1,A
;更换基准值
NEXT:
DJNZ
R7,LOOP
;判断搜索次数
MOV
MAX,R1
;搜索结束,保存最大值
SJMP
$
;停PC
END
八.实验报告要求
1.按照上述步骤写出实验报告;
2.写出完成实验要求的程序清单。
实验6数值排序程序设计
一.实验目的
1.掌握无符号数从大(小)到小(大)排序程序的设计方法。
二.实验设备及器件
1.PC机一台
2.QTH仿真器一台
三.实验内容
1.在内部RAM30H开始的连续10个单元内存放着“285974CE9D61AF8B2A6D”10个无符号数,编写一段程将这些数从大到小排列,存放在内部RAM30H单元开始的10个连续单元内。
四.实验要求
1.内部RAM数据存储区的数据,可通过修改QTH仿真软件的内部数据存储区Dat的直接地址单元实现;也可以利用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第8章 典型子程序设计 典型 子程序 设计