Hola, lo primero, feliz año nuevo a tod@s .
Estoy empezando a aprender c con el ccs y gracias a vuestro "microcursillo",pero
se me a planteado un problema a la hora de leer un memoria eeprom, tengo el siguiente codigo:
////////////////////////////////////// PREPROCESADO ///////////////////////////////////
#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPUT,NOPROTECT
#ORG 0x1F00,0x1FFF // estas dos lineas son para no sobreescribir el bootloader
void loader() { } // que hay en el pic
#include <lcd.c>
#include <24256.c>
#use I2C(master,sda=PIN_C4,scl=PIN_C3,SLOW,FORCE_SW)
/////////////////////////////////////// PRINCIPAL /////////////////////////////////////
void main()
{
init_ext_eeprom();
lcd_init();
lcd_putc("f");
lcd_putc("Escrito En 0 100");
write_ext_eeprom(0,100);
delay_ms(500);
printf(lcd_putc,"
Leido en 0: %u",read_ext_eeprom(0));
for (;
{}
}
El problema reside en que si esto lo ejecuto tal como esta, osea generando las señales i2c por sofware, no hay problema, pero si lo intento utilizando el interfaz
i2c del 877 no funciona y el programa se queda colgado despues del delay_ms(500) ,lo he probado en proteus y funciona de las dos formas por software y por hardware si enbargo en la placa de prueba de pacalaconcurso solo me funciona por software.
para activar el interfaz i2c del 877 cambio la linea:
#use I2C(master,sda=PIN_C4,scl=PIN_C3,SLOW,FORCE_SW)
por:
#use I2C(master,sda=PIN_C4,scl=PIN_C3,SLOW,FORCE_HW)
¿es esto correcto?
¿porque solo me funciona utilizando el control por software?
Saludos a tod@s