
    LIST P=16F627A
   #INCLUDE "P16F627A.INC"

	__CONFIG 0x3F0A

;   Transmición a 9600 Baud asíncrono (9600,8 ,N, 1) 8 bits datos, sin paridad y 1 bit de stop
;------------Definicion de la RAM-------------------------------------------------------------------

	WWW      EQU   0x20
	ESTADO   EQU   0x21
	DATORX   EQU   0x22
	count	 equ   0x23
	count2	 equ   0x24
	count3	 equ   0x25
	count4	 equ   0x26
	count5	 equ   0x27
	HAY_DATO equ   0x28

;---------------------------------------------------------------------------------------------------   

	ORG   	0x00      		; vector de RESET   
	goto   	INICIO      	;    
	ORG   	0x04      		; vector de INTERRUPCION   

	goto   	RSI      	

;;---------------------------------------------------------------------------------------------------

RSI
	movwf   WWW       		;    
	swapf   STATUS,W    	; esto es necesario para no perder datos   
	movwf   ESTADO      	; cuando se produce la interrupccion       
	movf   	RCREG,W      	; mueve entrada a W    
	movwf   DATORX      	; mueve la entrada a DATORX    
	swapf   ESTADO,W   		;    
	movwf   STATUS      	; esto es necesario para no perder datos    
	swapf   WWW,F      		; cuando se produce la interrupccion    
	swapf   WWW,W      		;    
	BSF		HAY_DATO,0		; Seteo bandera de HAY_DATO a transmitir
retfie;---------------------------------------------------------------------------------------------------

INICIO   
	bcf   	STATUS,RP0   	; banco 0   
	bcf   	STATUS,RP1   
	clrf   	PORTA      		; limpio el puerto A   
	clrf   	PORTB      		; limpio el puerto B   
	movlw   0x07   
	movwf   CMCON   
	bsf   	STATUS,RP0   	; banco 1   
	movlw   B'00111111'   	;    
	movwf   TRISA   
	movlw   B'11110010'   	; RB1 enntrada resto salida modificar las entradas y salida menos rb1,rb2    
	movwf   TRISB      		; EEESSSES   
	movlw   B'00100000'   
	movwf   PIE1   
	movlw   B'00100100'  
	movwf   TXSTA   
	movlw   0x81   
	movwf   SPBRG   
	bcf   	STATUS,RP0 
	movlw   B'11000000'   
	movwf   INTCON   
	movlw   B'10010000'   
	movwf   RCSTA   
	BCF		PORTB,0
	BCF		HAY_DATO,0		; Reseteo bandera de HAY_DATO a transmitir
bucle
	BTFSC	HAY_DATO,0
	CALL	ENVIAR
	goto	bucle
	goto   	$      ; bucle infinito;---------------------------------------------------------------------------------------------------   

ENVIAR
        bcf 	STATUS,RP0      ; RAM Page 0 		
		movlw	b'00001001'
		movwf	PORTB
;		BSF		PORTB,0			; Predispone el MAX485 para la transmision

		bsf   	STATUS,RP0   	; banco 1  
		movlw   B'00100000'   
		movwf   PIE1   
		movlw   B'00100100'  
		movwf   TXSTA   
		bcf   	STATUS,RP0 
		movlw   B'10010000'   
		movwf   RCSTA

enciendeled
        bcf 	STATUS,RP0      ; RAM Page 0 
;		BSF		PORTB,3
		MOVLW	0x7F
		MOVWF	count
		MOVLW	0x7F
		MOVWF	count2
		MOVLW	0x7F
		MOVWF	count3
		MOVLW	0x7F
		MOVWF	count4
		MOVLW	0x7F
		MOVWF	count5
loop    rrf     count
        btfsc   count,0
loop2	rrf		count2
		btfsc   count2,0
loop3	rrf		count3
		btfsc   count3,0
loop4	rrf		count4
		btfsc   count4,0
loop5	rrf		count5
		btfsc	count5,0
		goto	loop5
		MOVLW	0x7F
		MOVWF	count5
		btfsc	count4,0
		goto	loop4
		MOVLW	0x7F
		MOVWF	count4
		btfsc   count3,0		
		goto	loop3
		MOVLW	0x7F
		MOVWF	count3
		btfsc   count2,0		
		goto	loop2
		MOVLW	0x7F
		MOVWF	count2
		btfsc   count,0		
        goto    loop

        bcf 	STATUS,RP0      ; RAM Page 0 
		movfw	DATORX
		movwf 	TXREG           ; echo data back to sender


		bsf 	STATUS,RP0      ; RAM Page 1 
;		nop
;		nop
WtHere  btfss 	TXSTA,TRMT      ; (1) transmission is complete if hi 
        goto 	WtHere

;		clrf	TXREG


	 	bcf		TXSTA,TRMT   
		bcf 	STATUS,RP0      ; RAM Page 1 
		movlw	b'00000000'
		movwf	PORTB
;		BCF		PORTB,0			; Alta impedancia al MAX485 para la transmision
;		BCF		PORTB,3
;		BCF		HAY_DATO,0		; Reseteo bandera de HAY_DATO a transmitir
		return 
		END