導航:首頁 > 操作系統 > 排序程序單片機

排序程序單片機

發布時間:2023-05-26 03:10:20

A. 單片機排序程序

MOV R5,#16
MOV R6,#40H
LONG:
MOV R4,#15;16個數比較15次
MOV A,30H;將30H裡面的內容復給A
MOV R0,#31H;讓其從31H開始自加到3FH
L:
SUBB A,@R0;31H裡面的內容和30H裡面的內容進行相減比較求C
JC XU;如果C=0則表示A裡面告雀的內容大於@R0裡面的內容否則小於跳轉XU
INC R0;R0加1到下一單元地址
DJNZ R4,L;15次比較沒有結束跳轉到L繼續執行
AJMP LL;如果15次循環完畢則求出最大值,然後再循環求出次大值
XU:
MOV A,R0;放比較數的地址送A,以清零方便為第二次比較
MOV R1,A;方便清零
MOV A,@R0;最大值送派友喊A
INC R0
AJMP LL
LL:
MOV @R1,#00H;最大值地址清零,然後再比較15次求次大值
MOV R6,A;最大值塵野送40H
INC R6
DJNZ R5,LONG;判斷是否全部從大到小排完
AJMP TT
TT:
END

B. 單片機 試編程將內部RAM50H~70中的數據由大到小進行原地排列

TEMP1 EQU 30H
TEMP2 EQU 31H
RAM_STA EQU 50H
RAM_END EQU 70HORG 0000HAJMP MAINORG 0030HMAIN: ACALL MAX_SORT SJMP $
MAX_SORT: ;由大到小排序子程序,
MOV R0,#RAM_STA;
MOV R1,#RAM_STA+1;
LOOP: MOV A,@R0;
MOV TEMP1,A
MOV A,@R1
MOV TEMP2,A
ACALL MAX
INC R1;
CJNE R1,#RAM_END+1,LOOP;
INC R0;
MOV A,R0
INC A;
MOV R1,A
CJNE R0,#RAM_END,LOOP;
RET MAX: PUSH PSW ; 比較@R0與@R1二者大小,大的放@R0,小的放@R1
CLR C
MOV A,TEMP1
SUBB A,TEMP2
JNC MAX_END
MOV A,TEMP2
MOV @R0,A
MOV A,TEMP1
MOV @R1,A
MAX_END:POP PSW
RET 這程序我調試過了!理解起來會比較難些,大概的排序方式為:先猜差肢找出最大的放到最低RAM中(50H),這慶春里是用最低RAM(50H)與其他RAM逐一比較,比它大的話就兩者交換(這樣50H中就始終是最大的),得到最大的,再找第二大的...一直判斷下去,最後就穗世實現了你要的效果了!提示:一定要用心去讀、去理解這段程序!加油!

C. 單片機排序問題

模擬測試通過.

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

D. 編寫排序程序,將地址為30h~3fh的片內數據存儲器中的數據進行降序排序 (單片機8051系列的

_sort	SEGMENTCODE
PUBLIC sort
RSEG_sort
sort:
MOV R0,#30H

R0_FOR_CMP:
MOVA,R0
ADDA,#256-3FH
JZR0_FOR_END

MOVA,R0
INCA
MOVR1,A

R1_FOR_CMP:
MOVA,R1
ADDA,#256-40H
JZR1_FOR_END

CLRC
MOVA,@R0
SUBB模宏敗A,@R1
JNCR1_FOR_ADJ

;SWAP
MOVA,@R0
XCHA,@R1
XCHA,@R0
R1_FOR_ADJ:

INCR1
AJMPR1_FOR_CMP
R1_FOR_END:
R0_FOR_ADJ:
INC旦顫R0
AJMP絕伏R0_FOR_CMP

R0_FOR_END:
RET
END

E. 求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

F. 編寫簡單的單片機c語言程序 1、指定數組找最大值 2、排序

#include<stdio.h>

#defineNR10//數組元素個數

/*從主函數開始*/

intmain(intargc,char**argv)

{

intar[NR];

inti;

fprintf(stdout,"請輸入%d個整數: ",NR);

/*獲取並檢查用戶輸入*/

while(1)

{

/*循環獲取NR個數據*/

for(i=0;i<NR;i++)

{

if(fscanf(stdin,"%d",&ar[i])!=1)

{

fprintf(stdout,"輸入錯誤!請重侍帆新輸入: ");

while(getchar()!=' ');//丟棄多餘非法字元

break;//打破內層for循環

}

}

/*檢查是否獲取到NR個數據*/

if(i!=NR)

{

continue;

}

else

{

break;

}

}

/*查找最大值和最小值*/

intmax,min;

max=ar[0];//假定第一個數為最大值

min=ar[0];//同時假定也第一個數為最大值

/*從第二個數開始比較查找最值*/

for(i=1;i<NR;i++)

{

if(ar[i]>max)//最大值

{

max=ar[i];

}

if(ar[i]<min)//最小值,不能使用elseif,否則會跳過比較

{

min=ar[i];

}

}

fprintf(stdout,"賣耐最大值為:%d最小值為:%d ",max,min);

/*接下來:查找第二大值*/

intsecond;

/*先獲取前兩個數的第一大和第二大值*/

ar[0]>ar[1]?(max=ar[0],second=ar[1]):

(max=ar[1],second=ar[0]);

/*從第2個數開始比較查找*/

for(i=2;i<NR;i++)

{

if(ar[i]>max)//查找最大值:目的是為了比較第二大值

{

second=max;//先把最大值保存給第二大值

max=ar[i];

}

elseif(second<ar[i])//比最大值小的數再看看是否大於第二大值

{

second=ar[i];

}

}

fprintf(stdout,"第二大值為:%d ",second);

return0;

}

(6)排序程序單片機擴展閱讀

一、c語言程序求數組內所有數的和:

1、通過索引的方式就可以訪問到數組內部的元素,索引是從0到數組長度-1。

2、數組點Lenth就是數組的長度。

二、c語言程序冒泡排序:

1、比較相鄰的兩個中談春元素的大小,如果第一個比第二個大就互換一下。

2、然後每一對都做如上操作,如此一來最後一個元素肯定是最大的數了。

3、除了最後一個元素,重復以上步驟。然後倒數第二個就是次大的值了

4、一次按照這個邏輯直到沒有任何數字可以比較了。

G. 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個數全部列印出來了。 (實際還應以調試結果為准)

H. 急求:單片機實驗

:
ORG 0030H
MOV 30H, #34H
MOV 31H, #56H
MOV 32H, #23H
MOV 33H, #90H
MOV 34H, #32H
MOV 35H, #68H
MOV 36H, #09H
MOV 37H, #75H
CALL SORT
SJMP $
;-----------------------------------------------------
SORT: ;最簡短、高效的排序程序.
MOV B, #7 ;第一輪排序時,比較7次.
S1: MOV R0, #30H ;數據區的起始地址.
MOV R7, B
CLR PSW.5 ;清除"交換"標志位.
S2: MOV A, @R0 ;取前一個數.
INC R0
CLR C
SUBB A, @R0 ;減後一個數,前<後時,Cy=1
S3: JC S4 ;有借位時,不用交換,轉移.
MOV A, @R0 ;取後一個數,准備交換.
DEC R0
XCH A, @R0 ;交換到前一個.
INC R0
XCH A, @R0 ;交換到後一個.
SETB PSW.5 ;設定"交換"標志位.
S4: DJNZ R7, S2 ;繼續本輪比較.
JNB PSW.5, ENDS ;如本輪沒有進行過交換,可提前結束.
DJNZ B, S1 ;下一輪,比較次數少一次.
ENDS:
RET
;-----------------------------------------------------
END

I. 51單片機匯編語言-請編寫程序將內部RAM 40H到4FH 中的16個數據按從小到大順序重新排列。 盡量簡單一點的

冒泡排序程序如下:

ORG 0000H
LCALL SORT ; 跳轉到排序程序
SJMP $ ; 。
SORT: ; 數據冒泡排序程序
MOV R6, #16 ;參加排序數據的總個數
DEC R6 ; 比較次數 比 數據總數 少 1

L1:
MOV R0, #40H ; 把數據的起始地址40h付給R0
MOV A, R6 ;調整比較次數
MOV R7, A
CLR F0 ; 清交換標志

L2: ;比較
MOV A, @R0 ; 取前一個數啟知
INC R0
MOV B, @R0 ; 取後一個數
CJNE A, B, L3 ; 前面的數 與 後面的數 比較, 前-後

L3: ;判斷、處理
JC N_JH ; 後面的伏薯數 大於 前面的數,不交換
XCH A,B ; 否則前後兩數交換存放
MOV @R0,缺旁者A
DEC R0
MOV @R0,B
INC R0
SETB F0 ; 設交換標志

N_JH:
DJNZ R7, L2 ; 沒有比較完,就繼續
JNB F0, L_END ; 沒有交換過,就結束
DJNZ R6, L1

L_END:
RET ; 排序完成。

;結果是:
;40H中存放著最小的數;
;4FH中存放著最大的數。

J. 單片機實驗數據排序

原發布者:瀚海湛藍
實驗一、數據排序實驗一、實驗目的熟悉8031指令系統,掌握程序設計方法。二、實驗內容編寫並調試一個排序子程序,其功能為用冒泡法將內部RAM中幾個單元位元組無符號的正整數,按從小到大的次序重新排列。三、實驗程序框圖NNN四、實驗步驟1把8032片內RAM區50H—5AH中放入不等的數據(用寄存器讀寫方法)。2用連續運行方式從起始地址0100H開始運行程序(輸入0100後按EXEC鍵)。3排序結束,顯示「P.」。4用寄存器讀寫方法檢查50—5AH中內容應從小到大排列。五、參考程序DORDE:MOVSP,#60H;設置棧指針MOVR3,#50HDORDE1:MOVA,R3MOVR0,A;數據指針傳送到R0MOVR7,#0AH;長度送到R7CLR00H;清零標志位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC;清零進位標志MOV22H,@R0CJNEA,22H,DORDE3;是否相等SETBCDORDE3:MOVA,R2JCDORDE4;小於或等於不交換SETB00HXCHA,@R0DECR0XCHA,@R0;大於交換位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1;未完繼續MOVR0,#7EH;完,關顯示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH

閱讀全文

與排序程序單片機相關的資料

熱點內容
手機淘寶登錄怎麼加密碼 瀏覽:481
linux快捷方式圖標 瀏覽:33
陽光車險的app叫什麼名字 瀏覽:461
購買單片機的器件時需要給商家啥 瀏覽:534
並行編譯技術的發展 瀏覽:549
阿里雲伺服器安裝管理 瀏覽:550
java手機開發教程 瀏覽:674
我的世界怎麼刪除伺服器數據 瀏覽:671
linux內存子系統 瀏覽:972
加密思維幣 瀏覽:690
魅族訪客文件夾 瀏覽:52
添加的文件夾怎麼找 瀏覽:617
程序員涉黃 瀏覽:700
maven編譯resources下的js 瀏覽:521
ubuntu文件移動命令 瀏覽:229
安卓i怎麼查找蘋果手機 瀏覽:951
雲伺服器宕機概率 瀏覽:232
在線買葯用什麼app知乎 瀏覽:815
ubuntu解壓xz文件 瀏覽:676
宏傑加密時電腦關機 瀏覽:390