Bueno aqui esta el codigo del maestro:
list p=16f877A
include<p16f877A.inc>
org 0x00
goto inicio
;///////////declaracion de variables//////////7777777
retar_20 equ 0x30
retar1_20 equ 0x31
retar equ 0x32
retar1 equ 0x33
retaro equ 0x34
retar1o equ 0x35
banderas equ 0x36
rx_data equ 0x37
tx_data equ 0x38
W_Temp equ 7Ch
Status_Temp equ 7Dh
PClatch_Temp equ 7Eh
FSR_Temp equ 7Fh
;configuracion de registros
inicio
;iniciar puertos
bcf STATUS, RP0 ;va al banco 0
clrf PORTA
clrf PORTB
clrf PORTC
;clrf PORTD
;clrf PORTE
bsf STATUS, RP0 ;va al banco 1
movlw b"00000111" ;RA0,RA1,RA2,RA3,RA4,RA5,RE0,RE1,RE2 digitales
movwf ADCON1 ;Mover el valor al registro
movlw b"00001111" ;0,1,2,3 entradas 4 salida
movwf TRISA
movlw b"00000001" ;0,1,2,3 entradas 4,5,6,7 salidas
movwf TRISB
movlw b"10011000" ;0,1,2,3,4,5,6 salidas 7 entrada
movwf TRISC
movlw b"00000000" ;0,1,2,3,4,5,6,7 salidas entrada
movwf TRISD
movlw b"00000000" ;0,1,2,3,4,5,6,7 salidas entrada
movwf TRISE
;iniciar_perifericos
bsf STATUS,RP0 ;seleccion del banco 1
movlw b"00000000"
movwf PIE1 ;permiso de interrupciones para el T1 y T2
movlw b"00000000"
movwf SSPSTAT
bcf STATUS,RP0 ;va al banco 0
movlw b"00100010"
movwf SSPCON
clrf STATUS
clrf PIR1
clrf PIR2
goto principal
;programa principal
principal
movlw 0x32
movwf SSPBUF
finsp
btfss PIR1,PSPIF
goto finsp
no_spi
btfss PIR1,PSPIF
goto no_spi
movfw SSPBUF
movwf rx_data
goto $
END