        ORG	0000H
        JMP     START   
;=============================
;計時/計數器0中斷副程式
;=============================
        ORG     000BH
TIMER0:
        PUSH    ACC             ;將ACC暫存器之資料放置於堆疊區
        CLR     TF0             ;將TF0中斷要求先清除
        MOV     TH0,#0FFH       ;手動載入TH0及TL0的值
        MOV     TL0,#64H        ;
        INC     R0              ;中斷一次就把R0加1
CYCLE:  CJNE    R0,#200,SERVO1  ;判斷R0是否為200,不是,則跳至SERVO1執行
        MOV     R0,#0
        SETB    P2.0
        JMP     GOBACK
SERVO1: MOV     A,R0              
        XRL     A,R1            ;判斷R0是否等於R1
        JNZ     GOBACK          ;若R0不等於R1，
        CLR     P2.0
GOBACK: POP     ACC             ;將ACC暫存器之資料從堆疊區取回
        RETI 
;===============================
;           主程式
;===============================
            
START: 
        MOV     P0,#0 
        MOV     R1,#15  
        MOV     TMOD,#00000001B ;設定計時計數器0工作於計時模式1,如圖  所示.
        MOV     TH0,#0FFH       ;設定0.1ms中斷一次
        MOV     TL0,#64H
        SETB    EA              ;中斷致能(打開中斷總開關)
        SETB    ET0             ;計時/計數器0的中斷致能
        SETB    TR0             ;計時/計數器0開始工作
LOOP:   
        JB      P0.0,B1         ;第1種狀態的遙控鈕
        JB      P0.1,B2         ;第2種狀態的遙控鈕
        JB      P0.2,B3         ;第3種狀態的遙控鈕
        JB      P0.3,B4         ;第4種狀態的遙控鈕
        JMP     LOOP            ;再重覆回頭感測


B1:                             
;-------第1種狀態-----------------------------------------
        MOV	R1,#15	
	CALL	DELAY	

        MOV	R1,#18
	CALL	DELAY
    
        MOV	R1,#15
	CALL	DELAY
;---------------------------------------------------------     
        JB      P0.1,B2         ;第2種狀態的遙控鈕
        JB      P0.2,B3         ;第3種狀態的遙控鈕
        JB      P0.3,B4         ;第4種狀態的遙控鈕
        JMP     LOOP

B2: 				
;-------第2種狀態-----------------------------------------
        MOV	R1,#15
	CALL	DELAY
   
        MOV	R1,#12
	CALL	DELAY
     
        MOV	R1,#15
	CALL	DELAY
;---------------------------------------------------------
        JB      P0.0,B1         ;第1種狀態的遙控鈕
        JB      P0.2,B3         ;第3種狀態的遙控鈕
        JB      P0.3,B4         ;第4種狀態的遙控鈕
        JMP     LOOP
B3:				
;-------第3種狀態-----------------------------------------
        MOV	R1,#15
	CALL	DELAY
 
        MOV	R1,#16
	CALL	DELAY
    
        MOV	R1,#17
	CALL	DELAY
;---------------------------------------------------------
        JB      P0.0,B1         ;第1種狀態的遙控鈕
        JB      P0.1,B2         ;第2種狀態的遙控鈕
        JB      P0.3,B4         ;第4種狀態的遙控鈕
        JMP     LOOP
B4:				
;-------第4種狀態-----------------------------------------
        MOV	R1,#15
	CALL	DELAY
     
        MOV	R1,#14
	CALL	DELAY
 
        MOV	R1,#13
	CALL	DELAY
;---------------------------------------------------------
        JB      P0.0,B1         ;第1種狀態的遙控鈕
        JB      P0.1,B2         ;第2種狀態的遙控鈕
        JB      P0.2,B3         ;第3種狀態的遙控鈕
        JMP     LOOP  
;=========================
;延時副程式(延時1秒)
;=========================
DELAY:  MOV     R5,#02          ;重複15次(數字越小  伺服馬達動作越快)
DL1:    MOV     R6,#250         ;
DL2:    MOV     R7,#200
DL3:    DJNZ    R7,DL3
        DJNZ    R6,DL2
	DJNZ    R5,DL1
	RET
        END