	LIST	p=16F873
	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC & _LVP_OFF & _BODEN_OFF
	#include "P16F873.INC"
;CODIGO DE PROTECCION DESHABILITADO
;PERRO GUARDIAN DESHABILITADO
;POWER UP TIMER DESHABILITADO PARA EVITAR RESET
;OSCILADOR CRISTAL RESONADOR
;LVP DESHABILTADO POR QUE NO SE UTILIZA PARA PROGRAMAR EN CIRCUITO
;DESHABILITADO BIT BODEN PARA EVITAR RESET
;------------------------------------------------
			CBLOCK	0X20
			COUNTERA	
			COUNTERB	 
			COUNTERC
			CTRO	
			ENDC 
			
			ORG 	00
			GOTO 	INICIO
			
INICIO		BSF		STATUS,5	;CAMBIA AL BANCO 1
			CLRF	PORTA		;PUERTO A SALIDA
			CLRF	PORTB		;PUERTO B SALIDA
			MOVLW	B'00010000'	;SCK SALIDA, MAESTRO, SDI ENTRADA
			MOVWF 	PORTC 		;SDO ENTRADA
			MOVLW	B'01000000'	;MUESTREO MITAD DATO, TRANSMISION EN ALTO
			MOVWF 	SSPSTAT
			BCF		STATUS,5	;CAMBIA AL BANCO 0
			MOVLW	B'00110001'	;MODE 1,1 SPI MAESTRO,RELOG ALTO, FOSC/16
			MOVWF 	SSPCON
				
		 	BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'00000100'	;TOMA DATO, ESCRIBE,LONGITUD 1 BYTE, 3 REGISTRO DE COMANDO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR1		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR1		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			;INCF 	CTRO,F 		;INCREMENTA CONTADOR
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			CALL	PDELAY
			
			BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'00111010'	;ESCRIBE,UNIPOLAR, BIAS OFF,BINARIO,SDOUT,LSBY,MSBI 3 REGISTRO DE COMANDO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR2		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR2		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			CALL	PDELAY
			
			BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'00000101'	;ESCRIBE,LONGITUD 1 BYTE, 2 REGISTRO DE COMANDO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR3		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR3		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			CALL	PDELAY
			
			BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'00000000'	;MODO NORMAL,GANACIA 1,CANAL 1, 2 REGISTRO DE COMANDO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR4		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR4		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			CALL	PDELAY
			
			BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'00000000'	;ESCRIBE,LONGITUD 1 BYTE, 1 REGISTRO DE COMANDO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR5		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR5		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			CALL	PDELAY
			
			BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'00010000'	;MODO TURBO,RATA DE DATOS, 1 REGISTRO DE COMANDO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR6		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR6		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			CALL	PDELAY
			
			BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'00000111'	;ESCRIBE,LONGITUD 1 BYTE, 0 REGISTRO DE COMANDO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR7		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR7		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			CALL	PDELAY
			
			BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'00010110'	;RATA DE DATOS, 0 REGISTRO DE COMANDO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR8		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR8		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			CALL	PDELAY			
			
			BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'10000010'	;LECTURA, LONGITUD 1 BYTE, BYTE 0 REGISTRO SALIDA DATO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR9		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR9		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			
ENVIO		BCF 	PORTC,2 	;HABILITA ESCLAVO
			MOVLW 	B'10000010'	;LECTURA, LONGITUD 1 BYTE, BYTE 0 REGISTRO SALIDA DATO
			MOVWF 	SSPBUF 		;LO LLEVA AL REGISTRO SERIE
			BSF		STATUS,5	;CAMBIA AL BANCO 1
CHAR10		BTFSS 	SSPSTAT,BF 	;REVISA ENVIO DE DATO
			GOTO 	CHAR10		;NO, REVISA DE NUEVO 
			BCF		STATUS,5	;SI, CAMBIA AL BANCO 0
			MOVF 	SSPBUF,W 	;LEE DATO DE REGISTRO SERIE
			BSF 	PORTC,2 	;DESHABILITA ESCALVO
			MOVWF 	PORTB		;LLEVA DATO RECIBIDO AL PUERTO
			CALL	PDELAY		;RETARDO PARA ESTABILIZAR
			
			GOTO 	ENVIO 		;INICIA DE NUEVO


PDELAY		MOVLW	D'3'
			MOVWF	COUNTERC
			MOVLW	D'2'
			MOVWF	COUNTERB
			MOVLW	D'2'
			MOVWF	COUNTERA
LOOP		DECFSZ	COUNTERA,1
			GOTO	LOOP
			DECFSZ	COUNTERB,1
			GOTO	LOOP
			DECFSZ	COUNTERC,1
			GOTO	LOOP
			RETURN
			
			END