buenas a todos.
Estoy realizando un reloj despertador con ds1307, lcd y el pic16f628a, tengo el programa y el hardware, pero tengo un problema al momento de cambiar por medio de pulsadores la hora o los minutos.
Cuando el programa arranca, pide que se le ingresen tanto la hora como los minutos, luego de que el usuario ingresa los valores y los guarda, el programa escribe esos datos en los registros correspondientes del ds1307, y aqui viene el problema, si la hora o los minutos son valores menores a 10, el programa los guarda correctamente, pero, si los valores de hora o minuto son iguales o mayores a 10 entonces el programa escribe esos datos incorrectamente, graba "010" en lugar de guardar "10" nada mas, eso me provoco un error en la visualizacion de la hora o minuto transcurrido los 60segundos despues de haber guardado los datos de hora o minuto.
tengo entendido que los datos que se guardan en los registros del ds1307 no pueden ser en decimal, sino en bdc .
aqui les dejo la parte del codigo donde hago la escritura de los datos.
; ************************ subrutina grabar *********************
grabarRTC:
lcdout $fe,$80,"H:" ;pide que se ingrese la hora
lcdout $fe,$C0,"M:" ;pide que se ingrese los minutos
IF U=0 THEN ;u es un pulsador
PAUSE 300
HORA=HORA+1 ; hora es una variable tipo byte para capturar el dato que el usuario ingresa
IF HORA>23 THEN HORA=0
LCDOUT $fe,$82, dec2 HORA ;muestra la hora en el lcd que el usuario esta ingresando
ENDIF
IF M=0 THEN ; m es un pulsador para poder guardar el dato capturado
PAUSE 200
GOTO MI
ENDIF
GOTO GRABARRTC
MI:
IF U=0 THEN ; ahora se hace el ingreso de los minutos
PAUSE 300
MINU=MINU+1
IF MINU>59 THEN MINU=0
LCDOUT $fe,$C2, DEC2 MINU
ENDIF
IF M=0 THEN ESCRIBIR
GOTO MI
ESCRIBIR: ; aqui es el probrema
I2CWRITE DPIN,CPIN,%11010000,0,[$00] ;setear 00 segundos
PAUSE 10 ;retardo para finalizar grabación
I2CWRITE DPIN,CPIN,%11010000,1,[MINU] ; minutos
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,2,[HORA] ; horas
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,3,[$7] ;setear día lunes, D=1,L=2
PAUSE 10 ;M=3, M=4, J=5, V=6, S=7
I2CWRITE DPIN,CPIN,%11010000,4,[$27] ;setear día 27 del mes
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,5,[$12] ;setear mes
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,6,[$04] ;setear año 04
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,7,[$10] ;control %00010000 para
PAUSE 10 ;encender el led cada 1 seg.
WRITE 0,1 ;escribe en la memoria 0 el valor de 1 para que no
;se vuelva a grabar otra vez estos datos en el RTC
GOTO inicio ;ir a presentar los datos en el LCD
como ven, para setear el dato desde la programacion se lo hace con $xx , donde xx es el valor que se ingresa, pero al momento de escribir el contenido de una variable tipo byte en los registros de hora o minuto se guarda mal cuando es mayor a 10...
les agradeceria me ayuden con ese pequeno detalle
gracias/