SPI1STAT = 0x0; // disable the SPI module (just in case)
SPI1CON1 = 0x0161; // FRAMEN = 0, SPIFSD = 0, DISSDO = 0, MODE16 = 0; SMP = 0; CKP = 1; CKE = 1; SSEN = 0; MSTEN = 1; SPRE = 0b000, PPRE = 0b01
SPI1STAT = 0x8000; // enable the SPI module#use spi(DI=PIN_B0, DO=PIN_C7, CLK=PIN_B1, ENABLE=PIN_c0, BITS=8)
void main()
{
int value=0x00, aux= 0;
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SLAVE|SPI_L_TO_H|SPI_CLK_DIV_4|SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
set_tris_d(0x00);
set_tris_b(0xff);
set_tris_a(0x00);
set_tris_c(0x00);
set_tris_E(0x01);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab
// TODO: USER CODE!!
output_d(0x00);
while (1)
{
aux = spi_data_is_in();
if(aux == 1){
value = spi_read();
delay_us(50);
output_d(value);
}
}
}
SPI1CONbits.MSTEN=1; //como maestro
SPI1CONbits.CKE=0; //Data cambia en transiciσn activo a reposo el reloj (CLK)
SPI1CONbits.CKP=0;
SPI1CONbits.SPRE=0b000; //prescaler secundario 1
SPI1CONbits.PPRE=0b00; //prescaler primario 1
SPI1STATbits.SPIROV=0; //No receive overflow
SPI1STATbits.SPIEN=1; //habilita el mσdulo SPI
output_d(0x00);
while (1)
{
aux = spi_data_is_in();
if(aux == 1){
value = spi_read();
delay_us(50);
output_d(value);
delay_us(50);
spi_write(0xff);
}
}
}int EscribirSPI(int data)
{
SPI1BUF=data;
while(!SPI1STATbits.SPIRBF){}
return ReadSPI1();
}
PORTA = EscribirSPI(0x55);
int spi_out(int send)
{ /*envio por HW*/
SPI1BUF=send;
while(!SPI1STATbits.SPIRBF){}
return SPI1BUF;
}