Hola,
Antes que nada un saludo a todos en el foro, como verán soy nuevo y espero me puedan ayudar con un problema que tengo.
Resulta que estoy haciendo un reloj con el pic 16f877a; el programa lo estoy haciendo en Mikro Basic Pro V. 5.0.1 pero no compila ya que me marca error en las primeras lineas donde dice lo siguiente.
303 Identifier"I2C_start was not Declared"
y por consiguiente todas las lineas que contienen I2c.
¿Que puedo hacer? Aquí esta el programa y una captura de pantalla del problema
Ojala puedan ayudarme
Antes que nada un saludo a todos en el foro, como verán soy nuevo y espero me puedan ayudar con un problema que tengo.
Resulta que estoy haciendo un reloj con el pic 16f877a; el programa lo estoy haciendo en Mikro Basic Pro V. 5.0.1 pero no compila ya que me marca error en las primeras lineas donde dice lo siguiente.
303 Identifier"I2C_start was not Declared"
y por consiguiente todas las lineas que contienen I2c.
¿Que puedo hacer? Aquí esta el programa y una captura de pantalla del problema
Código:
program RELOJ_DE_TIEMPO_REAL
dim g_horas, g_minutos, g_segundos as byte
dim g_anio, g_mes, g_dia, g_fecha, dato as byte
'Inicilizar DS1307
sub procedure DS1307_Init() 'Inicio del DS1307
I2C_start 'Señal de inicio para la comunicación I2C
I2C_wr($D0) 'Direccion escritura en el C.I. DS1307
I2C_wr($00) 'Escribir en direccion 0
delay_ms(10) 'Retardo de 10 milisegundos
I2C_Repeated_Start 'Repetir señal de inicio dentro de la comunicación I2C
I2C_wr($D0) 'Direccion escritura en el C.I. DS1307
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($00) 'Escribir en direccion 0
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($00) ' Configurar los Segundos
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($02) 'Configurar los Minutos
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($20) 'Configurar las Horas
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($02) 'Configurar el Dia (lun-dom)
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($09) 'Configurar la fecha
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($07) 'Configurar el Mes
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($10) 'Configurar el Año
delay_ms(10) 'Retardo de 10 milisegundos
I2C_wr($0) 'Habilitar la salida I2C del cristal de 32.768kHz
delay_ms(10) 'Retardo de 10 milisegundos
I2C_stop 'Finalizamos la comunicación I2C
end sub 'Fin de subprocedimiento
sub procedure DS1307_GetTime() 'Obtener la hora
I2C_start 'Señal de inicio en I2C
I2C_wr($D0) 'Direccion escritura en DS1307
I2C_wr(0) 'Escribir en direccion 0
I2C_Repeated_Start 'Señal de inicio en I2C
I2C_wr($D1) 'Direccion lectura en DS1307
g_segundos = Bcd2Dec(I2C_rd(1)) 'Leer segundos
g_minutos = Bcd2Dec(I2C_rd(1)) 'Leer minutos
g_horas = Bcd2Dec(I2C_rd(1)) 'Leer horas
g_dia = bcd2Dec(I2C_rd(1)) 'Leer dia (lun-dom)
g_fecha = bcd2Dec(I2C_rd(1)) 'Leer fecha
g_mes = Bcd2Dec(I2C_rd(1)) 'Leer mes
g_anio = Bcd2Dec(I2C_rd(0)) 'Leer año
I2C_stop 'Señal de fin en I2C
end sub 'Fin de subprocedimiento
'Algoritmo que nos permite convertir un número de 2 cifras a cadena
'si la cifra es menos de 10 se añade un 0 a la izquierda
sub procedure ByteToString(dim data as byte, dim byref text as char[2])
dim strData as char[3]
ByteToStr(data, strData)
text[0] = strData[1]
text[1] = strData[2]
text[2] = 0 'Fin cadena
if text[0] = 32 then text[0] = "0" end if 'condiciona la cantidad de dias en el mes
end sub
sub procedure DisplayData(dim row as byte, dim col as byte, dim data as byte)
dim text as char[2]
ByteToString(data, text) 'convierte de byte a string
Lcd_out(row, col, text) 'muestra los datos como text en fila y coloumna
end sub
'Mostrar en el LCD la fecha y la hora
sub procedure DisplayDateTime()
'Hora
DisplayData(1, 9, g_hours) ' desplegamos horas en la LCD
DisplayData(1,12, g_minutes) ' desplegamos minutos en la LCD
DisplayData(1,15, g_seconds)' desplegamos segundos en la LCD
'Fecha
DisplayData(2, 7, g_day)' desplegamos dia en la LCD
DisplayData(2,10, g_month)' desplegamos mes en la LCD
DisplayData(2,15, g_year)' desplegamos año en la LCD
end sub
end.
Adjuntos
Última edición por un moderador: