Es un poco tarde pero si usás el C que viene con el mplab, es decir, el mplab C18; fijate dentro del directorio de instalación (c:\mcc18 o c:\archivos de programa\microchip\mcc18 o la carpeta que hayas elegido para instalarlo):
doc\MPLAB-C18-Libraries_51297f.pdf ahí hay información de las librerías que se pueden usar en el mplab C18, y en particular en la página 115 explica un conjunto de funciones para usar SPI implementado por software.
en MCC18\src\traditional\pmc\SW_SPI está el código fuente de las funciones
vas a tener que definir cuáles pines de entrada salida vas a usar como SDI, SDO, CLK en
MCC18\h\sw_spi.h
De la misma forma, hay funciones para implementar por software un puerto USART (MCC18\src\traditional\pmc\SW_UART) y un puerto I2C (MCC18\src\traditional\pmc\SW_I2C).
Lástima no me dí cuenta antes, por lo menos que quede registrado.