码迷,mamicode.com
首页 > 编程语言 > 详细

51单片机汇编实现冒泡排序

时间:2015-06-07 13:56:19      阅读:343      评论:0      收藏:0      [点我收藏+]

标签:冒泡排序   单片机   汇编   51单片机   排序   

今天为了复习课本上面的程序,就实地检验了下这个程序,当年可是学过微机原理里的冒泡排序的,结果移植平台后又是如此麻烦,呵呵,网上贴吧,论坛,知道,文库上面拜托你们的程序能不能靠谱点!!!

第一种常见的错误就是程序写的一团糟,天马行空,弄了几个位地址和中间变量,外加两个循环,程序早飞了,真是让我们程序员惭愧啊

第二种错误是由于大多参考课本上题目:将以40H为首地址的N个数据进行排序,然后几十行代码,我怎么能很快知道程序对不呢

.................

鉴于此,特在我们这个绿色空间下贴上两种方法实现的冒泡排序完整版,实验程序已全部在keil下调试通过。(为了纪念下今天高考,大哭,好好加油吧

思路:有序的数列更有利于查找。本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在 数列的最后面。再进行下一轮比较,找出第二大数据,直到全部数据有序。

第一种方法:(缺点是不利于移植,优点是以末尾数字为参照,逻辑简单)

///////////////////////////////

;冒泡排序
;十个数从小到大排序


ORG 0000H
MOV 60H,#02H ;给60-69H存储单元送初值
MOV 61H,#05H
MOV 62H,#03H
MOV 63H,#07H
MOV 64H,#09H
MOV 65H,#14H
MOV 66H,#13H
MOV 67H,#08H
MOV 68H,#01H
MOV 69H,#12H
MOV R0,#60H
MOV R1,#61H


L2: MOV A,@R0
MOV 50H,@R1
CJNE A,50H,NEQ  ;比较60H与61H中数值的大小,做减法。如果60中的内容大则C位(进位为0)如果60中的内容比61中的小C位为1
NEQ:   JNC EXCHANGE ;是0跳转,左操作数<右操作数
LJMP L3
EXCHANGE: XCH A,@R1 ;交换60与61中的内容
XCH A,@R0
L3: INC R1
CJNE R1,#6AH,L2 ;让62到69中的内容逐一与60中的比较,最后60中的内容就是最小值
INC R0
MOV 51H,R0
MOV R1,51H
INC R1 
CJNE R0,#69H,L2 ;让61中的内容与之后的62到69中的内容比较,61中的内容就为第二小值,以此类推,直到剩最后两个数比较完。

SJMP $
END

///////////////////////////////

第二种方法(提倡用该方法,只是两重循环,逻辑性较强,不容易看懂,优点是利于移植)

///////////////////////////////

;冒泡排序


;十个数从小到大排序
Size   equ   10              ; 数据个数
Array  equ   60h             ; 数据起始地址
Change equ   0               ; 交换标志
ORG 0000H
MOV 60H,#02H ;给60-69H存储单元送初值
MOV 61H,#05H
MOV 62H,#03H
MOV 63H,#07H
MOV 64H,#09H
MOV 65H,#14H
MOV 66H,#13H
MOV 67H,#08H
MOV 68H,#01H
MOV 69H,#12H
SORT:
       MOV   R0, #Array
       MOV   R7, #Size-1
       CLR   Change
GOON:
       MOV   A, @R0
       MOV   R2, A
       INC   R0


       MOV   B, @R0
       CJNE  A, B, NotEqual
       SJMP  Next
NotEqual:
       JC    Next            ; 前小后大, 不交换


       SETB  Change          ; 前大后小, 置交换标志
       XCH   A, @R0          ; 交换
       DEC   R0
       XCH   A, @R0
       INC   R0
Next:
       DJNZ  R7, GOON
       JB    Change, SORT
       LJMP  $


       end 

///////////////////////////////

51单片机汇编实现冒泡排序

标签:冒泡排序   单片机   汇编   51单片机   排序   

原文地址:http://blog.csdn.net/u013457167/article/details/46399321

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!