|
2#
樓主 |
發表於 2008-8-20 11:31:44
|
只看該作者
今天一早起來不死心 突然想到 便試試 結果成功
START:
MOV R1,#15
改成
START:
MOV P0,#0
MOV R1,#15
給和我一樣的新手參考
完整程式:
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 ;更改此數字 即可改變伺服馬達角度 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 |
|