 

	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF	; Configuracion para el grabador

	list 				p=16f877				; Tipo de microcontralor
	include				<P16f877.inc>			; Definicion de los operandos utilizados

uni					equ	0x20					;Usados para manejar los datos a mostrar en display
dec					equ	0x21
cen					equ	0x22
tiempo1				equ	0x23					;Usados para temporizar
tiempo2				equ	0x24
letra				equ	0x25					;Usado para apuntar la letra a colocar en el LCD
tempDESEADO			equ	0x26					;Registro donde guardo la Temperatura deseada para frio
mayor				equ	0x27					;Registro donde guardo la Temperatura de desactivación para frio
buffer				equ	0x28					;Usado como registro temporal
menor				equ	0x2A					;Registro donde guardo la Temperatura de activación para frio
tempDESEADO1		equ	0x2B					;Registro donde guardo la Temperatura deseada para calor
mayor1				equ	0x2c					;Registro donde guardo la Temperatura de desactivación para calor
menor1				equ	0x2d					;Registro donde guardo la Temperatura de activación para calor

char		EQU	30h
TA0			EQU	31h

aux_dec		EQU	0x29
aux_uni		EQU	2Fh

#define				CARRY	STATUS, 0			;Bit de acarreo
#define				CERO	STATUS, 2			;Flag indicador de resultado cero
#define				rp0		STATUS, 5			;Bit 0 selector de página de memoria
#define				rp1		STATUS, 6			;Bit 1 selector de página de memoria
#define				ADGO	ADCON0, 2			;Bit que inicia la conversión (1) / Indica finalización (0)
#define				MINS	PORTA, 1			;Sube la temperatura deseada
#define				MINB	PORTA, 2			;Baja la temperatura deseada

#define				LLAVE			PORTA, 3			;FRIO / CALOR
#define				BUZZER			PORTD, 5			;Salida al aviso acústico
#define				RESISTENCIA		PORTD, 3			;Activacion/Desactivacion de la resistencia
#define				valvula_ON		PORTC, 4			;Valvula ON 
#define				valvula_OFF 	PORTC, 5			;Valvula OFF
#define				ventilador		PORTD, 4			;Ventilador
#define				LCDE			PORTD, 6			;Habilitación del LCD
#define				LCDRS			PORTD, 7			;Selección de modo del LCD
#define				RC7				PORTC, 6			
#define				RC6				PORTC, 7			

 		org 	0x00
		goto INICIO

;		org		0x04
;		goto	interrup
		
INICIO		
							
		   clrw                    ; Clear W.
           movwf   PORTA           ; Limpia los puertos
           movwf   PORTB           ; 
		   movwf   PORTC		   ;
		   movwf   PORTD		   ;
		   
		; Configuracion de puertos
        
		   bsf     rp0             ; Selecciona Banco 1
		   bcf	   rp1
		   movlw   b'00011111'	   ; Configura el Puerto A
           movwf   TRISA           ; 
		   clrf	   TRISB		   ; Puertos B y D como salida
		   clrf	   TRISD
		   movlw   b'10000000'	   ; Configura el Puerto C
           movwf   TRISC           ;			
           movlw   .25             ; Valor, para que con un osc. de 4MHz, y
           movwf   SPBRG           ; BRGH=1, se trabaja a 9600 baudios
           movlw   b'00100100'	   ; Palabra que selecciona transmisión de 8 bits, activa la transmisión,
	       movwf   TXSTA 		   ; Selecciona el modo asincronico y la velocidad de baudios
		   movlw   b'10001110'	   ; Configura los pines del Puerto A
		   movwf   ADCON1		   ; AN0 como única entrada análoga
		 
	       bcf     rp0             ; Selecciona Banco 0
           movlw   b'10010000'     ; Palabra que habilita el puerto serie, selecciona recepcion de 8 bits
		   movwf   RCSTA		   ; Habilita recepcion continua
		   movlw   b'01000001'	   ; Enciende y configura el convertidor A/D - Selecciona AN0 como entrada
		   movwf   ADCON0
		   clrf	   PORTA		   ; Limpia los puertos 
		   clrf    PORTB
		   clrf    PORTC
		   clrf    PORTD
			bcf		PIR1,RCIF
	      
;----------------------------------------------------------------------------------------------------------
;Rutina que coloca en el LCD la temperatura
;---------------------------------------------------------------------------------------------------------- 
			movlw	d'20'		  ;Temperatura deseada inicial standar para frio 
			movwf	tempDESEADO		
			movlw	d'20'		  ;Temperatura de deseada inicial standar para calor
			movwf	tempDESEADO1
		
			movlw	b'00111000'	  ;Comunicación con el LCD a ocho bits - Dos líneas de texto
			call	CONTROL
			movlw	d'2'
			call	DEMORA		  ;Demora 2ms
			movlw	b'00000110'	  ;Mensaje estático, se desplaza el cursor hacia la derecha
			call	CONTROL
			movlw	d'2'
			call	DEMORA		  ;Demora 2ms
			movlw	b'00001100'	  ;Enciende el display - Oculta el cursor - Caracter fijo
			call	CONTROL
			movlw	d'2'
			call	DEMORA		  ;Demora 2ms

			call coloca_tit
			
;--------------------------------------------------------------------------------------------
;Inicializa el conversor A/D
;--------------------------------------------------------------------------------------------		        
CICLO	
				
			bsf 	ventilador	  ;Activa el ventilador
			bsf		ADGO		  ;Inicia la conversión A/D
			btfsc	ADGO		  ;Espera que termine de convertir
			goto	$ -1
	
			bsf		rp0			  ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
			movf	ADRESL, 0	  ;Resultado de conversión -> W
			bcf		rp0			  ;Pasa a página 0

			movwf	buffer		  ;Guarda el dato obtenido de ADRESL en el buffer temporal
			bcf		CARRY		  ;Limpia el CARRY
			btfsc	ADRESH, 0	  ;Mira el bit menos significativo de ADRESH (Bit 8)
			bsf		CARRY		  ;Si está en 1 pone en uno el carry
			rrf 	buffer, 1	  ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL
		

			decf	tempDESEADO,0
			movwf	menor		  ;menor = buffer - 1

			incf	tempDESEADO,0				
			movwf	mayor		  ;mayor = buffer + 1


			decf	tempDESEADO1,0
			movwf	menor1		  ;menor1 = buffer - 1

			incf	tempDESEADO1,0
			movwf	mayor1		  ;mayor1 =  buffer + 1
			
			btfsc   PIR1,RCIF	  ; Verifica si se produjo una interrupcion por RX
			goto    apaga		  ; Apaga todo
		
			btfss	LLAVE		  ;Llave Cerrada = 0 Actua la valvula
								  ;Llave Abierta = 1 Actua la resistencia
			goto 	unofrio		  
			goto 	unocalor

;///////////  ACTIVACION / DESACTIVACION DE LA RESISTENCIA ////////////////		
unocalor

			bcf 	valvula_ON	  ;Apaga la Valvula
			bsf 	valvula_OFF

			movf	menor1, 0	  ;Punto de activación -> W
			addlw	d'1'		  ;Suma 1 a W
			subwf	buffer, 0	  ;W = Temp. Actual - (menor1 + 1)
			btfss	CARRY		  ;Si dio negativo es porque la temp. medida es igual o menor al punto de activación
			bsf		RESISTENCIA	  ;Si dio negativo (si carry = 0) activa la Resistencia
										
			movf	mayor1, 0	  ;Punto de desactivación -> W
			subwf	buffer, 0	  ;W = Temp. Actual - (mayor1)
			btfsc	CARRY		  ;Si dio negativo es porque aún no alcanzó la temp. de desactivación
			bcf		RESISTENCIA	  ;Si dio positivo (si carry = 1) desactiva la Resistencia
	
			nop

			movf	buffer, 0	  ;Dato digitalizado -> W

			call	DECIMAL		  ;Obtiene UNI, DEC y CEN con el agregado de 30h para la tabla ASCII
			
			movlw	0x8B		  ;Coloca el cursor en la posición 0Bh de la primera linea de la pantalla.
			call	CONTROL
			
				
			movf	cen, 0		  ;Coloca en el LCD las centenas
			call	DATO
			movf	dec, 0		  ;Coloca las decenas
			call	DATO
			movf	uni, 0		  ;Coloca las unidades
			call	DATO
			movlw	b'11011111'	  ;Simbolo °
			call	DATO
			movlw	'C'
			call	DATO
			movlw	0xCB		  ;Coloca el cursor en la posición 0Dh de la pantalla.
			call	CONTROL
			movf	tempDESEADO1, 0	;Dato digitalizado -> W

			call	DECIMAL		  ;Obtiene UNI, DEC y CEN con el agregado de 30h para la tabla ASCII
	
			movf	cen, 0		  ;Coloca en el LCD las centenas
			call	DATO
			movf	dec, 0		  ;Coloca las decenas
			call	DATO
			movf	uni, 0		  ;Coloca las unidades
			call	DATO
			movlw	b'11011111'	  ;Simbolo °
			call	DATO
			movlw	'C'
			call	DATO

			btfss	MINS		;Mira el pulsador de incremento 
			call	SUBE
			btfss	MINB		;Mira el pulsador de decremento 
			call	BAJA			

			goto	transmite
		    ;goto	CICLO		  ;Vuelve a medir y mostrar


;///////////  ACTIVACION / DESACTIVACION DE LA VALVULA ////////////////

unofrio
			bcf		RESISTENCIA	  ;Desactiva la resistencia

			movf	menor, 0	  ;Punto de activación -> W
			addlw	d'1'		  ;Suma 1 a W
			subwf	buffer, 0	  ;W = Temp. Actual - (menor + 1)
			btfsc	CARRY						
			goto 	may
			
			bsf		valvula_OFF	  ;Desactiva la valvula
			bcf		valvula_ON					  
			
may			movf	mayor, 0	  ;Punto de desactivación -> W
			subwf	buffer, 0	  ;W = Temp. Actual - (Mayor)
			btfss	CARRY
			goto	sal							
			
			bsf		valvula_ON	 ;Activa la valvula 
			bcf		valvula_OFF			

sal			nop

			movf	buffer, 0	;Dato digitalizado -> W

			call	DECIMAL		;Obtiene UNI, DEC y CEN con el agregado de 30h para la tabla ASCII
			
			movlw	0x8B		;Coloca el cursor en la posición 0Bh de la primera linea de la pantalla.
			call	CONTROL
			
						
			movf	cen, 0		;Coloca en el LCD las centenas
			call	DATO
			movf	dec, 0		;Coloca las decenas
			call	DATO
			movf	uni, 0		;Coloca las unidades
			call	DATO
			movlw	b'11011111'	;Simbolo °
			call	DATO
			movlw	'C'
			call	DATO

			movlw	0xCB		;Coloca el cursor en la posición 4Bh de la segunda linea de la pantalla.
			call	CONTROL
			movf	tempDESEADO, 0	;Dato digitalizado -> W

			call	DECIMAL		;Obtiene UNI, DEC y CEN con el agregado de 30h para la tabla ASCII
	
			movf	cen, 0		;Coloca en el LCD las centenas
			call	DATO
			movf	dec, 0		;Coloca las decenas
			call	DATO
			movf	uni, 0		;Coloca las unidades
			call	DATO
			movlw	b'11011111'	;Simbolo °
			call	DATO
			movlw	'C'
			call	DATO


			btfss	MINS		;Mira el pulsador de incremento 
			call	SUBE
			btfss	MINB		;Mira el pulsador de decremento 
			call	BAJA
		   
			goto	transmite1	 ; Envia los datos a la PC
	
			;goto	CICLO	   ;Vuelve a medir y mostrar

;-------------------------------------------------------------------
;Titulos para el LCD
;-------------------------------------------------------------------
		
LINEA1	addwf	PCL, 1		   ;Suma el contenido de W al contador de programa (para explorar la tabla)
		retlw	"T"
		retlw	b'11011111'
		retlw	"A"
		retlw	"M"
		retlw	"B"
		retlw	"I"
		retlw	"E"
		retlw	"N"
		retlw	"T"
		retlw	"E"
		retlw	":"
		retlw 	" "
		retlw	" "
		retlw	" "
		retlw	" "
		retlw	" "
		return

LINEA2	addwf	PCL, 1		;Suma el contenido de W al contador de programa (para explorar la tabla)
		retlw	"T"
		retlw	b'11011111'
		retlw	"D"
		retlw	"E"
		retlw	"S"
		retlw	"E"
		retlw	"A"
		retlw	"D"
		retlw	"A"
		retlw	":"
		retlw	" "
		retlw	" "
		retlw	" "
		retlw	" "
		retlw	" "
        retlw	" "
		return

LINEA3	addwf	PCL, 1		;Suma el contenido de W al contador de programa (para explorar la tabla)
		retlw	" "
		retlw	" "
		retlw	" "
        retlw	" "
		retlw	"A"
		retlw	"P"
		retlw	"A"
		retlw	"G"
		retlw	"A"
		retlw	"D"
		retlw	"O"
		retlw	" "
		retlw	" "
		retlw	" "
		retlw	" "
		retlw	" "
		return

LINEA4	addwf	PCL, 1		;Suma el contenido de W al contador de programa (para explorar la tabla)
		retlw	" "
		retlw	"R"
		retlw	"E"
		retlw	"M"
        retlw	"O"
		retlw	"T"
		retlw	"A"
		retlw	"M"
		retlw	"E"
		retlw	"N"
		retlw	"T"
		retlw	"E"
		retlw	" "
		retlw	" "
		retlw	" "
		retlw	" "
		return
SUBE		btfss	LLAVE
			goto 	frio
			goto 	calor
	

;// PARA FRIO  //

frio		incf	tempDESEADO, 1	;Suma 1 a la temp. de activación
			movfw	tempDESEADO
			sublw	.30				;valor maximo en modo FRIO
			btfss	STATUS,C		
			decf	tempDESEADO, 1
			goto	Sigue
		


;// PARA CALOR  //

calor		incf	tempDESEADO1,1	;Suma 1 a la temp. de activación
			movfw	tempDESEADO1
			sublw	.22				;Valor maximo en modo CALOR
			btfss	STATUS,C		
			decf	tempDESEADO1,1


Sigue		
			btfss	MINS			;Espera que suelte el pulsador
			goto	Principal								
			goto	sonar			;Una vez que suelta la tecla va a guardar el parámetro
		


BAJA		btfss	LLAVE
			goto 	frio1
			goto 	calor1		
		
		

;// PARA FRIO  //		

frio1		decf	tempDESEADO, 1	;Resta 1 a la temp. de activación
			movfw	tempDESEADO					
			sublw	.16				;Valor minimo en modo FRIO
			btfsc	STATUS,C		
			incf	tempDESEADO, 1
			goto	sigue1
		


;// PARA CALOR  //

calor1		decf	tempDESEADO1, 1	;Resta 1 a la temp. de activación
			movfw	tempDESEADO1
			sublw	.10				;Valor minimo en modo CALOR
			btfsc	STATUS,C		
			incf	tempDESEADO1, 1



sigue1	
			btfss	MINB			;Espera que suelte el pulsador
			goto	Principal1		;Retardo Antirrebote
	
sonar	

TIC			bsf		BUZZER			;Acciona el buzzer
			movlw	d'100'
			call	DEMORA			;Deja sonar el buzzer durante 100ms
			bcf		BUZZER
			return
	


CONTROL		bcf		LCDRS	  		;Pone en bajo la línea de modo del LCD (Control)
			goto	ENVIAR			;Se saltea la sig. línea


DATO		bsf		LCDRS			;Pone en alto la línea de modo del LCD (Dato)


ENVIAR		movwf	PORTB			;Coloca el dato o control a enviar en el bus del LCD
			movlw	d'1'
			call	DEMORA			;Demora 1ms
			bsf		LCDE			;Habilita el LCD
			movlw	d'1'
			call	DEMORA			;Demora 1ms
			bcf		LCDE			;Deshabilita el LCD
			movlw	d'1'
			call	DEMORA			;Demora 1ms
			return


;//////// CONVERTIR UN NUMERO BINARIO A BCD/////////////


DECIMAL		movwf	uni			;Convierte el dato presente en W en UNI, DEC y CEN
			clrf	dec
			clrf	cen
			movlw	d'100'		;Determina la cant. de centenas
CENTENA		subwf	uni, 1
			btfss	CARRY
			goto	CIEN
			incf	cen, 1
			goto	CENTENA
CIEN		addwf	uni, 1
			movlw	d'10'		;Determina la cant. de decenas
DECENA		subwf	uni, 1
			btfss	CARRY
			goto	DIEZ
			incf	dec, 1
			goto	DECENA
DIEZ		addwf	uni, 1		;Uni queda con la cant. de unidades (sin decenas ni centenas)
	
			movlw	0x30		;Le suma 30h a los valores de UNI, DEC y CEN para que queden en ASCII
			addwf	uni, 1
			addwf	dec, 1
			addwf	cen, 1
			return
	
;//   RETARDOS  //

DEMORA		movwf	tiempo2		;Demora tantos milisegundos como valor en w

TOP2		movlw	d'110'
			movwf	tiempo1

TOP1		nop
			nop
			nop
			nop
			nop
			nop
			decfsz	tiempo1, 1
			goto	TOP1
			decfsz	tiempo2, 1
			goto	TOP2
			return


;///////////////RETARDOS ANTIRREBOTES//////////////

Principal
	btfsc 		MINS				; Pulsador presionado?
	goto 		Principal			; No, vuelve a leerlo
	movlw		d'20'				; Espera que se estabilicen lo niveles de tension
	call		DEMORA
	btfsc		MINS				; Comprueba si es rebote
	goto		FIN					; Era un rebote y sale fuera
EsperaDejePulsar
	btfss		MINS				; Dejo de pulsar?
	goto		EsperaDejePulsar   	;No, Espera que deje de pulsar
FIN	goto 		Sigue	
;/////////////////////////////////////////////////
Principal1
	btfsc 		MINB				; Pulsador presionado?
	goto 		Principal1			; No, vuelve a leerlo
	movlw		d'20'				; Espera que se estabilicen lo niveles de tension
	call		DEMORA
	btfsc		MINB				; Comprueba si es rebote
	goto		FIN1				; Era un rebote y sale fuera
EsperaDejePulsar1
	btfss		MINB				; Dejo de pulsar?
	goto		EsperaDejePulsar1   ;No, Espera que deje de pulsar
FIN1 goto		sigue1	


transmite
			bsf		PORTD,2
			
			movlw	.33
	 		call  	TX_DATO
			nop 	
			btfss	RESISTENCIA
	 		goto	res_off
			movlw	.41
			call  	TX_DATO
			nop
			goto	end1
res_off		movlw	.42
			call  	TX_DATO
			nop
end1	
			movlw	.38
	 	  	call  	TX_DATO 
			nop
		
			movf  tempDESEADO1,W
	 		call  	TX_DATO 	
			nop
			movf  buffer,W
	   		call  	TX_DATO 	
			nop
			movlw	.47
			call  	TX_DATO
			nop


			goto	CICLO

transmite1
			bsf		PORTD,2
	        movlw	.34
	   		call	TX_DATO 	
			nop
			movlw	.42
			call	TX_DATO
			nop
			btfss	valvula_ON
	   		goto	val_off
			movlw	.37
			call	TX_DATO 
			nop
			goto	end2
val_off		
			movlw	.38
			call	TX_DATO
			nop
end2		
			movf  tempDESEADO,W
	   		call	TX_DATO 	
			nop
			movf  buffer,W
	  		call	TX_DATO
			nop	
			movlw	.47
			call	TX_DATO
			nop

			goto	CICLO

;-------------------------------------------------------------------------------------
; Rutina que coloca el titulo en el LCD
;-------------------------------------------------------------------------------------
coloca_tit
			movlw	b'00000001'	  ;Limpia la pantalla y pone cursor en posición inicial
			call	CONTROL
			movlw	d'2'
			call	DEMORA		  ;Demora 2ms

			clrf	letra		  ;Coloca el título en el LCD

ENVIA		movf	letra, 0	  ;Letra actual -> W
			call	LINEA1		  ;Obtiene el caracter a colocar desde la tabla
			call	DATO		  ;Envía el caracter al LCD
			incf	letra, 1
			movf	letra, 0	  ;Comprueba si ya envió los 16 caracteres del título
			sublw	d'16'
			btfss	CERO
			goto	ENVIA		  ;Si no llego a la letra 16 sigue enviando

			movlw	0xC1		  ;Posiciona el cursor en la 2da. linea
			call	CONTROL
			movlw	d'1'
			call	DEMORA		  ;Demora 1ms
			clrf	letra		  ;Coloca el título en el LCD


ENVIA2		movf	letra, 0	  ;Letra actual -> W
			call	LINEA2		  ;Obtiene el caracter a colocar desde la tabla
			call	DATO		  ;Envía el caracter al LCD
			incf	letra, 1

			movf	letra, 0	  ;Comprueba si ya envió los 16 caracteres del título
			sublw	d'16'
			btfss	CERO
			goto	ENVIA2		  ;Si no llego a la letra 16 sigue enviando
			return

