SPI el micocontrolador
Enviado por mynameismud • 14 de Noviembre de 2014 • 925 Palabras (4 Páginas) • 238 Visitas
#include "C:\PICS\PICC\SPI SLAVE\SPI_SLAVE.h"
#include <LCD.C>
#BYTE SSPSTAT =0x94 /// 0xFC7
#BYTE SSPCON1 =0x14 // 0xFC6
#BYTE TRISC =0x87//0xF94
#BYTE SSPBUF =0x13//0xFC9
#BYTE PIR1 = 0x0C// 0xF9E
#define LCD_TYPE 1
int spi();
void main()
{
lcd_init();
int dato;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_psp(PSP_DISABLED);
// setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();
// TODO: USER CODE!!
SSPSTAT =0x40;
SSPCON1=0x25;
TRISC=0x18;
lcd_putc("hola");
delay_ms(400);
lcd_putc("\f");
while(true){
dato = spi();
output_b(dato);
lcd_putc("\f");
printf(lcd_putc,"recibiendo =%u",dato);
delay_ms(500);
}
}
int spi()
{
int myData;
bit_clear(PIR1,3);
myData = SSPBUF;
while (bit_test(PIR1,3)==0)
{
// put the data in the SSPBUF register which going to be send
}
return myData; // wait until the all bits sended
}
Este es el programa para el segundo micocontrolador que actua como esclavo en el que se detallara el código implementrado:
Para el protocolo SPI el micocontrolador cuenta con los registros en los que vamos a acceder
#BYTE SSPSTAT =0x94
#BYTE SSPCON1 =0x14
#BYTE TRISC =0x87
#BYTE SSPBUF =0x13
#BYTE PIR1 = 0x0C
Los cuales se comienza el código direccionando el registro y su direccion según las especificaciones en la hoja de datos del microcontrolador
SSPSTAT =0x40; con 0x40 indicamos que el cambio de estado ocurre de un nivel bajo a alto y con la bandera del buffer en 0.
SSPCON1=0x25; seleccionamos que este dispositivo actue como esclavo y habilita el puerto
TRISC=0x18; seleccionamos c3 y c4 como entradas del pic para la comunicacion con el master
lcd_putc("hola");
delay_ms(400);
lcd_putc("\f");
while(true){
Dato = spi();
output_b(dato);
lcd_putc("\f");
printf(lcd_putc,"recibiendo =%u",dato);
delay_ms(500);
}
}
Mandamos el dato recibido por el maestro a dato y de ahi se procede a imprimirlo en el lcd
int spi()
{
int myData;
bit_clear(PIR1,3);
myData = SSPBUF;
while (bit_test(PIR1,3)==0)
{
Se programa un bucle para avisarle
...