        LIST    P=PIC12C508A, R=HEX
;
;       DSC AUTO SHOOT CONTROLLER FOR R/C MODEL
;       SUN, PU-NENG
;       AUGUST/14/2004
;
; 	       
;       VERSION 1.0
;       USE A SPARE CHANNEL ON R/C RECEIVER,
;       TO CONTROL DSC
;       FOR PULSE WIDTH 0.7~2.3mS, FRAME TIME 16~23mS
;	
;	CONFIG IntRC, OTHERS DON'T CHECK
	__CONFIG 	H'0FEA'	
;       
;       DEFINE RAM
;-----  SYSTEM  ---------
STATUS  EQU 3
OSCCAL 	EQU 5
GPIO    EQU 6           ;

;
;----  USER DEFINE  ------
;
CNA    EQU H'7'       
CNB    EQU H'8'       
CNC    EQU H'9'       
CND    EQU H'A'       
DCNT    EQU H'B'       
HCNT    EQU H'C'       
NCNT    EQU H'D'       
DTIME   EQU H'E'       
;
;       DEFINE BIT
;
W       EQU 0           ;d VALUE FOR INCF......
F       EQU 1           ;d VALUE
INPIN   EQU 3           ;GPIO 3 IS INPUT ONLY PIN
SHOOT   EQU 2           ;DSC AUTO SHOOT OUT      
SEL1    EQU 1           ;                        
SEL0    EQU 0           ;                        
RSH     EQU 4           ;REVERSE OF SHOOT        
ONFLAG  EQU 5           ;ON                      
;
;      DEFINE VARIABLES
;
NOISE   EQU H'15'       ;35*20uS= 0.7 mS, PULSE < 0.6 DEFINE AS NOISE
ACTION  EQU H'30'       ;80 *20uS= 1.6 mS, PULSE > 1.6 DEFINE AS VALID
PASS_NO	EQU H'03'	
DT2	EQU H'20'	;CALIBRATION OF CNTB

;=====================================
	ORG     0
	MOVWF 	OSCCAL
START   MOVLW H'0B'        
        TRIS GPIO       ;
	MOVLW H'80'	;GPPU ENABLE,T0CS=0 ENABLE GP2
	OPTION 
        CLRF HCNT
;----------------------
        BTFSS 	GPIO,SEL0
        GOTO 	ST1
	BTFSS 	GPIO,SEL1
        GOTO 	ST2
	MOVLW 	H'FF'	;DEFAULT 5/2 SECOND
	MOVWF 	DTIME 	;SEL0 = OPEN SEL1 = OPEN  
	GOTO 	ST4
ST1	BTFSS 	GPIO,SEL1
        GOTO 	ST3
	MOVLW 	H'CC'	;4/2 SECOND
	MOVWF 	DTIME	;SEL0 = CLOSE SEL1 = OPEN  
	GOTO 	ST4
ST2	MOVLW 	H'99'	;3/2 SECOND
	MOVWF 	DTIME	;SEL0 = OPEN SEL1 = CLOSE  
	GOTO 	ST4
ST3	MOVLW 	H'66' 	;2/2 SECOND
	MOVWF 	DTIME	;SEL0 =CLOSE SEL1 = CLOSE  
ST4	BCF 	GPIO,ONFLAG
	BSF 	GPIO,SHOOT
	BCF 	GPIO,RSH
        MOVF 	DTIME,W
	MOVWF 	CNB
;---------------------
MAIN    CLRF NCNT
MAIN1   NOP
        BTFSC GPIO,INPIN
        GOTO MAIN2
        CALL SUB1
	GOTO MAIN1
MAIN2   INCF NCNT,F
        BTFSS GPIO,INPIN
        GOTO MAIN3
        CALL SUB1
	GOTO MAIN2
MAIN3   MOVLW NOISE
        SUBWF NCNT,W
        SKPC            ;IF f > w, C= 1,SKIP
        GOTO MAIN       ;ELSE IT'S NOISE
MAIN4   MOVLW ACTION
        SUBWF NCNT,W
        SKPC            ;IF f > w, C=1, SKIP TO HIGH
        GOTO LOW1       ;ELSE IT'S LOW 
HIGH1   INCF HCNT,F
	GOTO MAIN       
LOW1    MOVF HCNT,F 
	SKPNZ             
 	GOTO MAIN         
 	DECF HCNT,F       
 	GOTO MAIN         
	

  
;========================================== 
	
SUB1    DECFSZ CNA,F
        GOTO RE1
SUB2    DECFSZ CNB,F
        GOTO RE2
SUB3 	MOVF  DTIME,W
	MOVWF CNB
	MOVLW PASS_NO
        SUBWF HCNT,W
        SKPC            ;IF f > w, C= 1,SKIP
	GOTO TDOWN
	CLRF HCNT
RR1	BSF 	GPIO,ONFLAG
	BTFSS 	GPIO,SHOOT
	GOTO 	RR3
RR2	BCF 	GPIO,SHOOT
	BSF 	GPIO,RSH
	GOTO 	RE5
RR3	BSF 	GPIO,SHOOT
	BCF 	GPIO,RSH
	GOTO 	RE5
TDOWN	BCF 	GPIO,ONFLAG
	BCF 	GPIO,SHOOT
	BSF 	GPIO,RSH
	GOTO 	RE6
RE1	NOP
RE2	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
RE3	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
RE5 	NOP
	NOP
	NOP
RE6	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	RETLW 0
;---------------------------
	END