SPI el micocontrolador
mynameismud14 de Noviembre de 2014
925 Palabras (4 Páginas)265 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 a la interrupción que cuando se haya mandado la palabra comlpleta se limpie el bit 3 de la interrupción que es la bandera que se encarga de avisar si el dato ha sido mandado o recibido.
COMUNICACIONES SPI en el PIC:
Pasemos ahora a detallar como implementar el protocolo SPI al trabajar sobre un PIC (asumimos que dispone del hardware adecuado, el puerto síncrono paralelo SSP). Como todo periférico del PIC su configuración y manejo están controlado por una serie de registros SFR (Special Function Registers. Para el puerto SPI dichos registros SFRs son:
SSPCON1, SSPSTAT y SSPBUF
los dos primeros son registros de configuración, mientras
...