        LIST P=12C508A,R=HEX
;
;       Retractable Landing Gear CONTROLLOR FOR R/C airccraft
;       SUN, PU-NENG
;       
;	VERSION 2.0A  (MAY/02/2004)
;	END POINTS ADJUSTABLE, FOR HIGH-END LIKE FUTABA FF8, JR 9X 
;	CAN'T WORK BY JOYSTICK,
;	DTIME * 2SEC = TIME TO MOVE FROM SIDE TO SIDE
;
; 	VERSION 2.0  (April/27/2004)
;	ADD Anti-Collision Strobe Light & Landing Lights OUTPUT 
;  
;       VERSION 1.0  (April/22/2004)
;       convert a normal ON/OFF action to 4 seconds smooth action
;       for R/C Aircraft Retractable Landing Gear 
;
;	CHIP CONFIG : INTERC, WDT OSET.	
	__CONFIG 	H'0FEE'	
;       
;       DEFINE RAM
;-----  SYSTEM  ---------
TMR0	EQU 1		;TIMER 0
PCL     EQU 2           ;PROGRAM COUNTER
STATUS  EQU 3
FSR     EQU 4           ;BUFFER OF INDIRECT ADDR
OSCCAL  EQU 5	
GPIO	EQU 6
;
;
;----  USER registers DEFINE  ------
;
TMR2    EQU H'11'       ;
TMR3    EQU H'12'       ; 
TMR4    EQU H'13'       ; 
POINT   EQU H'14'       ;CURRENT POSITION
DELAY   EQU H'15'       ;DALEY
;
;----  USER FLAGS IN FLAGR DEFINE  ------
;
;----  VARIABLES DEFINE ----
;
W       EQU 0           ;d VALUE FOR INCF......
F       EQU 1           ;d VALUE
NOISE   EQU H'50'       ;PULSE LESS THEN THIS DEFINE AS NOISE 0.8mS
T5	EQU H'19'	;25 X 20mS =0.5S, HALF OF ACSL FLASH TIME ***
DTIME   EQU H'03'       ;1~2mS=100STEP X 10uS,50STEP/SEC,
;			;2SECOND WILL RUN SIDE TO SIDE,DT X 2SEC =6 SEC
RLIMIT 	EQU H'C8'	;200 =2.00mS
LLIMIT	EQU H'64'	;100 =1.00mS
;
;----  HARDWARE PINS DEFINE ----

INPIN   EQU 3           ;RB0 AS INPUT PORT 
OUTPIN	EQU 2		;RB2 AS OUTPUT PORT 
ACSL1	EQU 0		;Anti-Collision Strobe Light, FLASH 
ACSL2	EQU 1		;INVERT OF ACSL1
LL1	EQU 4		;Landing Lights ON/OFF ACTION***
LL2	EQU 5		;INVERT OF HLL

;==========   MAIN PROGRAM   =========
;
        ORG     0
	MOVWF OSCCAL	
;
;-------SETUP (LL2=1,POINT=150)
START   MOVLW 8         ;PA3=INPUT, OTHERS =OUTPUT		
	TRIS GPIO 
	MOVLW H'C0'	;T0CS=0, TO ENABLE GP2 
	OPTION 		;
	CLRF GPIO	;SET ALL OUTPUT LOW ***
        MOVLW H'96'     ;SET POINT IN CENTER, 150
        MOVWF POINT 
        MOVLW DTIME        ;
        MOVWF DELAY 
	MOVLW T5	;RESTORE TMR4
	MOVWF TMR4
;---------------------------------------------
;-------GET INPUT (INPIN;;TMR3) 
MAIN    CLRWDT
	BTFSS GPIO,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 GPIO,INPIN	;UNTIL INPIN GO LOW
        GOTO MAIN2      ;END LOOP
;-----------------------------------------------
;-------FILTER,NEW POINT,DELAY TIME,
;------ (TMR3,NOISE,POINT,DTIME;;POINT,RLIMIT,LLIMIT,LL1,LL2;;DELAY)
MAIN3   MOVLW NOISE
        SUBWF TMR3,W
        SKPC            ;IF f > w, C= 1,SKIP
        GOTO MAIN       ;ELSE IT'S NOISE, NO OUTPUT
MAIN4   MOVF POINT,W	;LOAD CURRENT POINT
        SUBWF TMR3,W
        SKPNZ           ;IF f = w, Z=1,NO SKIP 
        GOTO STOP1       
MAIN5	SKPC		;IF f > w, C=1, SKIP TO RIGHT
	GOTO LEFT	;IF f < w, C=0, GOTO LEFT
RIGHT   DECFSZ DELAY,F
	GOTO OUTPUT
RIGHT1  MOVLW DTIME
        MOVWF DELAY
RIGHT2	MOVLW RLIMIT	;BE SURE POINT IN LIMIT
        SUBWF POINT,W
        SKPNZ           ;IF f = w, Z=1,NO SKIP 
        GOTO OUTPUT     ;ON LIMIT  
	INCF POINT,F	
	BSF GPIO,LL1	;TURN LL1 ON 
	BCF GPIO,LL2	;LL2 OFF 
	GOTO OUTPUT
LEFT	DECFSZ DELAY,F
	GOTO OUTPUT
LEFT1   MOVLW DTIME
        MOVWF DELAY
LEFT2	MOVLW LLIMIT	;BE SURE POINT IN LIMIT
        SUBWF POINT,W
        SKPNZ           ;IF f = w, Z=1,NO SKIP 
        GOTO OUTPUT     ;ON LIMIT
	DECF POINT,F
	BCF GPIO,LL1	;TURN LL1 OFF 
	BSF GPIO,LL2	;LL2 ON 
	GOTO OUTPUT
STOP1   MOVLW DTIME
        MOVWF DELAY
	GOTO OUTPUT
;---------------------------------------
;-------OUTPUT A HIGH PLUSE (POINT;;OUTPIN;;TMR2)
OUTPUT 	BSF GPIO,OUTPIN	;PULL OUTPIN HIGH
	MOVF POINT,W	;
	MOVWF TMR2
K4	CLRWDT
	NOP
	NOP
	NOP
	NOP
	NOP	
	NOP		;MAKE THIS LOOP 10 uS
	DECFSZ TMR2,F
	GOTO K4		;END OF LOOP
	BCF GPIO,OUTPIN	;PULL PULSE LOW
;---------------------------------------------
;-------FLASH ASCL (T5;;ASCL1,ASCL2;;TMR4)
K5	DECFSZ TMR4,F	;
	GOTO MAIN
	MOVLW T5	;RESTORE TMR4
	MOVWF TMR4
        BTFSS GPIO,ACSL1
	GOTO K6		;LSTA=0
	BCF GPIO,ACSL1	;LSTA=1
	BSF GPIO,ACSL2	
	GOTO MAIN
K6	BSF GPIO,ACSL1	;LSTA=0
	BCF GPIO,ACSL2	
	GOTO MAIN
;----------------------------------------------
;
;---------------------------------------------------
        END


