📄 lg_508a.asm
字号:
LIST P=12C508A,R=HEX
;
; Retractable Landing Gear CONTROLLOR FOR R/C airccraft
; SUN, PU-NENG
; April/22/2004
;
;
;
; VERSION 1.0
; convert a normal ON/OFF action to 4 seconds smooth action
; for R/C Aircraft Retractable Landing Gear
;
; CHIP CONFIG : INTERC, WDT OSET.
;
;
; DEFINE RAM
;----- SYSTEM ---------
TMR0 EQU 1 ;TIMER 0
PCL EQU 2 ;PROGRAM COUNTER
STATUS EQU 3
FSR EQU 4 ;BUFFER OF INDIRECT ADDR
PB EQU 6 ;GPIO
GPIO EQU 6
;
;
;---- USER registers DEFINE ------
;
TMR1 EQU H'10' ;
TMR2 EQU H'11' ;
TMR3 EQU H'12' ;
HP EQU H'14' ;HIGH PASS COUNTER
LP EQU H'15' ;LOW PASS COUNTER
FLAGR EQU H'16' ;FLAG REGISTER
;
;
;---- USER FLAGS IN FLAGR DEFINE ------
;
STA EQU 0 ;STATUS ,FLAG REGISTER BIT 0
;
;---- VARIABLES DEFINE ----
;
W EQU 0 ;d VALUE FOR INCF......
F EQU 1 ;d VALUE
OFF EQU 0 ;FLAG BIT 0
ON EQU 1 ;FLAG BIT 1
NOISE EQU H'50' ;PULSE LESS THEN THIS DEFINE AS NOISE 0.8mS
LE EQU H'82' ;LOW EDGE, PULSE LESS THEN THIS DEFINE AS LOW 1.3mS
HE EQU H'AA' ;HIGH EDGE,PULSE MORE THEN THIS DEFINE AS HIGH 1.7mS
T1 EQU H'C8' ;TMR2 (200) * 5 * 1uS = 1.0mS THE MIN PLUSE WEITH
T2 EQU H'C8' ;TMR1 (200) * 5 * 1uS = 1.0mS PLUS THE MIN, MAKE MAX PULSE WEITH
T4 EQU H'9' ;CONTINUE (9) VALID PULSES TO CHANGE THE STATUS
;
;
;---- HARDWARE PINS DEFINE ----
INPIN EQU 3 ;RB0 AS INPUT PORT
OUTPIN EQU 2 ;RB2 AS OUTPUT PORT
;========== MAIN PROGRAM =========
;
;
ORG 0
START MOVLW 8 ;PA3=INPUT, OTHERS =OUTPUT
TRIS GPIO
MOVLW H'C0' ;T0CS=0, TO ENABLE GP2
OPTION ;
CLRF TMR1
CLRF TMR2
CLRF HP
CLRF LP
BCF FLAGR,STA
;---------------------------------------------
MAIN CLRWDT
BTFSS PB,INPIN ;IF INPIN = HIGH, INCREASE TMR3
GOTO MAIN
CLRF TMR3 ;READ INPIN PULSE WEITH
MAIN2 INCF TMR3,F ;START LOOP
CLRWDT
NOP ;10 uS LOOP
NOP
NOP
NOP
NOP
BTFSC PB,INPIN ;UNTIL INPIN GO LOW
GOTO MAIN2 ;END LOOP
MAIN3 MOVLW NOISE
SUBWF TMR3,W
SKPC ;IF f > w, C= 1,SKIP
GOTO MAIN ;ELSE IT'S NOISE, NO OUTPUT
MAIN4 MOVLW LE
SUBWF TMR3,W
SKPC ;IF f > w, C=1, SKIP
GOTO LOW1 ;ELSE IT'S LOW
MAIN5 MOVLW HE
SUBWF TMR3,W
SKPC ;IF f > w, C=1, SKIP TO HIGH
GOTO OUTPUT ;ELSE IT'S BETWEEN LOW/HIGH
;----------------------------------------------------------
HIGH1 BTFSS FLAGR,STA ;IS STATUS HIGH OR LOW ?
GOTO HIGH3 ;
HIGH2 MOVF LP,W ; STATUS= HIGH
BTFSC 3,2 ;ZERO FLAG CLEAR, SKIP
GOTO OUTPUT ;LP=0
DECF LP,F ;LP> 0
GOTO OUTPUT
HIGH3 MOVLW T4 ;STATUS = LOW
SUBWF HP,W
BTFSC 3,2 ;ZERO FLAG CLEAR, SKIP
GOTO HIGH4 ;HP=T4
INCF HP,F ;HP < T4
GOTO OUTPUT
HIGH4 BSF FLAGR,STA
GOTO OUTPUT
;---------------------------------
LOW1 BTFSC FLAGR,STA ;IS STATUS HIGH OR LOW ?
GOTO LOW3
LOW2 MOVF HP,W ;STATUS =LOW
BTFSC 3,2 ;ZERO FLAG CLEAR, SKIP
GOTO OUTPUT ;HP=0
DECF HP,F ;HP> 0
GOTO OUTPUT
LOW3 MOVLW T4 ;STATUS= HIGH
SUBWF LP,W
BTFSC 3,2 ;ZERO FLAG CLEAR, SKIP
GOTO LOW4 ;LP=T4
INCF LP,F ;LP < T4
GOTO OUTPUT
LOW4 BCF FLAGR,STA
;---------------------------------------
OUTPUT BTFSC FLAGR,STA
GOTO HSTA ;OUTPUT A PULSE 1~2 mS
LSTA MOVF TMR1,W
BTFSC 3,2 ;ZERO FLAG CLEAR, SKIP
GOTO K1 ;TMR1=0
DECF TMR1,F ;TMR1> 0
GOTO K1
HSTA MOVLW T2
SUBWF TMR1,W ;TMR1 = T2 ?
BTFSC 3,2 ;ZERO FLAG CLEAR, SKIP
GOTO K1 ;TMR1=T2
INCF TMR1,F ;TMR1 <T2
GOTO K1
;----------------------------------
K1 BSF PB,OUTPIN ;PULL PULSE HIGH
MOVLW T1 ;THE 1 mS PULSE
MOVWF TMR2
K3 NOP ;MAKE THIS LOOP 5 uS
NOP
DECFSZ TMR2,F
GOTO K3 ;END OF LOOP
MOVF TMR1,W ;LOAD TMR1 FOR PULSE MORE THEN 1 mS
MOVWF TMR2
INCF TMR2,F
K4 NOP
NOP ;MAKE THIS LOOP 5 uS
DECFSZ TMR2,F
GOTO K4 ;END OF LOOP
BCF PB,OUTPIN ;PULL PULSE LOW
GOTO MAIN
;---------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -