Autor Tema: PROBLEMAS AL COMPILAR LIBRERIA LCD.C  (Leído 3698 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

marco_recargado

  • Visitante
PROBLEMAS AL COMPILAR LIBRERIA LCD.C
« en: 11 de Octubre de 2006, 19:19:03 »
HOLA ESTOY APRENDIENDO A PROGRAMAR LOS PICS CON LENGUAJE C Y YA HE LOGRADO HACER ALGUNOS PROGRAMAS. "ESE MICROCURSILLO DE C" ES BUENISIMO.
MI PROBLEMA ES QUE ESTOY TRATANDO DE COMPILAR UN EJEMPLO DEL AMIGO MODULAY.

ES ESTE :

///////////////////////////////////// PREPROCESADO ///////////////////////////////////
#include <16F876.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT
#include "lcd.c"
#use fast_io(B)
#use fast_io(C)

////////////////////////////////////// RUTINAS ///////////////////////////////////////
int entrada_activa()
{

if(input(PIN_C0))                // Esto se ejecuta si RC0 está a 1
{ return(0); }                   // Devolvemos un 0


else if(input(PIN_C1))           // Esto se ejecuta si RC1 está a 1
{ return(1); }                   // Devolvemos un 1


else if(input(PIN_C2))           // RC2 está a 1
{ return(2); }                   // Devolvemos un 2

else if(input(PIN_C3))           // RC3 está a 1
{ return(3); }

else if(input(PIN_C4))           // RC4 está a 1
{ return(4); }

else if(input(PIN_C5))           // RC5 está a 1
{ return(5); }

else if(input(PIN_C6))           // RC6 está a 1
{ return(6); }

else if(input(PIN_C7))           // RC7 está a uno
{return(7);}

else                             // Si entramos aquí es que no se dió ninguno de los casos anteriores (todas a 0)
{return(;;)}

}                               

////////////////////////////////////// PRINCIPAL //////////////////////////////////////

void main()

{

int pin_activo;
set_tris_c(0xff);                // Puerto C configurado como entrada
lcd_init();
pin_activo = entrada_activa();   // Asiganmos a "pin" el valor que devuelve entrada_activa()


while(TRUE)                      // Bucle infinito

{

if(entrada_activa() > 7)         // Usamos directamente el valor que nos retorne la función

{                                // entrada_activa() devolvió el valor 8
printf(lcd_putc,"No hay entradas activas");
}

else                             // En otro caso...

{
printf(lcd_putc,"El pin %u está a 1",entrada_activa());  // Mostramos qué pin está a 1
}
}
}




EL PROBLEMA CON ESTE PROGRAMA ES QUE AL COMPILARLO ME SALE UN ERROR QUE DICE:

UNDEFINED IDENTIFIER --SET_TRIS_D

Y ME SACA UNA NUEVA VENTANA QUE ES LA DE LA LIBRERIA LCD.C
COMO SI ESTUVIERA COMPILANDOLA TAMBIEN, EL ERROR ME APRECE EN LA VENTANA DE LCD.C
NO SE QUE ES LO QUE ESTE MAL.

POR EL ERROR PIENSO QUE ES LA LIBRERIA, BUSQUE EN EL FORO LA LIBRERIA DEL LCD.C PERO AL PARECER TODAS LAS QUE HAY SON MODIFICADAS Y PUES YO PREFERIRIA HACER FUNCIONAR EL LCD CON SUS LIBRERIAS ORIGINALES Y LUEGO LAS CAMBIARIA(UNA VEZ QUE LO DOMINE :D) NO SE QUE HACER , AHORA SI HE BUSCADO UN POCO MAS PERO NO LOGRO ENTENDER MUCHO YO.

SI ALGUIEN ME PUEDE ORIENTAR SE LOS AGRADECERIA, SI ME PUEDEN ENVIAR LA LIBRERIA O SI LO QUE ESTA MAL ES EL PROGRAMA GRACIAS.



Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: PROBLEMAS AL COMPILAR LIBRERIA LCD.C
« Respuesta #1 en: 11 de Octubre de 2006, 19:54:51 »
Holas marco.
Bienvenido al C :)
Las funciones SET_TRIS_x están definidas e implementadas en el  fichero 16f876.h.Todas las funciones y declaraciones que contiene dicho fichero podrán ser usadas por tí en tu programa ya que has incluído correctamente una invocación al mismo con "include <16f876.h>.
Además del contenido de tu programa principal,el contenido de este fichero,y también el contenido del fichero lcd.c al cual también invocas,serán compilados por completo.
En el código del fichero lcd.c,si buscas un poco,encontrarás alguna que otra LLAMADA a esa función SET_TRIS_D que te está provocando el error.Y dicho error te lo da porque esa función no está declarada en ningún lugar entre los ficheros que estás usando.En el momento de compilar,si el compilador se encuentra una llamada a una función o cualquier otra cosa (etiqueta,constante,etc...) que no esté declarada previamente tirará un error de identificador como el que te da a ti.
¿Y como es que no está declarada la dichosa función en el fichero 16f876.h? Pues este micro no tiene puerto D,por lo que no tendría sentido incluir en dicho fichero una rutina de configuración para el puerto D.
La solución más sencilla es que justo antes de la llamada a lcd.c incluyas esta línea:

#define use_portb_lcd TRUE

Con eso ya te debería compilar.
Si quieres entender un poco que es lo que cambia con lo que has añadido,abre el fichero lcd.c y echale un vistazo a las primeras líneas.
Resumiendo un poco...las rutinas del fichero lcd.c te dan la opción de hacer funcionar el lcd conectado al puerto B ó al puerto D.Por defecto,las rutinas funcionan para el puerto D.Añadiendo la línea que te dije,cambias al puerto B.
Un saludo

marco_recargado

  • Visitante
Re: PROBLEMAS AL COMPILAR LIBRERIA LCD.C
« Respuesta #2 en: 11 de Octubre de 2006, 20:17:41 »
GRACIAS POR TU RESPUESTA  YA ME COMPILO BIEN.
SOLO UNA PREGUNTAS MAS. ENTONCES CADA VEZ QUE LLAME A LA LIBRERIA LCD.C TENGO QUE DECLARAR QUE PUERTO VOY A UTILIZAR QUE POR LO QUE HE LEIDO ES PUERTO B Y D?

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: PROBLEMAS AL COMPILAR LIBRERIA LCD.C
« Respuesta #3 en: 11 de Octubre de 2006, 21:20:45 »
Por defecto,si no le indicas nada,la librería asume que usarás el puerto D.Si quieres usar el puerto B tienes que indicárselo con la línea que has añadido.No está preparada para funcionar con otros puertos que no sean esos dos.

marco_recargado

  • Visitante
Re: PROBLEMAS AL COMPILAR LIBRERIA LCD.C
« Respuesta #4 en: 13 de Octubre de 2006, 13:40:40 »
El pic que estoy utilizando es el 16f877a y tambien me aparece ese error.

marco_recargado

  • Visitante
Re: PROBLEMAS AL COMPILAR LIBRERIA LCD.C
« Respuesta #5 en: 13 de Octubre de 2006, 13:43:29 »
perdon era un error de escritura gracias :mrgreen: