
;*********************** Registro de control ***************************************

status		equ		03h
porta		equ		05h
portb		equ		06h
portc		equ		07h
portd		equ		08h
porte		equ		09h
intcon		equ		0bh
pir1		equ		0ch
sspbuf		equ		13h
sspcon		equ		14h

trisa		equ		85h
trisb		equ		86h
trisc		equ		87h
trisd		equ		88h
trise		equ		89h
pie1		equ		8ch
sspstat		equ		94h

;******************************* Registro de usuario *************************************

lectura		equ		40h	; Variable que contiene el valor recibido por la
					; Comunicacin SPI

;******************************* Empieza el programa *************************************

	list p = 16f877

	org	00
	goto	inicio

	org	04
	goto	inter
;****************************** Rutina que controla las interrupciones ********************

inter	btfsc	pir1,3		; Pregunto si hubo interrupcin por fin de conversin A/D
	goto	recibe
	retfie			; Si no hubo conversin sale de la interrupcin

;**************************** Rutina de atencin de interrupcin de la serie sincrona ******

recibe	movf	sspbuf,0
	movwf	lectura		; Se le el byte recibido
	movwf	portb
	bcf	pir1,3		; Se inicializa la interrupcin
	bcf	sspcon,7	; Se limpia el bit WCOL si hubo una interrupcin
	retfie			; Retorna al PCL + 1

;****************************** Rutina principal MAIN() ******************************************

inicio	bcf	status,6
	bsf	status,5	; Banco 1
	movlw	b'00000000'
	movwf	trisb		; Puerto B como salidas digitales
	movlw	b'11101111'
	movwf	trisc		; Se configura RC3/SDO como entrada, RC4/SDI como salida y
				; RC5/SCK como entrada		
	movlw	b'11111111'
	movwf	trisa
	movwf	trisd
	movwf	trise		; Puertos A,C,D y E como entradas digitales
	movlw	b'11000000'
	movwf	sspstat		; Se configura el modo SPI para muestrear al final del
				; Impulso del reloj
	movlw	b'00001000'	
	movwf	pie1		; Interrupcin por el mdulo serie sncrono habilitado 
	bcf	status,5	; Banco 0
	clrf	portb
	clrf	lectura
	movlw	b'11000000'
	movwf	intcon		; Activo la interrupcin Global y la de perifricos 
	movlw	b'00100100'
	movwf	sspcon		; Se activa el modo SPI en modo esclavo con reloj SCK
nada	goto	nada		; Espera interrupcin al llenarce el SSPBUF
	end