Que tal astrocar!
Mira para configurar el SPI utilizado en el pic debes operar sobre tres registros, estos son:
El SSPSTAT, el SSPCON y el SSPBUF.
Los dos primeros son para el control del modulo spi y el ultimo es por donde envias y recibes los datos

Paso a comentar cada uno:
SSPSTAT: este es el registro de status utilizado por el spi ( y tambien por el i2c) de este registro nos interesan tres bit de los cuales yo utilice solo dos

estos son el SMP en modo master este bit indica el punto donde se muestrean los datos que ingresan al master los cuales pueden ser en el medio del pulso de reloj (generado por el master) o al final del pulso de reloj.
Cuando opera en modo esclavo este bit debe ser siempre colocado a cero.
Luego tenemos el bit CKE, el cual depende a su vez del bit CKP, este define el flanco activo de la señal de reloj.
Por ejemplo si CKP = 0 y CKE = 0 el flanco activo del reloj sera el de bajada (transicion de uno a cero).
Esto esta mejor explicado en el pdf del pic18f252

Y por ultimo tenemos el bit BF este solo opera en recepcion tanto master como slave he indica que se a recibido un dato en el SSPBUF y debe ser leido, este se borra solo por hardware cuando es leido el sspbuf.
Luego tenemos el registro SSPCON
Alli tenemos el bit Wcol que indica cuando se ha produciodo una colicion (ver data sheet)
el bit SSPOV solo opera en modo slave para la recepcion he indica que hay un dato en el sspbuf que no ha sido leido y llego otro nuevo, esto provoca que el dato nuevo que llego se pierda

Luego tenemos el bit sspen que es para habilitar el spi.
El bit CKP este bit indica el estado de reposo del reloj que puede ser alto o bajo y junto con el che conforman los llamdos modos del spi

Luego tenemos los bit sspm0 a sspm3 los cuales definen el modo de operacion del spi (master o slave) y la frecuencia de la señal de reloj.
Luego tenemos el bit SSPIF este bit se encuentra en el registro PIR1 y se emplea para indicar cuando a finalizado una transferencia de datos (transmision- recepcion).
Recuerden que el spi cuando se saca un bit por SDO l mismo tiempo entra un bit por SDI formando asi algo parecido a un registro de anillo.

Para que el master envie o reciba datos siempre debe cargarse algo en el registro SSPBUF, ese es el truco

POr ejemplo si el maestro quiere recibir un dato del esclavo este debe colocr algo (cualquier valor) en el sspbuf para que asi se active el reloj del maestro luego cuando termine el intercambio de datos entre el master y el slave ( revizando el bit sspif de fin de transferencia, por ejemplo) el sspbuf del maestro contendra el dato proveniente del esclavo

Ahora bien el dato que fue previamente envido por el maestro cuando lleg al esclavo si este no lo necesita simplemente
lo descartara

Esta breve explicacion es sobre el spi del pic si tienes alguna duda con respcto a ello, alex.
Por aqui estaremos.
Nota: falta la explicacion de la memoria
