实验目的:
1、熟悉掌握循环结构程序设计方法。
2、进一步熟悉掌握转移指令。
3、理解掌握循环结构程序流程图的画法。
实验内容及步骤:
1、单循环结构程序设计
(1)循环次数已知的循环程序设计
在片内RAM的10H单元存放一个8位二进制数,要求将其每一位转换成相应的ASCⅡ码,并以高位在前,低位在后的顺序依次存放到片内RAM以11H单元为首的连续单元中,编制相应的程序。
分析:首先应解决二进制转换成相应ASCⅡ码的问题,已知二进制数0、1相应的ACSⅡ码为30H、31H。所以先将中间单元置成30H,然后判别欲转换的位是否为1,若为1,则将中间单元内容加1,否则中间结果单元内容保持不变,接着应解决如何按由高到低的顺序进行转换,这可通过左移指令实现。
ORG 0000H
LJMP BINASC
ORG 1000H
BINASC:MOV R2 ,#08H ;置循环计数器R2初值
MOV R0 ,#10H ;置地址指针R0初值
MOV A , @R0 ;取被转换的8位二进制数
MOV B , A ;暂存
ASLOOP:MOV A ,#30H ;置A为30H
JNB B.7 ,NADDA ;判被转换的二进制数为0否,若是则转NADDA
INC A ;若为1,则响应ASCⅡ码加1
NADDA:INC R0 ;修改地址指针R0
MOV @R0 ,A ;送相应的ASCⅡ码
MOV A ,B ;暂存
RL A ;将被转换的二进制数左循环移1位
MOV B , A ;暂存
DJNZ R2 ,ASLOOP ;判8位二进制数位转换完否
LOOP: SJMP LOOP
END
(2)循环次数未知的循环程序设计
在内部RAM以20H单元为首址的连续10个单元中,存放10个无序的8位无符号数,要求将第一个大于10H的数存入32H单元中,运行次数存入33H单元中,编制相应的程序。
ORG 0000H
LJMP CMPSP
ORG 1000H
CMPSP: MOV R0 , #20H ;设置地址指针R0
MOV R2 ,#01H ;置计数器R2初值
MOV B ,#0AH ;置循环计数器B初值
LOOP2: MOV A ,@R0 ;取第一个数
SUBB A ,#10H ;两数相减,以判两者大小
JNB ACC.7 ,LOOP1 ;若A为大,则转LOOP1
INC R0 ;若A≤10H,则取下一个数
INC R2 ;计数器加1
DJNZ B ,LOOP2 ;环计数器B减1,B≠0则继续
LOOP1: MOV 33H ,@R0 ;送大于10H的数
MOV 34H ,R2 ;送运行次数
LOOP: SJMP LOOP
END
2、多重循环设计
设在片内RAM中,存放了一组无符号数,其长度为20,起始地址为30H,要求将他们按从大到小的顺序排列,排序后仍存放在起始地址为30H的区域中,编写相应的程序。
分析:本例是一个排序程序设计,方法有多种,以常用的“冒泡”程序设计思路为例,其方法是:从低地址到高地址将两两相邻单元内容进行比较。若低地址单元的内容大于相邻高地址单元的内容,则保持原状;若低地址单元的内容小于相邻高地址单元的内容,则两相邻单元中的内容互换。经一次循环后,在最高地址单元中存放的是最小数。然后按上述方法进行第二次循环,本次循环结束时,在次最高地址单元中存放的是次最小数。经过19次循环在起始地址为30H的原数据区中得到了从大到小排列数组。在每次循环中大数不断地向低地址单元移动,好象气泡不断地向上冒,所以称为“冒泡”程序。为了提高排序的速度,可在程序中设置一个交换标志位。初始化时将其清零,如在一次循环中有两相邻单元的内容互换,则标志位置1。在每次循环结束时测试此标志位,决定是否再次循环,若为1,则继续排序;为0,则完成排序。

