Hola a todos de ésta comunidad. Recién comienzo a programar en C y estoy haciendo un sistema de acceso. La lógica del programa no la he programado ya que estoy programando los periféricos primero para que funcionen. La lcd, teclado y relog ya funcionan en proteus, pero la memoria no. La leo y recivo un 255, me imagino porque no ha sido programada pero al grabarla se queda gcolgado y no regresa y se ve en el proteus como se envian y reciben datos por el bus i2c permanentemente, nunca termina! les coloco el código abajito y tambien una imagen del hardware a ver si pueden ayudarme.. los procedimientos void lcd_linea y tecla_pulsada no las puse porque no son necesarias y tecla_pulsada es mi rutina de teclado y es grande. en si lo que hice fue un mini programita para probar mis perifericos. Si aprieto 1 en el teclado leo mi relog y coloco en la pantalla los minutos por 2 seg y asi veo si funciona, si aprieto 2 grabo en la memoria en la direccion 5 la variable dato, si aprieto 3 leo la memoria en la posicion 5 y muestro el resultado en la lcd y si no hago nada aparece un "NO" en la pantalla. El que no funciona es el 2, que al apretarlo se queda colgado..
#include "D:\electronica\practicas\c\proyecto martine\otro\proyecto.h"
#include <LCD.C>
#include <_DS1307.C>
#include <24256.C>
#use fast_io(b)
#use standard_io(c)
#byte portb=0x06
#byte portb=0x07
#define FILA1 PIN_B3
#define FILA2 PIN_B4
#define FILA3 PIN_B5
#define FILA4 PIN_B6
#define COLUMNA1 PIN_B0
#define COLUMNA2 PIN_B1
#define COLUMNA3 PIN_B2
void linea(int x)
{
lcd_gotoxy(1,x);
} //end linea
int tecla_pulsada()
} //end teclado
void main()
{
int tecla,hrs,min,sec,day,month,yr,dow,dato;
int16 dir;
set_tris_b(0b00000111);
//set_tris_c(0b00000000);
ds1307_init(DS1307_ALL_DISABLED); // inicialización de relog ds1307
init_ext_eeprom();
ds1307_set_date_time(9,8,6,2,18,51,00);
delay_ms(15);
lcd_init();
lcd_putc("\f");
delay_ms(10);
while(true)
{
tecla=tecla_pulsada();
if (tecla==1)
{
lcd_putc("\f");
delay_ms(10);
ds1307_get_time(hrs,min,sec);
ds1307_get_date(day,month,yr,dow);
printf(lcd_putc,"%u",min);
delay_ms(2000);
}
if (tecla==2)
{
lcd_putc("\f");
dato=5;
write_ext_eeprom(5, dato);
delay_ms(2000);
dato=0;
}
if (tecla==3)
{
lcd_putc("\f");
dato = read_ext_eeprom(5);
printf(lcd_putc,"%u",dato);
delay_ms(2000);
dato=0;
}
else
{
lcd_putc("\f");
printf(lcd_putc,"NO");
delay_ms(2000);
}
}
}