Este programa contiene el código del master y un esclavo. Se debe disponer de 2 PIC's, los cuales, están conectados a través del protocolo SPI y se enviarán valores del potenciómetro.
- Código del Master:
#include <clase14.h>
//SPI MASTER
#use spi (MASTER, SPI1, MODE=0, BITS=8, STREAM=SPI_1)
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
//SPI MASTER
#use spi (MASTER, SPI1, MODE=0, BITS=8, STREAM=SPI_1)
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int valor;
int valor;
void main()
{
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_0);
{
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_0);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("Susana master");
lcd_gotoxy(1,2);
lcd_putc("valor=");
while(TRUE)
{
valor=read_adc();
lcd_gotoxy(9,2);
printf(lcd_putc,"%X",valor);
output_toggle(PIN_B4);
delay_ms(100);
SPI_WRITE(valor);
}
lcd_gotoxy(1,1);
lcd_putc("Susana master");
lcd_gotoxy(1,2);
lcd_putc("valor=");
while(TRUE)
{
valor=read_adc();
lcd_gotoxy(9,2);
printf(lcd_putc,"%X",valor);
output_toggle(PIN_B4);
delay_ms(100);
SPI_WRITE(valor);
}
}
- Código del esclavo:
#include <slave.h>
//SPI slave, el slave es como una impresora a un computadora, varias compus a una principal
#use spi (SLAVE, SPI1, MODE=0, BITS=8, STREAM=SPI_1)
//SPI slave, el slave es como una impresora a un computadora, varias compus a una principal
#use spi (SLAVE, SPI1, MODE=0, BITS=8, STREAM=SPI_1)
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int valor;
#INT_SSP
void SSP_isr(void) //interrupcion SPI
{
valor=spi_read();
lcd_gotoxy(9,2);
printf(lcd_putc,"%X",valor);
}
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int valor;
#INT_SSP
void SSP_isr(void) //interrupcion SPI
{
valor=spi_read();
lcd_gotoxy(9,2);
printf(lcd_putc,"%X",valor);
}
void main()
{
//la interrupcion es cuando master manda un dato, se interrumpe el toggle
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
lcd_init();
lcd_putc("Susana slave");
lcd_gotoxy(1,2);
lcd_putc("Valor=");
while(TRUE)
{
output_toggle(PIN_A5); //para este entretenido el programa y se interumpa
}
{
//la interrupcion es cuando master manda un dato, se interrumpe el toggle
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
lcd_init();
lcd_putc("Susana slave");
lcd_gotoxy(1,2);
lcd_putc("Valor=");
while(TRUE)
{
output_toggle(PIN_A5); //para este entretenido el programa y se interumpa
}
}
- Simulación en Proteus:
No hay comentarios:
Publicar un comentario