Hola a todos:
Estoy haciendo pruebas para comunicar un Pic con un expansor de entradas PCF8574 por I2C. En el pic uso los pines RB3 y RC7 como pines I2C (para dejar libre RB0 y RB1 para interrupciones) y el problema que tengo es que si conecto la interrupción a RB0, no salta.
Con el ICD he probado a poner RB0 a masa, y sigue leyendo un "1" en esa entrada, por lo que nunca cambia y por eso no genera la interrupcion.
Pongo el código que utilizo a ver si alguien ve algo que ocasione esto:
Si conecto la interrupción a RB2/EXT2, funciona correctamente, y lo dicho, con el debugger, si pongo el pin RB0 a masa, sigue leyendo "1".
Aver si alguien me puede dar una pista.
Saludos y gracias.
Estoy haciendo pruebas para comunicar un Pic con un expansor de entradas PCF8574 por I2C. En el pic uso los pines RB3 y RC7 como pines I2C (para dejar libre RB0 y RB1 para interrupciones) y el problema que tengo es que si conecto la interrupción a RB0, no salta.
Con el ICD he probado a poner RB0 a masa, y sigue leyendo un "1" en esa entrada, por lo que nunca cambia y por eso no genera la interrupcion.
Pongo el código que utilizo a ver si alguien ve algo que ocasione esto:
Código:
#include <18F2455.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN //~~~ 20MHZ OSCILLATOR CONFIGS ~~~//
#use delay(clock=48000000)
#use i2c(MASTER,SCL=PIN_B3,SDA=PIN_C7,SLOW,FORCE_HW,RESTART_WDT)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#byte PORTA=0xF80
#byte PORTB=0xF81
#byte INTCON=0xFF2
int bucle,dato,temp;
#int_EXT
void EXT_isr()
{ i2c_start();
i2c_write(0x40+1);
dato=i2c_read(0);
i2c_stop();
output_toggle(PIN_A1);
}
///////////////////////////////////////////
//programa principal
///////////////////////////////////////////
void main(void)
{ delay_ms(10);
set_tris_A(0b00000000);
set_tris_B(0b11111111);
port_B_pullups(TRUE);
PORTA=dato=0;
bucle=0b11110101;
temp=PORTB;
INTCON=0;
enable_interrupts(INT_EXT);
ext_int_edge(0,H_TO_L);
enable_interrupts(global);
output_toggle(PIN_A1);
while(TRUE)
{
}
}
Si conecto la interrupción a RB2/EXT2, funciona correctamente, y lo dicho, con el debugger, si pongo el pin RB0 a masa, sigue leyendo "1".
Aver si alguien me puede dar una pista.
Saludos y gracias.