Hola, he revisado el código, y dijiste que este era para el DS12887, y estaba buscando justamente el protocolo de comunicaciones de este integrado, y por lo que ley en tu código, están diseñados para acceder a cualquier dirección, y me pregunto porque no aprobechaste la memoria NVRAM del RTC, ya que si se apaga el sistema por algún error, y la energía vuelve, los datos estarán guardados en la NVRAM y no se borraran, aunque tu usaste la memoria EEPROM interna del PIC para esto, pero debes considerar que esta tiene un límite de veces que puede ser grabada, además, creo que el PIC16F877 es un PIC muy grande para esta aplicación, opino que podrías haber usado un PIC menor, más barato, aunque tenga menos pines, para evadir ese inconveniente y considerando que todos los pines que necesitas, a parte de los pulsadores, son de salida, puedes controlarlos usando un 74HC374, pero es elección de cada uno. para generar mis programas, uso el Basic del PIC SIMULATOR IDE, y como acotación, debo decirte que este trae soporte nativo para el DS1307, y como separaste los protocolos de comunicación del RTC con el PIC, solo debes reemplazar las llamadas a los protocolos de comunicación por esta instrucción y tu programa estará listo, claro que el resto del lenguaje debes traducirlo, aunque si no quieres usarlo, simplemente has que el PIC SIMULATOR IDE compile las instrucciones nativas del protocolo de comunicaciones y copias el código ASM en las funciones de escritura y lectura de tu código, suponiendo claro está que el lenguaje que uses soporte instrucciones en ASM que seguro que lo hace.
Espero que te sirvan las ideas que te he dado, así como aprovechare el protocolo de comunicaciones que has facilitado, gracias.
Aclaracion: cuando digo soporte nativo del DS1307, me refiero que el PIC SIMULATOR IDE trae instrucciones especiales para el control del protocolo I2C, que es el que usa el RTC que quieres usar.
---------- Actualizado después de 2 horas ----------
mientras adaptaba el codigo al que uso yo, me fije que no configuras nunca el pin CS, por lo que supongo que en tu diseño siempre esta bajo, por lo que el chip esta siempre seleccionado. pero yo necesito controlarlo, por lo que necesito que me indiques donde hay que colocar la instruccion, aqui te dejo el codigo que he adaptado, lo deje todo en 1 sola funcion (asi es mas fasil para mi), tambien necesito saver el tipo de protocolo que es, motorola o intel, porque el DS12887 posee los 2, pero analizando el codigo y comparandolo con los diagramas de tiempo de ambos protocolos, creo que es el motorola, pero aun asi, necesito tu confirmacion...
Código:
Function ds12887(leesescribir12887 As Bit, direccion12887 As Byte, dato12887 As Byte)
'AD_12887=nombre del bus de datos
'DS_12887
'AS_12887
'RW_12887
ds_12887 = 0 'DS=0
as_12887 = 1 'AS=1
Config ad_12887 = Output
ad_12887 = direccion12887 'DIRECCION Q SE VA HA LEER
WaitUs 1
as_12887 = 0 'AS=0
If leerescribir12887 = 1 Then
Config ad_12887 = Input
rw_12887 = 1 'RW=1
ds_12887 = 1 'DS=1
WaitUs 1
ds12887 = ad_12887
ds_12887 = 0 'DS=0
rw_12887 = 1 'RW=1
Else
rw_12887 = 0 'RW=0
ds_12887 = 1 'DS=1
as_12887 = dato12887 'SE CARGA EL DATO
ds_12887 = 0 'DS=0
rw_12887 = 1 'RW=1
ds12887 = 255 'es solo para devolver algo cuando se lee
Endif
WaitMs 10
End Function