Problema con el Pic16f877a y el Bus I2C en MikroBasic

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

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.
Ojala puedan ayudarme
 

Adjuntos

  • Imagen1.jpg
    Imagen1.jpg
    77 KB · Visitas: 9
  • Imagen2.jpg
    Imagen2.jpg
    78.1 KB · Visitas: 5
Última edición por un moderador:
Según la ayuda de mikroBasic las instrucciones para I2C son así...

  • I2C1_Init
  • I2C1_Start
  • I2C1_Repeated_Start
  • I2C1_Is_Idle
  • I2C1_Rd
  • I2C1_Wr
  • I2C1_Stop
No como las tienes, así que te falta agregar un 1 después de I2C.
Eso puede ser, pues no utilizo mikroBasic.


Saludos.
 
Atrás
Arriba