        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     R1,#15
        MOV     TMOD,#00000001B ;設定計時計數器0工作於計時模式1,如圖  所示.
        MOV     TH0,#0FFH       ;設定0.1ms中斷一次
        MOV     TL0,#64H
        SETB    EA              ;中斷致能(打開中斷總開關)
        SETB    ET0             ;計時/計數器0的中斷致能
        SETB    TR0             ;計時/計數器0開始工作


LOOP:
        JNB     P0.0,B1         ;左馬達前進的遙控鈕
        JNB     P0.1,B2         ;左馬達後退的遙控鈕
        JNB     P0.2,B3         ;右馬達前進的遙控鈕
        JNB     P0.3,B4         ;右馬達後退的遙控鈕
        JMP     LOOP            ;再重覆回頭感測
B1:
        MOV	R1,#12
	CALL	DELAY
        JMP     LOOP
B2:
        MOV	R1,#14
	CALL	DELAY
        JMP     LOOP
B3:
        MOV	R1,#16
	CALL	DELAY
        JMP     LOOP
B4:
        MOV	R1,#18
	CALL   	DELAY
        JMP     LOOP      
;=========================
;延時副程式(延時1秒)
;=========================
DELAY:  MOV     R5,#10       ;重複15次
DL1:    MOV     R6,#250         ;
DL2:    MOV     R7,#200
DL3:    DJNZ    R7,DL3
        DJNZ    R6,DL2
	DJNZ    R5,DL1
	RET

        END