SOGO論壇
標題:
程式流程問題
[列印本頁]
作者:
駱駝
時間:
2009-7-7 15:46:35
標題:
程式流程問題
各位大大們請協助小弟,以下是一個顯示馬達轉速的程式,不知道各位大大知道哪個是顯示個位數十位數百位數及千位數的部分?另外整個程式流程圖我該怎麼畫呢?煩請各位大大協助小第一下.
count equ 30H
old equ 20H
new equ 21H
org 00H
jmp start
org 0bH
jmp time_0
start:
clr p3.6
mov sp,#70H
mov count,#00H
mov r0,#00H
mov r1,#00H
call display
mov a,#00H
mov c,p3.7
rlc a
mov old,a
mov tmod,#01H
setb ea
setb et0
setb tr0
loop:
mov c,p3.5
mov p3.6,c
mov a,#00H
mov c,p3.7
rlc a
mov new,a
xrl a,old
jz is_display
mov a,#00H
mov c,p3.7
rlc a
mov new,a
xrl a,old
jz is_display
mov old,new
inc r0
mov a,r0
anl a,#00001111b
cjne a,#0aH,is_display
mov a,r0
anl a,#11110000b
add a,#10H
mov r0,a
cjne r0,#0a0H,is_display
mov r0,#00H
inc r1
mov a,r1
anl a,#00001111b
cjne a,#0aH,is_display
mov a,r1
anl a,#11110000b
add a,#10H
mov r1,a
cjne r1,#0a0H,is_display
mov r1,#00H
is_display:
mov a,count
cjne a,#19H,loop
mov count,#00H
call display
mov r0,#00H
mov r1,#00H
jmp loop
time_0:
mov tl0,#0b0H
mov th0,#3cH
inc count
reti
display:
mov a,r1
anl a,#11110000B
cjne a,#00H,display1
mov a,r1
add a,#0F0H
mov r1,a
cjne r1,#0F0H,display1
mov r1,#0FFH
mov a,r0
anl a,#11110000B
cjne a,#00H,display1
mov a,r0
add a,#0F0H
mov r0,a
display1:
mov p2,r0
mov p1,r1
ret
end
作者:
wwww
時間:
2009-11-15 01:27:04
;----------變數設定---------------------------
count equ 30H
old equ 20H
new equ 21H
org 00H
jmp start
;-----------TM0計時中斷-----------------------
org 0bH
call time_0
reti
;-----------程式開始-----------------------
start:
mov sp,#70H
start1
clr p3.6
mov count,#00H
mov r0,#00H
mov r1,#00H
;-----------資料顯示初值-----------------------
call display
;-----------PUSH輸入狀態-----------------------
mov a,#00H
mov c,p3.7
rlc a
mov old,a
;-----------TM0中斷致能-----------------------
mov tmod,#01H
setb ea
call time_0
loop:
;-----------輸(入/出)應該是啟動馬達or重置動作---------
mov c,p3.5
mov p3.6,c
;-----------輸入狀態掃描-----------------------
mov a,#00H
mov c,p3.7
rlc a
mov new,a
xrl a,old
;-----------輸入狀態比對-----------------------
jz is_display
mov a,#00H
mov c,p3.7
rlc a
mov new,a
xrl a,old
;-----------輸入狀態比對-----------------------
jz is_display
mov old,new
inc r0
mov a,r0
anl a,#00001111b
;-----------假如個位數+1<10顯示個位數-----------------------
cjne a,#0aH,is_display
mov a,r0
anl a,#11110000b
add a,#10H
mov r0,a
;-----------假如拾位數+1<10顯示拾位數和個位數=0-------------
cjne r0,#0a0H,is_display
mov r0,#00H
inc r1
mov a,r1
anl a,#00001111b
;-----------假如佰位數+1<10...........................-------------
cjne a,#0aH,is_display
mov a,r1
anl a,#11110000b
add a,#10H
mov r1,a
;-----------假如仟位數+1<10...........................-------------
cjne r1,#0a0H,is_display
mov r1,#00H
;-----------輸入狀態變化比對計時-----------------------
is_display:
mov a,count
;-----------未到預設計時LOOP-----------------------
cjne a,#19H,loop
;-----------已到預設計時顯示資料-----------------------
mov count,#00H
call display
mov r0,#00H
mov r1,#00H
jmp start1
;------------TM0計數出值-------------------
time_0:
CLR TF0 ;清除T0進位旗號
CLR TR0
mov tl0,#0b0H
mov th0,#3cH
inc count
SETB TR0
ret
;-----------資料顯示前置0消除比對-----------------------
display:
mov a,r1
anl a,#11110000B
cjne a,#00H,display1
mov a,r1
add a,#0F0H
mov r1,a
cjne r1,#0F0H,display1
mov r1,#0FFH
mov a,r0
anl a,#11110000B
cjne a,#00H,display1
mov a,r0
add a,#0F0H
mov r0,a
;-----------資料輸出顯示-----------------------
display1:
mov P2,r0
mov p1,r1
ret
end
《 本帖最後由
wwww
於 2009-11-15 01:37 編輯 》
作者:
小鈦大無敵
時間:
2009-12-25 02:16:28
推上面的大大
解釋很清楚!!
不錯唷 繼續加油~!
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM