Press控制板之實作報告
繞線機控制(煞車馬達式)

程式名稱 : coil.zip (下載)

  
          
            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

MOTOR       REG     P3.4     ;  P3.4  繞線煞車馬達

START       REG     PP0.0    ;  P0.0 起動
COUNTIN     REG     PP0.1    ;  P0.1 計數輸入 ON/OFF 加一

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

WORK:
        CPL     WATCHDOG
        JNB     START,WORK
        CALL    DEL1
        JNB     START,WORK
                            
        CALL    READ_FG     ;讀取圈數
        CALL    DEC_HEX
        MOV     R1,R0

        CLR     MOTOR       ;起動繞線馬達

WORK10:                           
        CPL     WATCHDOG    ;比較計數值     
        CALL    COUNT
        DJNZ    R1,WORK10
        SETB    MOTOR       ;停止繞線馬達

WORK50:
        CPL     WATCHDOG
        JB      START,WORK50
        CALL    DEL1
        JB      START,WORK50
        
        JMP     WORK
;============================================================================
;計數一次
COUNT:
        CPL     WATCHDOG
        JNB     COUNTIN,COUNT
        CALL    DEL1
        JNB     COUNTIN,COUNT
COUNT10: 
        CPL     WATCHDOG
        JB      COUNTIN,COUNT10
        CALL    DEL1
        JB      COUNTIN,COUNT10
        RET
;============================================================================
;讀入一位數指撥開關十六進制值,放在 R0
;P1 = 11110111B
READ_DL:
        MOV     P1,#11110111B
        CALL    DEL_RD
        MOV     A,P1
        CPL     A
        SWAP    A
        ANL     A,#00001111B
        MOV     R0,A
        RET
;============================================================================
;讀入兩位數指撥開關十進制值,放在 R1
;第 1 位 P1 = 11110000B
;第 2 位 P1 = 11110001B
READ_FG:
        MOV     P1,#11110000B
        CALL    DEL_RD
        MOV     A,P1
        CPL     A
        ANL     A,#11110000B
        SWAP    A
        MOV     R1,A

        MOV     P1,#11110001B
        CALL    DEL_RD
        MOV     A,P1
        CPL     A
        ANL     A,#11110000B
        ORL     A,R1
        MOV     R1,A
        RET
;============================================================================
DEL_RD:
        MOV     R4,#20
DEL_RD2:
        DJNZ    R4,DEL_RD2
        RET
;============================================================================
DEL:
        MOV     R3,#0FFH
DELA:
        MOV     R4,#0FFH
DELB:
        CPL     WATCHDOG
        DJNZ    R4,DELB
        DJNZ    R3,DELA
        RET
;============================================================================
DEL1:
        MOV     R3,#020H
DEL1A:
        MOV     R4,#0FFH
DEL1B:
        CPL     WATCHDOG
        DJNZ    R4,DEL1B
        DJNZ    R3,DEL1A
        RET
;============================================================================
;1 BYTE 十進制 >> 十六進制
;R1 => 欲轉換十進制值
;R0 => 轉換後十六進制值
DEC_HEX:
        MOV     A,R1
        SWAP    A
        ANL     A,#00001111B
        MOV     B,#10
        MUL     AB
        MOV     R0,A
        MOV     A,R1
        ANL     A,#00001111B
        ADD     A,R0
        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 設定時間長短
;當 START = 0 時結束跳出
DELINT_RUN:
        CPL     WATCHDOG
        JB      START,DELINT_RUN2
        RET
DELINT_RUN2:
        MOV     DELTIM,A
DELINT_RUN4:
        CPL     WATCHDOG
        JB      START,DELINT_RUN6
        RET
DELINT_RUN6:
        MOV     A,DELTIM
        CJNE    A,#0,DELINT_RUN4
        RET
;=================== ========================================================
;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,#0D8H
        MOV     TL0,#0EFH

        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觀看