apaga
			bsf		PORTD,2
			movlw	"A"
			call	TX_DATO
			nop
			movlw	"P"
			call	TX_DATO
			nop
			movlw	"A"
			call	TX_DATO
			nop
			movlw	"G"
			call	TX_DATO
			nop
			movlw	"A"
			call	TX_DATO
			nop
			movlw	"D"
			call	TX_DATO
			nop
			movlw	"O"
			call	TX_DATO
			nop

;-----------------------------------------------------------------
; Apaga todo
;-----------------------------------------------------------------

       bcf	 PORTD,2
	   bcf	 PIR1,RCIF		;Limpia la bandera de interrupcion por RX

       bcf   ventilador		; Apaga todo
	   bcf   valvula_OFF
	   bcf   valvula_ON
	   bcf   RESISTENCIA
;------------------------------------------------------------------
; Coloca "Apagado Remotamente" en el LCD
;------------------------------------------------------------------

	   movlw  b'00000001'	  ;Limpia la pantalla y pone cursor en posición inicial
	   call	  CONTROL
	   movlw	d'2'
	   call	  DEMORA		  ;Demora 2ms
	   clrf	  letra		  ;Coloca el título en el LCD
 
ENVIA1		movf	letra, 0	  ;Letra actual -> W
			call	LINEA3		  ;Obtiene el caracter a colocar desde la tabla
			call	DATO		  ;Envía el caracter al LCD
			incf	letra, 1
			movf	letra, 0	  ;Comprueba si ya envió los 16 caracteres del título
			sublw	d'16'
			btfss	CERO
			goto	ENVIA1		  ;Si no llego a la letra 16 sigue enviando

			movlw	0xC1		  ;Posiciona el cursor en la 2da. linea
			call	CONTROL
			movlw	d'1'
			call	DEMORA		  ;Demora 1ms
			clrf	letra		  ;Coloca el título en el LCD


ENVIA4		movf	letra, 0	  ;Letra actual -> W
			call	LINEA4		  ;Obtiene el caracter a colocar desde la tabla
			call	DATO		  ;Envía el caracter al LCD
			incf	letra, 1

			movf	letra, 0	  ;Comprueba si ya envió los 16 caracteres del título
			sublw	d'16'
			btfss	CERO
			goto	ENVIA4		  ;Si no llego a la letra 16 sigue enviando
;-----------------------------------------------------------------------------------------

		    ;call    getc				  

;-----------------------------------------------------------------------------------------
; Regresa cuando se presione un "numero"
;-----------------------------------------------------------------------------------------
loop
			btfss   PIR1,RCIF
	   		goto	loop		
	   		bcf	PIR1,RCIF
			movf	RCREG,W			
	   		movwf   aux_dec		
	   		movlw	30h		
	   		subwf	aux_dec,W
	   		btfss	STATUS,C
	   		goto	loop
	   		movlw	40h
	   		subwf	aux_dec,w
	   		btfsc	STATUS,C
	   		goto	loop
			call    coloca_tit
			goto	CICLO


;------------------------------------------------------------------------------------
;Rutina que transmite por el USART el dato que está en el registro W
;------------------------------------------------------------------------------------
TX_DATO	   bcf     STATUS,RP0      ; Seleciona Banco 0.
           movwf   TXREG           ; Mueve el byte a transmitir al Registro de TX
           bsf     STATUS,RP0      ; Seleciona Banco 1
           bcf     STATUS,RP1
TX_DAT_W
		  btfss	TXSTA,TRMT	  	   ; ¿Byte transmitido?
	      goto	TX_DAT_W	   	   ; No. Esperar
		  bcf	STATUS,RP0	       ; Si, vuelva al banco 0
		  return

;------------------------------------------------------------------------------------
;Rutina que recibe el dato por el USART
;------------------------------------------------------------------------------------

getc       bcf     STATUS,RP0      ; Selecciona Banco 0.
getc1      btfss   PIR1,RCIF	    
	   	   goto    getc1           ; 
	       movf	   RCREG,W         ; 
	       bcf     PIR1,RCIF       ; 
	       return

;interrup	retfie
;------------------------------------------------------------------------------------
		   end					   ;Termina el programa	
;------------------------------------------------------------------------------------
			
   




