伊莉討論區

標題: 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!