;ROBOT4.ASM, version una entrada solo RA0.
;Avanza, si choca retrocede.

;----------------------------------------------------------
        List p=16F84
;----------------------------------------------------------
;cabecera standar 
;----------------------------------------------------------                                    

PORTA  		EQU     5
PORTB  		EQU     6
TRISA  		EQU     5
TRISB		EQU     6
STATUS 		EQU     3
INTCON 		EQU     0x0B
TMR0   		EQU     1
OPTION_R	EQU     1  
W      		EQU     0
F      		EQU     1
CONTA		EQU	.76
SENTI  		EQU     0x0C  	;sentido del giro 01 o 10 RB2,RB3	
VECES		EQU	0DH	;vable para temporizar
;-----------------------------------------------------------
;zona reset
;-----------------------------------------------------------

       		ORG      0
       		GOTO     INIC
       		ORG      5

;-----------------------------------------------------------
;configura PORTB de salida y PORTA de entrada
;-----------------------------------------------------------

INIC   		BSF	STATUS,5        ;banco 1
       		CLRF	TRISB           ;PORTB de salida

      		MOVLW   b'00000001'	;RA0 entrada
       		MOVWF   TRISA

       		BCF     STATUS,5        ;banco 0

;------------------------------------------------------------
;;Habilito el driver L293B sacando 1 por RB3 y avanza
;;------------------------------------------------------------
       		MOVLW	b'00001010'	 ;habilito L293B  RB3=1 y avanza
       		MOVWF	SENTI
       		CALL	MUEVE
;;------------------------------------------------------------
;bucle infinito testeando RA0
;------------------------------------------------------------
	
TEST  		BTFSS 	PORTA,0		;detecta luz ?(RA0=1 SI)... choco?
		GOTO	TEST
		CALL	CHG
		
		GOTO	TEST
						
CHG		MOVF	SENTI,0
		XORLW	b'00000110'	;cambio sentido
		MOVWF	SENTI
		CALL	MUEVE
		RETURN	
						
MUEVE		MOVF	SENTI,0		;W	
		MOVWF	PORTB
		CALL	PAUSA		;no testea nada hasta pasados 5 segundos
		RETURN
		
PAUSA
		;-------- pausa 5 segs 256*256*76
		MOVLW	CONTA
		MOVWF	VECES
		
CICLO		MOVLW	0
		MOVWF	TMR0
		
		BSF	STATUS,5	;banco 1
		MOVLW	b'00000111'	;prescaler 256 al TMR0
		MOVWF	OPTION_R
		BCF     STATUS,5	;banco 0
		
DESBO		BTFSS	INTCON,2
		GOTO	DESBO
		BCF	INTCON,2	;restablezco flag
		
		DECFSZ	VECES,1
		GOTO	CICLO
		
		MOVLW	0
		MOVWF	PORTA
		
		RETURN
		;------------------	
		
       		END
