伊莉討論區
標題:
8051電路程式碼問題[已解決]
[打印本頁]
作者:
mouse128259
時間:
2014-8-27 05:14 PM
標題:
8051電路程式碼問題[已解決]
本帖最後由 mouse128259 於 2014-8-28 05:59 PM 編輯
ORG 0000H
MAIN: SETB P0.1
0.1~P0.4設為1 全部關燈
SETB P0.2
SETB P0.3
SETB P0.4
SETB P2.6
SETB P2.5
SETB P2.4
SETB P2.3
CLR P2.2
LOOPZ:
AJMP DELAY
Q:
JNB P2.6,SMALL ;當P2.6為0則跳SMALL
JNB P2.5,MID
JNB P2.4,BIG
JNB P2.3,CON
AJMP LOOPZ ;跳LOOPZ
SMALL: CLR P0.1 ;將P0.1設為0 開燈
SETB P2.2 ;打開馬達
MOV R2,#105 ;1
D3: MOV R1,#250 ;1 ;
SMALLT: MOV R0,#200 ;1 ;
DJNZ R0,$ ;2*200 ;100751
DJNZ R1,SMALLT ;2 ;(1+2*200+2)*250 +1 us ;
DJNZ R2,D3 ;2 ;{[(1+2*200+2)*250+1]+1+2}105
SETB P0.1 ;關燈
CLR P2.2 ;關閉馬達
AJMP LOOPZ ;退回LOOPZ
MID: CLR P0.2
SETB P2.2
MOV R2,#175 ;1
D2: MOV R1,#250 ;1 ;
MIDT: MOV R0,#200 ;1 ;
DJNZ R0,$ ;2*200 ;100751
DJNZ R1,MIDT ;2 ;(1+2*200+2)*250 +1 us ;
DJNZ R2,D2 ;2 ;{[(1+2*200+2)*250+1]+1+2}175
SETB P0.2
CLR P2.2
AJMP LOOPZ
BIG: CLR P0.3
SETB P2.2
MOV R2,#255 ;1
D1: MOV R1,#250 ;1 ;
BIGT: MOV R0,#200 ;1 ;
DJNZ R0,$ ;2*200 ;100751
DJNZ R1,BIGT ;2 ;(1+2*200+2)*250 +1 us ;
DJNZ R2,D1 ;2 ;{[(1+2*200+2)*250+1]+1+2}255
SETB P0.3
CLR P2.2
AJMP LOOPZ
CON: CLR P0.4
SETB P2.2
CONT: JB P2.3,H ;開關放開就跳H或跳下一行
SJMP CONT ;沒放開就跳CONT等他放開
H: SETB P0.4
CLR P2.2
AJMP LOOPZ
DELAY: MOV R2,#10
Y: MOV R1,#250
Z: MOV R0,#200
DJNZ R0,$
DJNZ R1,Z
DJNZ R2,Y
AJMP Q
END
老師說CONT: JB P2.3,H之前要先設定按鍵初值
但如果我在前面先CLR 2.3的話,模擬出來的結果會是按下去led亮了之後再按就不會再關掉led了
請問有人知道前面設定初值是要怎麼處理嗎
作者:
johnwanz
時間:
2014-8-28 08:53 AM
在"MAIN:"後面, "LOOPZ:"前面, 這一段裡面加的code, 就是屬於初始化.
程序一開始執行正式功能前, 會先執行過一次, 一般用來設定相關IO, 變數等條件, 使後面功能的執行, 能正常運行的 起始狀態.
ps. 因為MAIN:不因JMP重複, 又在ORG 0H後面, 啟動必會執行, 也只執行一次.
歡迎光臨 伊莉討論區 (http://game.eyny.com/)
Powered by Discuz!