A. 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個數全部列印出來了。 (實際還應以調試結果為准)
B. 一個單片機程序流程圖講解
程序思路是:
如果key1按下那麼scale加1
如果scale=1,當key2按下時最大值加;當key3按下時最大值減。
如果scale=2,當key2按下時最小值加;當key3按下時最小值減。
如果scale=3,那麼復位scale=0,程序結束。
如果key1未按且key2按下和key3同時按下,那麼
z1加1(有些看不清),如果key2釋放,這繼續加,否則結束。
如果所有鍵都未按,這結束。
C. 單片機程序設計流程圖
LED_BIT_1 EQU 30H ; 存放8位數碼管的段碼
LED_BIT_2 EQU 31H
LED_BIT_3 EQU 32H
LED_BIT_4 EQU 33H
LED_BIT_5 EQU 34H
LED_BIT_6 EQU 35H
LED_BIT_7 EQU 36H
LED_BIT_8 EQU 37H ; 存放初始密碼
SECOND EQU 60H
MINUTE EQU 61H
HOUR EQU 62H
TCNT EQU 63H
ORG 00H ;初始化程序 ,設置初始密碼
SJMP START
ORG 0BH
LJMP INT_T0
START:
MOV DPTR,#TABLE
MOV HOUR,#0
MOV MINUTE,#0
MOV TCNT,#0
MOV TMOD,#01H
MOV TH0,#03ch ;定時50毫秒
MOV TL0,#03ch
MOV IE,#082H
SETB TR0
MOV LED_BIT_1,#00H ;段碼存儲區清0
MOV LED_BIT_2,#00H
MOV LED_BIT_3,#00H
MOV LED_BIT_4,#00H
MOV LED_BIT_5,#00H
MOV LED_BIT_6,#00H
MOV LED_BIT_7,#79H
MOV LED_BIT_8,#73H
MOV TMOD,#01H
MOV TH0,#0fdh
MOV TL0,#0fdh
MOV IE,#82H
A1:
LCALL DISPLAY ;調用時間顯示
JNB P1.0,S1
JNB P1.1,S2
JNB P1.2,S3
JNB P1.3,S4
LJMP A1
S1: LCALL DLY_S ;去抖動
JB P1.0,A1
INC HOUR ;秒值加1
MOV A, HOUR
CJNE A,#24,J00 ;判斷是否加到60秒
MOV HOUR,#0
LJMP A1
S2: LCALL DLY_S
JB P1.1,A1
K01: DEC HOUR ;SHI-
MOV A,HOUR
CJNE A,#0,J01 ;判斷是否-0分
MOV HOUR,#24
LJMP A1
S3: LCALL DLY_S
JB P1.2,A1
K02: INC MINUTE ;小時值加1
MOV A,MINUTE
CJNE A,#60,J02 ;判斷是否加到24小時
MOV MINUTE,#0
LJMP A1
S4: LCALL DLY_S
JB P1.3,A1
K03: DEC MINUTE ;小時值加1
MOV A,MINUTE
CJNE A,#0,J03 ;判斷是否加到24小時
MOV MINUTE,#59
LJMP A1
J00: JB P1.0,A1 ;等待按鍵抬起
LCALL DISPLAY
SJMP J00
J01: JB P1.1,A1
LCALL DISPLAY
SJMP J01
J02: JB P1.2,A1
LCALL DISPLAY
SJMP J02
J03: JB P1.3,A1
LCALL DISPLAY
SJMP J03
INT_T0: MOV TH0,#3ch ;定時器中斷服務程序
MOV TL0,#3ch ;對秒,分鍾和小時的計數
INC TCNT
MOV A,TCNT
CJNE A,#20,RETUNE ;計時1秒
INC SECOND
MOV TCNT,#0
MOV A,SECOND
CJNE A,#60,RETUNE
INC MINUTE
MOV SECOND,#0
MOV A,MINUTE
CJNE A,#60,RETUNE
INC HOUR
MOV MINUTE,#0
MOV A,HOUR
CJNE A,#24,RETUNE
MOV HOUR,#0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE: RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DIS3鬧鈴設置子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DIS3
DISPLAY: ;顯示時間控制子程序
MOV A,SECOND ;顯示秒
MOV B,#10
DIV AB
CLR P2.6
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.6
MOV A,B
CLR P2.7
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.7
CLR P2.5
MOV P0,#40H ;顯示分隔符
LCALL DLY_S
SETB P2.5
MOV A,MINUTE ;顯示分鍾
MOV B,#10
DIV AB
CLR P2.3
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.3
MOV A,B
CLR P2.4
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.4
CLR P2.2
MOV P0,#40H ;顯示分隔符
LCALL DLY_S
SETB P2.2
MOV A,HOUR ;顯示小時
MOV B,#10
DIV AB
CLR P2.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.0
MOV A,B
CLR P2.1
MOVC A,@A+DPTR
MOV P0,A
LCALL DLY_S
SETB P2.1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;延時
DLY_S: MOV R6,#5 ;延時程序
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
RET
DLY_L: MOV R5,#50
D2: MOV R6,#100
D3: MOV R7,#100
DJNZ R7,$
DJNZ R6,D3
DJNZ R5,D2
RET
END
請採納答案,支持我一下。
D. 單片機程序流程圖,速求。只要流程圖,不要太復雜,簡單點最好。
1開機初始化
2串口中斷接收
3當串口接收到 + 號 P1最低位 輸出高 延時加5US --關P1最低位
4當串口接收到 - 號 P1最低位 輸出高 延時減5US --關P1最低位
5重復3,4步驟
此處不能畫圖,只能這樣描述
E. 使用單片機匯編語言冒泡法排序
一、實驗要求
給出一組隨機數,將此組數據排序,使之成為有序數列
二、實驗目的
1.了解數據排序的簡單演算法。
2.了解數列的有序和無序概念
三、實驗說明
有序的數列更有利於查找。本程序用的是「冒泡排序」法,演算法是將一個數與後面的
數相比較,如果比後面的數大,則交換,如此將所有的數比較一遍後,最大的數就會在
數列的最後面。再進行下一輪比較,找出第二大數據,直到全部數據有序。
四、程序框圖
Size equ 10 ; 數據個數
Array equ 50h ; 數據起始地址
Change equ 0 ; 交換標志
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
引自:偉福單片機開發平台軟體實驗
F. 關於單片機的程序流程圖問題。。
這個很好理解的,程序肯定是用定時器來做了一個延時,也就是定時清除數據延時,當延時時間到後,延時標志應該是0,當檢測到這個0時,程序會清楚數據,同時將延時標志置位。顯然這個流程圖中漏掉了這個清楚數據環節。
G. 單片機流程圖
在word里畫的,不太漂亮,湊合看下,這個程序就是開機後,1s蜂鳴器叫一下,等到30s時(包括之後的時間都是)蜂鳴器一直響~~給你畫個圖用了半個小時時間~~
H. 單片機流程圖怎麼畫,題目如下
程序思路是:
如果key1按下那麼scale加1
如果scale=1,當key2按下時最大值加;當key3按下時最大值減。
如果scale=2,當key2按下時最小值加;當key3按下時最小值減。
如果scale=3,那麼復位scale=0,程序結束。
如果key1未按且key2按下和key3同時按下,那麼
z1加1(有些看不清),如果key2釋放,這繼續加,否則結束。
如果所有鍵都未按,這結束。
I. 單片機程序及流程圖(具體可以看圖)
這些程序注釋多麼詳細,你還需要怎麼直白呢?還是自己稍微靜心一會,仔細看看程序吧。別人再也無法給你更詳細的註解了。至於流程圖,你可以以主程序為主來繪制主程序流程圖,也可以對關鍵子程序繪制功能模塊的流程圖。