LIST	P=16F877        
		RADIX		HEX                                
		INCLUDE		<p16f877A.inc>
		__CONFIG 	_CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _RC_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
		
		CBLOCK   0X20
		apun 	
		dato 	
		PROT1	
		PROT2	
		ENDC

		org 	0x00
		GOTO	TRANS
		org		0X05
TRANS 	BSF 	STATUS,RP0 	;banco 1
	 	MOVLW	b'00000011'
		MOVWF	TRISD
	 	BCF 	TXSTA,BRGH 	;pone bit BRGH=0 (velocidad baja)
 		MOVLW 	0x06 		;valor para configurar 9600 Bauds
  		MOVWF 	SPBRG 		;configura 9600 Bauds
		BCF 	TXSTA,SYNC 	;limpia bit SYNC (modo asíncrono)
	 	BCF 	STATUS,RP0 	;regresa al banco 0
  	 	BSF 	RCSTA,SPEN 	;pone bit SPEN=1 (habilita puerto serie)
      	BSF 	RCSTA,CREN 	;Habilita recepción
		clrf	PORTD
		
recibe 	BTFSS	 PIR1,RCIF  ;checa el buffer de recepción
		GOTO	 recibe 	;si no hay dato listo espera
		MOVF 	RCREG,W 	;si hay dato, lo lee
		MOVWF 	dato 		;lo almacena en dato
		MOVF	dato,W
		sublw	0x61
		btfss	STATUS,Z
		goto	be
		bsf		PORTD,0
		call	TEMP
		goto	recibe
be		sublw	0x62
		btfss	STATUS,Z
		goto	recibe
		bsf		PORTD,1
		call	TEMP
		goto	recibe

TEMP
		MOVLW	B'11111111'
		MOVWF	PROT1					;rutina de retardo para visualizar las operaciones 
LOOP2
		MOVLW	B'11111111'
		MOVWF	PROT2
LOOP
		DECFSZ	PROT2,1
		GOTO	LOOP	
		DECFSZ	PROT1
		GOTO	LOOP2		
		RETURN
end