Press控制板之實作報告
指撥開關計時器
程式名稱 : timertst.zip (下載)


;動作方式
;<1> RELAY 1 ON
;<2> 讀入第一位數指撥開關數值,放在 R0
;<3> 延遲讀取值*0.1SEC
;<4> RELAY 1 ON
;<5> 讀入第一位數指撥開關數值,放在 R0
;<6> 延遲讀取值*0.1SEC
;<7> 回到<1>重復執行


            CHIP    80152

PP0         EQU     080H
PP2         EQU     0A0H

DELTIM      EQU     30H
DELTIM_REG  EQU     31H

WATCHDOG    REG     PP2.7

STOPBIT     REG     20H.0       
RUNBIT      REG     20H.1
RELAY1      REG     P3.4    ;  P3.4 RELAY1

;============================================================================
        ORG     0H
        JMP     AGAIN
        ORG     0BH                 ;TIMER0 中斷向量
        JMP     TIMER0
;============================================================================
AGAIN:
        CPL     WATCHDOG
        MOV     P1,#11110000B
        MOV     P0,#11111111B
        MOV     TMOD,#00000001B
        MOV     TH0,#0ECH           ;TIMER0 = 65535 - 55535 = 10000 = 0.01 秒
        MOV     TL0,#077H           ;
        SETB    TR0
        MOV     IE,#10000010B       ;CPU中斷致能, TIMER0中斷致能
        CALL    DEL
;============================================================================
        MOV     P1,#11110000B
        CLR     STOPBIT
        CLR     RUNBIT

WORK:   
        CPL     WATCHDOG

        CLR     RELAY1          ;RELAY1 ON
        CALL    READ_DL         ;讀取第一位數指撥開關
        CALL    DEL_TEN         ;延遲讀取值*0.1SEC

        SETB    RELAY1          ;RELAY1 OFF
        CALL    READ_DL         ;讀取第一位數指撥開關 
        CALL    DEL_TEN         ;延遲讀取值*0.1SEC         
        
        JMP     WORK    

;============================================================================
DEL:
        MOV     R3,#0FFH
DELA:
        MOV     R4,#0FFH
DELB:
        CPL     WATCHDOG
        DJNZ    R4,DELB
        DJNZ    R3,DELA
        RET             
;============================================================================
DEL_RD:
        MOV     R4,#20
DEL_RD2:
        DJNZ    R4,DEL_RD2
        RET
;============================================================================
;讀入第一位數指撥開關數值,放在 R0
;P1 = 11110001B
READ_DL:
        MOV     P1,#11110001B
        CALL    DEL_RD
        MOV     A,P1
        CPL     A
        SWAP    A
        ANL     A,#00001111B
        MOV     R0,A
        RET
;============================================================================
;0.1 秒計時,使用 R0 設定時間長短
;當 STOPBIT = 1 時結束跳出
DEL_TEN:
        CPL     WATCHDOG
        JNB     STOPBIT,DEL_TEN0
DEL_TEN0:
        CJNE    R0,#0,DEL_TEN2
        RET
DEL_TEN2:
        MOV     A,#10
        MOV     DELTIM,A
DEL_TEN4:
        CPL     WATCHDOG
        JNB     STOPBIT,DEL_TEN6
        RET
DEL_TEN6:
        MOV     A,DELTIM
        CJNE    A,#0,DEL_TEN4
        DEC     R0
        JMP     DEL_TEN0
;============================================================================
;0.01 秒計時,使用 Acc 設定時間長短
DELINT:
        MOV     DELTIM,A
DELINT1:
        CPL     WATCHDOG
        MOV     A,DELTIM
        CJNE    A,#0,DELINT1
        RET
;============================================================================
TIMER0:
        PUSH    A
        PUSH    PSW

        MOV     TH0,#0ECH
        MOV     TL0,#077H

        MOV     A,DELTIM
        CJNE    A,#0,TIMER0A
        JMP     TIMER0B
TIMER0A:
        DEC     DELTIM

TIMER0B:
        JNB     RUNBIT,TIMER0C      ;工作中緊急停止判斷 
        JB      STOPBIT,TIMER0C
        JB      STOP,TIMER0C
        SETB    STOPBIT
TIMER0C:
        POP     PSW
        POP     A
        RETI


<<商標聲明>>
本網站於瀏覽者顯示器所出現之商標,皆為所屬公司之註冊商標,絕無侵犯之意。
建議使用I.E 4.0以上版本瀏覽器解析度1024*768觀看