;*************************
; RX_TLC_MIVAR 
; 04-OTT. 2008
; IT9DPX - FRANCESCO
;*************************

   list F=INHX8M,P=16F628
   INCLUDE     "P16F628.INC"
   ERRORLEVEL      -302
   ERRORLEVEL      -305
   RADIX  HEX
   __CONFIG 3F09

DURATA   EQU  0020
FLAG     EQU  0021
CODICE   EQU  0022
CONTA    EQU  0023
S_M      EQU  0024
W_M      EQU  0025
TEMPO_1  EQU  0026
TEMPO_2  EQU  0027


    ORG 00
    
    GOTO  INIZIO
   
    ORG 04
;--------------------
; al sopraggiungere di un impulso su
; RB0 il valore del tmr1 viene letto 

INT_RB0
        MOVWF  W_M
        MOVFW  STATUS
        MOVWF  S_M

        BCF    INTCON,1        
        BSF    INTCON,7
        MOVFW  TMR1H
        CLRF   TMR1L
        CLRF   TMR1H
        MOVWF  DURATA
        BSF    FLAG,0

        MOVFW  S_M
        MOVWF  STATUS
        MOVFW  W_M

        RETFIE

;---------------------
;inizializza PIC

INIZIO
        BSF    STATUS,RP0
       ;commuta 2 banco

        MOVLW  B'01011111'
        MOVWF  OPTION_REG
      ;PULL-UPS ATTIVO

        MOVLW  B'10010000'
        MOVWF  INTCON
      ;abilita interrupt RB0

        MOVLW  B'00000001'
        MOVWF  TRISB
      ; rb0 come input

        MOVLW  B'00000000'
        MOVWF  TRISA
      ; porta output

        BCF    STATUS,RP0
      ;commuta 1 banco

        MOVLW  B'00010001' 
        MOVWF  T1CON
     ;tmr1 on , presc=2
 
        MOVLW  0007
        MOVWF  CMCON
     ;spegne compar. porte I/O on
         
        CLRF    FLAG
        CLRF    CODICE
        CLRF    TMR1L
        CLRF    TMR1H
        CLRF    CONTA
        BSF     PORTA,1
;-----------
;.....ritardo di RB0..
LOOP3
        DECF    TEMPO_1
        BTFSC   STATUS,Z
        DECF    TEMPO_2
        BTFSS   STATUS,Z
        GOTO    FINE_RIT
        CLRF    CONTA ;590mS circa
        SLEEP
;..........
FINE_RIT 
        BTFSS   FLAG,0
        GOTO    LOOP3
        BCF     FLAG,0
        MOVFW   DURATA
        addlw   .243  ;>di6(*2)
        btfsc   STATUS,C	
        goto    MAGGIORE
MINORE
        BCF     STATUS,C
        RLF     CODICE ;carica 0
        GOTO    LOOP3            
MAGGIORE
        MOVFW   DURATA
        addlw   .185  ;>di 35(*2
        btfsc   STATUS,C
        GOTO    CODICE_PRONTO
        BSF     STATUS,C
        RLF     CODICE  ;carica 1
        GOTO    LOOP3 

CODICE_PRONTO
        
TEST1
        MOVFW   CODICE
        ANDLW   B'00111111'
        XORLW   .46   ;RIV spegne
        BTFSS   STATUS,Z
        GOTO    TEST2
        INCF    CONTA
        MOVLW   .3
        XORWF   CONTA,W
        BTFSS   STATUS,Z
        GOTO    PROSEGUI
        CLRF    CONTA       
        BCF     PORTA,1
        GOTO    PROSEGUI
TEST2
        MOVFW   CODICE
        ANDLW   B'00111111'
        XORLW   .45   ;ALL accende
        BTFSS   STATUS,Z
        GOTO    PROSEGUI
        INCF    CONTA
        MOVLW   .3
        XORWF   CONTA,W
        BTFSS   STATUS,Z
        GOTO    PROSEGUI
        CLRF    CONTA       
        BSF     PORTA,1                   
;----------
PROSEGUI
        CLRF    TEMPO_1  ;azzera ritardo
        CLRF    TEMPO_2  ;
        GOTO    LOOP3
;-----------

	END
