TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: PicMinor en 02 de Septiembre de 2025, 05:58:58
-
¡Saludos al grupo!
La pregunta es muy simple: ¿Se puede configurar un Pic en modo i2c slave para que se dispare la interrupción con varias direcciones?
¡Gracias por la respuesta!
-
No, podes hacer en secuencia pero no todas al mismo tiempo
-
A lo mejor podria ser asi:
#include <xc.h>
// Direcciones I2C que responderá el esclavo
#define I2C_ADDR_1 0x30
#define I2C_ADDR_2 0x40
#define I2C_ADDR_3 0x50
void I2C_Slave_Init(void) {
// Configurar pines I2C
TRISC3 = 1; // SCL como entrada
TRISC4 = 1; // SDA como entrada
// Configurar MSSP en modo I2C esclavo
SSPCON1 = 0x36; // Modo I2C esclavo, 7-bit address
SSPCON2 = 0x00;
// Habilitar interrupciones
SSPIF = 0;
SSPIE = 1;
PEIE = 1;
GIE = 1;
}
void interrupt ISR(void) {
if (SSPIF) {
// Verificar estado del módulo I2C
unsigned char status = SSPSTAT & 0x2D;
// Dirección recibida + bit R/W
unsigned char received_addr = SSPBUF;
// Verificar si coincide con alguna dirección
if ((received_addr >> 1) == I2C_ADDR_1 ||
(received_addr >> 1) == I2C_ADDR_2 ||
(received_addr >> 1) == I2C_ADDR_3) {
// ACK automático si SSPADD coincide
// Para direcciones múltiples, usar lógica adicional
if (status & 0x04) { // Es lectura
// Preparar datos para enviar
SSPBUF = tu_dato_a_enviar;
} else { // Es escritura
// Leer datos recibidos
unsigned char dato = SSPBUF;
// Procesar dato...
}
}
SSPIF = 0;
}
}