A. 求MCS51單片機冒泡法排序程序!高手進!
ORG 0000H
;------------------------下面先准備6個數字
MOV 40H, #8AH
MOV 41H, #3BH
MOV 42H, #0B9H
MOV 43H, #47H
MOV 44H, #29H
MOV 45H, #0AFH
CALL SORT6 ;調用排序子程序
SJMP $ ;停止,此時可以觀察排序結果
;-------------------------------------
SORT6: ;排序子程序
MOV R6, #5 ;6個數字,比較5次
S1:
MOV R0, #40H ;起始地址
MOV B, R6
MOV R7, B
CLR PSW.5 ;交換標志清零
S2:
MOV B, @R0 ;取出前一個數
INC R0
MOV A, @R0 ;取出後一個數
CJNE A, B, S3 ;後-前
S3:
JNC N_JH ;夠減就不用交換
MOV @R0, B ;交換存放
DEC R0
MOV @R0, A
INC R0
SETB PSW.5 ;設立交換標志位
N_JH:
DJNZ R7, S2
JNB PSW.5, S_END ;沒有交換過,就結束
DJNZ R6, S1
S_END:
RET
;-------------------------------------
END
B. 求51單片機冒泡程序
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,BIG ;比較60H與61H中數值的大小,做減法。如果60中的內容大則C位(進位為)為0如果60中的內容比61中的小C位為1
BIG: JNC LESS ;判斷C位是0還是1,是0則跳轉
LJMP L3
LESS: 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
C. 關於51單片機冒泡排序法
參考:
http://hi..com/do_sermon/item/3289f20a20836c97a3df439a
D. C51單片機「冒泡法」排序實例
用keil調試下,就可以知道結果了。
感覺樓主的分析是正確的……
只是不清楚這個程序段的意圖是對數組a[]的全部數據進行排序還是僅對其前9個數據排序。
printf("the unsorted numbers:\n");
for(i=0;i<9;i++)
printf("%bx",a[i]);
printf("\n");
printf("the sorted number:\n");
for(i=0;i<=10;i++)
printf("%bx",a[i]);
按常理,這兩段應該是對應的,判斷條件下面的那個更合理,按分析前面那段只列印未排序前的a[0]~a[8];後面那段卻將11個數全部列印出來了。 (實際還應以調試結果為准)
E. 51單片機匯編語言-請編寫程序將內部RAM 40H到4FH 中的16個數據按從小到大順序重新排列。
咨詢記錄 · 回答於2021-10-11
F. 問幾個關於學習51單片機的問題
如果你學習單片機的目的是為了以後用於開發,那你就要從基礎開始學習,C有C的優點,匯編有匯編的優點,不懂匯編的人成不了編程高手,C裡面插入匯編則能充分利用兩者的優點,學單片機沒有捷徑可走,必須學會基本理論,學習基本理論至少要先學會數字電路的基本知識,推薦新手認真學一下《單片機原理與應用-基於匯編、C51及混合編程》一書,這本書中的例題和實際結合,這本書學好了再做設計時會有點思路,各個例題的原理圖與實際電路圖一致,標出了各器件的參數,給出了匯編、C51兩種編程的詳解,該書例題的程序編寫思路符合於產品設計,最後一章給出了兩個完整的實例,通俗易懂,即可指導初學者入門,也可以做設計時參考。
G. 51單片機匯編 排序問題 請各位賜教
單片機排序問題,可以參考:
http://..com/question/148407042.html
試設計一個子程序,其功能為將(RO)指出的內部RAM中6個單位元組正整數按從小到大的次序重新排列。
模擬測試通過.
ORG 0000H
MOV 40H, #8AH
MOV 41H, #3BH
MOV 42H, #0B9H
MOV 43H, #47H
MOV 44H, #29H
MOV 45H, #0AFH
CALL SORT6 ;調用排序子程序
NOP
NOP
SJMP $
;-------------------------------------
SORT6: ;排序子程序
MOV R6, #5
S1:
MOV B, R6
MOV R7, B
MOV R0, #40H ;起始地址
S2:
MOV B, @R0
INC R0
MOV A, @R0
CJNE A, B, S3
S3:
JNC N_JH
MOV @R0, B
DEC R0
MOV @R0, A
INC R0
N_JH:
DJNZ R7, S2
DJNZ R6, S1
RET
;-------------------------------------
END
三位元組的加法,在我的空間,也有。
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0
H. 在8051晶元上,(匯編語言)用冒泡排序法來排列地址為30H到50H的數值大小
嘿嘿 俺來幫幫你吧
1 第八句也就是 CJNE @R0,A ,NEXT 出錯了
這是一條非法指令 即51單片機指令表中不存在的指令
正確的寫法是:
CJNE @R0, #data , NEXT 即採用指針(寄存器間接定址)的存儲器單元內容
只能與立即數比較 不能與累加器A比較
2 你是要進行2個變數數據的比較 建議採用CJNE A, direct, NEXT 指令
呵呵 滿意 就給俺加分嘍 (早知有人已經答了 何必再答啊 回答時看見沒人答啊 ??)