Salve a tutti, ho provato a prendere gli esempi sulla comunicazione SPI al sito
http://www.melabs.com e li ho ritoccati in maniera da inviare un byte fissato in una variabile dal pic slave al pic master che a sua volta me lo dovrebbe inviare al pc trammite l'rs232.
In poche parole il pic master aspetta che la porta rc.0 passi ad high e inizia la sua comunicazione al pic slave, ma il tutto non funziona... il pic slave resta in attesa che l'interrupt spi vada alto ma non succede nulla

Qualcuno mi può dare qualke delucidazione su dove ho sbagliato?
Codice:
'PIC MASTER
DEFINE HSER_RCSTA 90h '‘ Setting the receiving register
DEFINE HSER_TXSTA 20h '‘ Setting the emitting register
DEFINE HSER_BAUD 2400 '‘ Baud rate
DEFINE HSER_SPBRG 25 '‘ Direct setting of SPBRG
DEFINE OSC 4
SSPEN VAR SSPCON.5 'SSP Enable bit
CKP VAR SSPCON.4 'Clock Polarity Select
SMP VAR SSPSTAT.7 'Data input sample phase
CKE VAR SSPSTAT.6 'Clock Edge Select bit
SSPIF VAR PIR1.3 'SPI interrupt flag
i VAR BYTE
a var byte[6]
TRISB = %11111111
TRISD = %00000000
TRISC = 0
SSPEN = 1 'enable SPI pins
CKP = 0 'clock idle low
CKE = 0 'transmit on idle to active transition
SSPIF = 0 'clear buffer full status
SMP = 0 'sample in middle of data
'PORTd SET
LED1 VAR portd.0
LED2 VAR portd.1
LED3 var portd.2
pause 1000
high led1
hserout [dec I]
MAIN:
HIGH LED2
IF PORTB.0 = 0 THEN MAIN
B0 = 1
LOW LED2
GOSUB GETDATA
GETDATA:
SSPBUF = "?"
GOSUB LETCLEAR
if SSPBUF<>"!" THEN GETDATA
SSPBUF = 0
GOSUB LETCLEAR
I = SSPBUF
hserout [dec I]
LETCLEAR:
IF SSPIF = 0 THEN LETCLEAR
pauseus 25
sspif = 0
return
Codice:
'PIC SLAVE
'SPI REGISTER
SSPEN VAR SSPCON.5 'SSP Enable bit
CKP VAR SSPCON.4 'Clock Polarity Select
SMP VAR SSPSTAT.7 'Data input sample phase
CKE VAR SSPSTAT.6 'Clock Edge Select bit
SSPBF VAR SSPSTAT.0
SSPIF VAR PIR1.3 'interrupt flag - last bit set
'PORTd SET
LED1 VAR portd.0
LED2 VAR portd.1
LED3 var portd.2
i VAR BYTE 'loop counter
a var byte[6]
ADCON1 = 7
TRISC = %11011111 'set PORTC I/O
TRISD = %00000000
SSPCON = %00000101 'configure SPI slave, no SS
CKP = 0 'clock idle low
CKE = 0 'transmit on idle to active transition
SSPIF = 0 'clear SPI interrupt
SMP = 0 'sample in middle of data
high led1
PAUSE 2000
I = 0
MAIN:
HIGH LED2
SSPEN = 0
SSPEN = 1
GOSUB LETCLEAR
IF (SSPBUF <> "?") THEN MAIN
I = I + 1
LOW LED2
GOSUB SENDDATA
SENDDATA:
GOSUB LETCLEAR
SSPBUF = "!"
SSPBUF = I
RETURN
LETCLEAR:
HIGH LED3
IF SSPIF = 0 THEN LETCLEAR
SSPIF = 0
LOW LED3
RETURN