图1
程序如下:
ORG 0000H
LJMP 1000H
ORG 1000H
LOOP4: MOV R0,#30H ;置地址指针R0初值
MOV B, #14H ;置长度计数器B初值
CLR 10H ;交换标志位(10H单元)清0
DEC B ;长度计数器B减1
LOOP3: MOV A,@R0 ;取数
MOV 20H A ;暂存
INC R0 ;修改指针
MOV 21H,@R0 ;取数
CJNE A,21H,LOOP1 ;两数比较,若(20H)≠(21H),则转LOOP1
LOOP1: JNC LOOP2 ;若(20H)≥(21H),则转LOOP2
MOV A,@R0 ;若(20H)<(21H),则两者交换
MOV @R0, 20H
DEC R0
MOV @R0,A
INC R0 ;恢复R0原值
SETB 10H ;置交换标志为1
LOOP2: DJNZ B,LOOP3 ;判长度计数器B为0?,若不为0,则继续
JB 10H,LOOP4 ;判标志为1?,若为1,则继续
SJMP $
END
单片机教程,五系列(55讲)电子书全集下载论坛精选:
单片机教程,MCS51单片机从零开始 第一讲:初识单片机
http://bbs.huazhoucn.com/Topic.aspx?id=2539
单片机教程,MCS51单片机从零开始 第二讲:MCS-51单片机简述
http://bbs.huazhoucn.com/Topic.aspx?id=2540
单片机教程,MCS51单片机从零开始 第三讲:单片机相关常用名词解释
http://bbs.huazhoucn.com/Topic.aspx?id=2541
单片机教程,MCS51单片机从零开始 第四讲:计算机中数的表示及运算
http://bbs.huazhoucn.com/Topic.aspx?id=2542
单片机教程,MCS51单片机从零开始 第五讲:常用逻辑电路
http://bbs.huazhoucn.com/Topic.aspx?id=2544
单片机教程,MCS51单片机从零开始 第六讲:51单片机的结构及其组成
http://bbs.huazhoucn.com/Topic.aspx?id=2545
单片机教程,MCS51单片机从零开始 第七讲:51单片机的引脚
http://bbs.huazhoucn.com/Topic.aspx?id=2546
单片机教程,MCS51单片机从零开始 第八讲:8051单片机I/O引脚工作原理
http://bbs.huazhoucn.com/Topic.aspx?id=2547
单片机教程,MCS51单片机从零开始 第九讲:8051单片机的存储器结构
http://bbs.huazhoucn.com/Topic.aspx?id=2548
单片机教程,MCS51单片机从零开始 第十讲:编码及译码器工作原理
http://bbs.huazhoucn.com/Topic.aspx?id=2549
单片机教程,MCS51单片机从零开始 第十一讲:存储器的存储原理
http://bbs.huazhoucn.com/Topic.aspx?id=2550
单片机教程,MCS51单片机从零开始 第十二讲:51单片机的特殊功能寄存器
http://bbs.huazhoucn.com/Topic.aspx?id=2551
单片机教程,MCS51单片机从零开始 第十三讲:51单片机CPU的内部结构
http://bbs.huazhoucn.com/Topic.aspx?id=2552
单片机教程,MCS51单片机从零开始 第十四讲:定时器/计数器的基本结构及工作原理
http://bbs.huazhoucn.com/Topic.aspx?id=2553
单片机教程,MCS51单片机从零开始 第十五讲:51单片机的中断系统
http://bbs.huazhoucn.com/Topic.aspx?id=2554
单片机教程,MCS51单片机从零开始 第十六讲:51单片机的复位
http://bbs.huazhoucn.com/Topic.aspx?id=2555
单片机教程,MCS51单片机从零开始 第十七讲:51单片机执行指令的过程
http://bbs.huazhoucn.com/Topic.aspx?id=2556
单片机教程,MCS51单片机从零开始 第十八讲:51单片机的延时及时序分析
http://bbs.huazhoucn.com/Topic.aspx?id=2557
单片机教程,MCS51单片机从零开始 第十九讲:汇编语言基础
http://bbs.huazhoucn.com/Topic.aspx?id=2558
单片机教程,MCS51单片机从零开始 第二十讲:汇编语言及汇编过程
http://bbs.huazhoucn.com/Topic.aspx?id=2556
单片机教程,MCS51单片机从零开始 第二十一讲:汇编程序的基本结构
http://bbs.huazhoucn.com/Topic.aspx?id=2560
单片机教程,MCS51单片机从零开始 第二十二讲:51单片机的寻址方式
http://bbs.huazhoucn.com/Topic.aspx?id=2561
单片机教程,MCS51单片机从零开始 第二十三讲:数据传送类指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2562
单片机教程,MCS51单片机从零开始 第二十四讲:算术运算类指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2563
单片机教程,MCS51单片机从零开始 第二十五讲:逻辑运算及移位指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2564
单片机教程,MCS51单片机从零开始 第二十六讲:控制转移类指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2565
单片机教程,MCS51单片机从零开始 第二十七讲:布尔变量操作指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2566
单片机教程,MCS51单片机从零开始 第二十八讲:伪指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2567