Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. OBJETIVO.
2. FUNDAMENTO TEORICO.
Adicionalmente para la operación en modo de Esclavo, se usa la terminal, Slave Select (SS') - RA5.
Registros.
SSPSTAT Muestra el Status de la transmisión, el bit BF nos indica cuando la transmisión del dato está
completa, los bits que no están indicados en la figura no se usan en modo SPI.
1
I.T. SEBASTIAN OBERMAIER GESTION 2023
LABORATORIO DE MICROCONTROLADORES II Doc. Lic. Victor Hugo Apaza Gutierrez
SSPCON1.
Este es el registro de controla para la comunicación SPI, nos indica si hay una colisión de
información, Overflow, habilita el SSPI, polaridad del reloj, y otras configuraciones como Master o
Slave, y velocidad de transmisión.
Inicio de operación.
Para iniciar la operación SPI, varias opciones deben ser seleccionadas, tales son:
2
I.T. SEBASTIAN OBERMAIER GESTION 2023
LABORATORIO DE MICROCONTROLADORES II Doc. Lic. Victor Hugo Apaza Gutierrez
El microcontrolador PIC 16F877A tiene un módulo llamado MSSP (Master Synchronous Serial Port)
que puede ser configurado para trabajar en dos modos de comunicación:
SPI (Serial Peripheral Interfase) e I2C (Inter-Integrated Circuit).
Ambos modos pueden usarse para comunicarse con otros dispositivos compatibles con estos
protocolos de comunicación, como pueden ser EEPROMs, Shift registers, Convertidores A/D, otros
microcontroladores, etc.
El módulo MSSP tiene asociados tres registros: Status Register (SSPSTAT), y dos registros de control
(SSPCON1 y SSPCON2), el uso de cada registro y su configuración individual depende del modo de
comunicación que se esté empleando (SPI o I2C)
3
I.T. SEBASTIAN OBERMAIER GESTION 2023
LABORATORIO DE MICROCONTROLADORES II Doc. Lic. Victor Hugo Apaza Gutierrez
Como se puede ver en la imagen, el MSSP toma como base de tiempo el Timer 2, las terminales SDI
y SDO van directamente sobre el Shift Register SSPSR, lo que permite la comunicación serial.
Nota: El esquema y los circuitos deben ser transcritos a mano, para la simulación se
utilizará el PIC18F4550 y en forma física se armará el circuito con el PIC16F877A
4. LABORATORIO
4.1. Se realizará el esquema en ISIS de Proteus y los códigos en el programa Piccompiler para
verificar el funcionamiento del pre-informe punto 3.4.
5. BIBLIOGRAFÍA:
AUTOR (APELLIDO PAT. NOMBRES) TÍTULO DEL LIBRO, REVISTA O ARTÍCULO Año de publicación y edición
ANGULO, MARIA USATEGUI Microcontroladores PIC Diseño practico de Aplicaciones Segunda edición
4
I.T. SEBASTIAN OBERMAIER GESTION 2023
LABORATORIO DE MICROCONTROLADORES II Doc. Lic. Victor Hugo Apaza Gutierrez
SPI_MASTER
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
void main()
{
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_4);
while(TRUE)
{
if(!input(PIN_A0))
{
output_low(PIN_A5);
delay_ms(200);
spi_write(100, input_b());
output_high(PIN_A5);
delay_ms(500);
}
}
}
SPI_ESCLAVO
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <lcd.c>
void main()
{
int8 dato;
setup_spi(SPI_SLAVE | SPI_H_TO_L | SPI_CLK_DIV_4);
lcd_init();
lcd_putc("\fCOMUNICACION SPI");
lcd_putc("\nEL DATO ES:");
while(TRUE)
{
if(spi_data_is_in())
{
dato = spi_read();
lcd_putc("\fCOMUNICACION SPI");
printf(lcd_putc,"\nEL DATO ES: %u",dato);
}
}
}
5
I.T. SEBASTIAN OBERMAIER GESTION 2023
LABORATORIO DE MICROCONTROLADORES II Doc. Lic. Victor Hugo Apaza Gutierrez
COMUNICACION_SPI
6
I.T. SEBASTIAN OBERMAIER GESTION 2023
LABORATORIO DE MICROCONTROLADORES II Doc. Lic. Victor Hugo Apaza Gutierrez
EMISOR_SPI nRF24L01
#include <16F877A.h>
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#include "lib_rf2gh4_10.h"
#byte porta=0x05
#byte portb=0x06
#int_ext
void int_RB0()
{
int8 ret1;
ret1 = RF_RECEIVE();
if ( (ret1 == 0) || (ret1 == 1) )
{
do
{
ret1 = RF_RECEIVE();
} while ( (ret1 == 0) || (ret1 == 1) );
}
}
void main()
{
int8 ret2;
delay_ms(5);
set_tris_a(0b111111); // Todo el puerto A como entradas.
while(true)
{
RF_DATA[0]=porta;
RF_DIR=0x08; // Dirección del receptor.
ret2=RF_SEND(); // Enviar datos.
}
}
7
I.T. SEBASTIAN OBERMAIER GESTION 2023
LABORATORIO DE MICROCONTROLADORES II Doc. Lic. Victor Hugo Apaza Gutierrez
RECEPTOR_SPI nRF24L01
#include <16F877A.h>
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#include "lib_rf2gh4_10.h"
#byte porta=0x05 // Dirección del puerto A.
#int_ext // Interrupción del módulo RF.
void int_RB0()
{
int8 ret1;
ret1 = RF_RECEIVE();
if ( (ret1 == 0) || (ret1 == 1) )
{
do
{
porta=RF_DATA[0]; // El puerto A contendrá el valor que le llege del emisor, a través de
RF_DATA[0].
ret1 = RF_RECEIVE();
} while ( (ret1 == 0) || (ret1 == 1) );
}
}
8
I.T. SEBASTIAN OBERMAIER GESTION 2023
LABORATORIO DE MICROCONTROLADORES II Doc. Lic. Victor Hugo Apaza Gutierrez
ESQUEMA_COMUNICACION_SPI