深圳市华胄科技有限公司 >> MCU专题 >> 8051单片机


51单片机基础实验----循环结构程序设计与排序



提交者 阳光总在风雨后  在  2008-7-15 15:56:34 

上一篇 下一篇
实验目的:


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

1 楼  提交者:Guest 在 2008-7-15 18:01:28
ding
2 楼  提交者:Guest 在 2008-7-17 16:09:26
3 楼  提交者:Guest 在 2008-7-18 12:30:17
顶起
4 楼  提交者:Guest 在 2008-7-18 17:53:00
好帖 要回
5 楼  提交者:Guest 在 2008-7-20 8:36:05
无内容
6 楼  提交者:月华星光 在 2008-7-20 11:05:20
7 楼  提交者:Guest 在 2008-7-24 17:09:47
hao tit
8 楼  提交者:Guest 在 2008-7-24 17:09:52
hao tit
9 楼  提交者:Guest 在 2008-7-24 17:09:56
hao tit
10 楼  提交者:Guest 在 2008-7-28 13:34:10
good
11 楼  提交者:Guest 在 2008-7-31 16:08:41
kk
12 楼  提交者:Guest 在 2008-8-1 9:58:15
en hao
13 楼  提交者:Guest 在 2008-8-1 19:07:01
14 楼  提交者:Guest 在 2008-9-12 23:24:07
15 楼  提交者:Guest 在 2008-9-26 8:50:28
hao !!kan yi xia 
16 楼  提交者:Guest 在 2008-10-7 18:59:11
ccc
17 楼  提交者:阿甘 在 2008-11-3 2:57:48
18 楼  提交者:天涯怪客 在 2009-1-7 13:16:47
无内容
19 楼  提交者:Guest 在 2009-3-30 19:59:53
111111111111
20 楼  提交者:Guest 在 2009-3-31 9:00:56
21 楼  提交者:Guest 在 2009-4-10 23:40:44
好帖 要回
22 楼  提交者:师大才子 在 2009-4-11 10:56:55
哈哈  还是要顶哦
23 楼  提交者:Guest 在 2009-4-11 15:29:42
fhd
24 楼  提交者:Guest 在 2009-4-21 20:24:50
ag
25 楼  提交者:Guest 在 2009-5-7 21:09:01
26 楼  提交者:shuishiliyan 在 2009-5-8 19:49:07
无内容
27 楼  提交者:Guest 在 2009-5-8 21:14:24
28 楼  提交者:Guest 在 2009-5-22 16:46:49
学习一下
29 楼  提交者:carl306 在 2009-5-25 17:08:48
brother
30 楼  提交者:Guest 在 2009-6-21 21:53:53
谢谢
上一篇 下一篇
当前第〖1〗页