Hola amigos! Veo que mi pregunta ha tenido poco exito...
creo que es porque no he puesto codigo y no he explicado demasiado bien lo que preguntaba.. Como rectificar es de sabios, ahí va....
MASTER
#include <16f877a.h>
#use delay (clock=4000000)
#include <string.h
prueba()
{
while(!input(pin_e0));
SPI_WRITE('H');
while(!input(pin_e0));
SPI_WRITE('O');
while(!input(pin_e0));
SPI_WRITE('L');
while(!input(pin_e0));
SPI_WRITE('A');
while(!input(pin_e0));
SPI_WRITE('!');
}
void main (void)
{
SETUP_ADC_PORTS(NO_ANALOGS);
SET_TRIS_C(0b00010000);
SET_TRIS_A(0);
SET_TRIS_E(0);
OUTPUT_LOW(pin_a0);
delay_ms(5);
setup_spi(SPI_MASTER | SPI_L_TO_H );
prueba();
while(TRUE){};
}
ESCLAVO
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP
#use delay (clock=4000000) /
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B0
#define LCD_E PIN_B1
#include <string.h>
#include <flex_lcd2.c>
void main(void)
{
SETUP_ADC_PORTS(NO_ANALOGS);
SET_TRIS_A(0xFF);
port_b_pullups(FALSE);
SET_TRIS_B(0);
SET_TRIS_C(0b00011000);
setup_psp(PSP_DISABLED);
SET_TRIS_D(0);
SET_TRIS_E(0xFF);
setup_spi(SPI_SLAVE | SPI_L_TO_H);
lcd_init();
OUTPUT_high(pin_e0);
OUTPUT_low(pin_e0);
delay_us(20);
lcd_putc(spi_read());
OUTPUT_high(pin_e0);
OUTPUT_low(pin_e0);
delay_us(20);
lcd_putc(spi_read());
OUTPUT_high(pin_e0);
OUTPUT_low(pin_e0);
delay_us(20);
lcd_putc(spi_read());
OUTPUT_high(pin_e0);
OUTPUT_low(pin_e0);
delay_us(20);
lcd_putc(spi_read());
OUTPUT_high(pin_e0);
OUTPUT_low(pin_e0);
delay_us(20);
lcd_putc(spi_read());
while(TRUE);
}
He utilizado la linea E0 a modo de bit busy... para que el MASTER no envíe hasta que el ESCLAVO no termine de "hacer sus cosas" y así no saque por el LCD varias veces lo mismo(lo que hay en el buffer) y he dejado 20 microsegundos entre envios porque creo que con este tiempo es suficiente para la transición entre los buffers SPI de ambos PICs(lo he calculado...). El caso es que simulo en Proteus y lo que obtengo en el LCD es : "HOOOL" y si pruebo a cambiar el tiempo que hace esperar el esclavo al master antes de un "nuevo envio" cada vez sale una cosa diferente por el LCD y realmente no entiendo por qué. Espero que alguíen pueda explicarme que es lo que no entiendo para hacerlo mal o alguna forma mejor de enviar cadenas de caracteres. MUCHAS GRACIAS!!!