Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pajaro en 09 de Julio de 2009, 14:58:24
Título: Funciones - Paso de paramtros - Retorna parametros
Publicado por: pajaro en 09 de Julio de 2009, 14:58:24
hola Amigos
En el uso de la version de CCS C v4.088, estoy implementado funciones, en la resolucion de un programa.
El problema me surge cuando quiero mediante una funcion pasarle el valor de unos pulsadores , esta misma funcion me devuelve un valor nuevo para una variable global.
en main.c tengo la funcion principal y en fun.c las funciones. en el principal incluyo fun.c con #include <fun.c>
en el programa principal tengo definidos, P1 al P2, asi mismo le tengo definidos las cabeceras de las funciones, no se si hacen falta, corrijanme creo que no hacen flalta,no estoy seguro.
entes del programa principal pongo la cabecera de la funcion:
dentro del programa principal llamo a las funciones asi: int in_config(int P1, int P2); in_config(P1, P2);
funcion:
Código: CSS
...
...
..
#define P1 PIN_A0
#define P2 PIN_A1
#define P3 PIN_A2
#define P4 PIN_A3
...
main()
{
...
in_config(int P1,int P2);
...
}
..
.
int in_config(int P1,int P2)
{
int mdconf; //$$importante declarar global a 0
if(P1==1 &&P2==1) //si pulsadores a 1
{
delay_ms(3000); // espero 3 segundos
if(P1==1&&P2==1) //si estan a 1, activo menu
{
mdconf=1; //variable ON(1)/off(0) COMO CONFIGURACION
}
return(mdconf); //cambio de la variable global
}
.
..
...
El problema es que me tira un monton de errores : expecting a...
*declaration *indentifier
alguien sabe decirme...
Un saludo
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: RICHI777 en 09 de Julio de 2009, 15:07:54
Hola, fijate si asi se funciona:
Código: C
in_config( P1, P2 );
Saludos !
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: Suky en 09 de Julio de 2009, 15:22:58
Se debería implementar así:
Código: C
#define P1 PIN_A0
#define P2 PIN_A1
int in_config(int1 a,int1 b){
int mdconf;
if(a==1&& b==1){
....
return(mdconf);
}
void main{
in_config(input(P1),input(P2));
....
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: pajaro en 09 de Julio de 2009, 16:08:02
hola amigos lo probe pero me sigue dando errores, la funcion la tengo en un archivo dentro del proyecto, dentro de fun.c el cual lo incluyo en mi main poniendolo en cabecera #include <fun.c>.
me da error de declaracion y de identificador. seguro que es una tonteria pero no doy con este error. si defino un pulsador
#define P1 PIN_A0
esto es un entero verdad?, un entero de 1 bit, por que cuando paso el cursor por encima de la funcion me lo marca como un int8
no doy con el error. alguna idea.
Un saludo y gracias por sus aportes
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: Suky en 09 de Julio de 2009, 16:27:01
Que errores exactamente te indica? Yo acabo de probar el ejemplo que coloque y no hubo problemas.
Al colocar #define P1 PIN_A0 le indica al compilador que al encontrar el texto P1 lo reemplace por PIN_A0, que a su vez este definido como 40 por ejemplo para el 16F84.
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: pajaro en 09 de Julio de 2009, 18:27:34
hola Suky
el compilador es CCS C v4.088 el pic16F877A. dentro del proyecto tengo : main.c y fun.c dentro del main #Include <fun.c> defino #define P1 PIN_A0 defino variable global int mdconf; //sera cambiada durante la ejecucion de la funcion y persistira hasta que otra funcion le cambie el valor(esto no lo probe por esos malditos errores..).
defino la cabecera de la funcion a usar (posiblemente no haga falta, este paso por hacer uso del "include" ) int in_config(int1 a,int1 b);
dentro de la funcion principal la llamo: main() { ... .. in_config(P1, P2); //no le pongo input(P1), por que me da más errores }
///los errores son el 1 de error 28 y 3 de error 43, y me los da en la propia linea dentro del main.
un saludo
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: Suky en 09 de Julio de 2009, 19:13:20
Borra int in_config(int1 a,int1 b); dentro de main.
Y debes usar input(PIN_Ax), porque es la función que te lee el estado del pin, sino te colocará un 40 en el caso del RA0.-
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: pajaro en 10 de Julio de 2009, 11:57:39
Borra int in_config(int1 a,int1 b); dentro de main.
Y debes usar input(PIN_Ax), porque es la función que te lee el estado del pin, sino te colocará un 40 en el caso del RA0.-
Hola Amigos
La funcion in_config(int P1,int P2) es una función que verifica si el pulsador P1 y el pulsador P2 estan pulsados, o eso intento, es decir estan a 1, si es asi espera 5 segundos y si aun estan a pulsados cambia de estado una varibles, que es la que retorna esta funcion.
asi que por una parte tenemos como entrada el estado de dos pulsadores y como salida el cambio de estado de una variable.
parece simple verdad, pues mi compilador no lo entiende.
Un saludo.
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: Suky en 10 de Julio de 2009, 12:38:05
Como ya te dije, eso ya lo probé! Adjunta los 2 archivos para ver donde estan los errores. :wink:
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: pajaro en 10 de Julio de 2009, 17:52:51
Hola amigos
Amigo Suky por fin descubri el "maldito" error que me generaba tantos erroes, un paranteses de más invisible a mis ojos en la caberara de la propia funcion. Gracias por tu ayuda. ahora va perfecto., lo unico el retardo del simulador de proteus, a ver si cuando lo pase a la placa no hace esas cosas.
Proseguiremos con el salto de obstaculos, jejeje a ver que es lo proximo...jejeje Un saludo
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: pajaro en 13 de Julio de 2009, 14:32:35
Hola amigos
estoy intentado tener acceso a 3 variables, tipo caracter constante, estube leyendo varios post, recuerdo en uno que se hacian de una argucia, para poder leerlas, ya que este tipo de variables se guardan en la rom.
Si las declaro como variable ocupan mucho pero si que las coge, el caso es declararlas como constantes, y leerlas en la rom. yo lo estoy intentando desde una función, el caso es que si las declaro dentro de la propia funcion no me pone trabas, pero si la declaro globales y desde una funcion intento pasarlas me da el error que no se se puede apuntar una constante o algo asi, tambien hay post que dicen que con arreglos los del ccs han actualizado las cosas y que ahora no hace falta hacer cosas raras para añadir cadenas, encontre algunos post en asm, pero prefiero C.
He probado a montar con proteus un circuito y pasarle el *.hex pero no logro dar con la forma de poder ver en el simulador con la rom del pic, en elmodo debug aparece algo pero todoesta ffff.
Alguien sabe a ciencia cierta como se puede leer de la rom en el manual pone algo de #rom addres y en algunos post tambiem pone algo de #rom const char pero aun no di con el pos de hace una semana.
En otros ponia write_eeprom (address, value) y para leerla value = read_eeprom (address), la foto era de un mono que metio los dedos en el enchufe.
Alguien puede echarme un poco de luz
Un Saludo.
(----- P E N D I E N T E D E R E S O L V E R P R O B L E M A ------ )
Título: Re: Funciones - Paso de paramtros - Retorna parametros
Publicado por: pajaro en 15 de Julio de 2009, 12:28:30
hola amigos
Que calor hace esta tarde, pero que calor!...
Tengo implementada una función (la de debajo), la cual llamo desde otra:
Código: CSS
..
...
int pulsa_Px(int px,int py,int pospulx,int pospuly,int n)
{
printf(lcd_putc,"Dentro de funcion \n");
while(py==0)
{printf(lcd_putc,"Dentro de while \n");
if(px==1)
{printf(lcd_putc,"Dentro de if \n");
//delay_ms(200);
n=n+1;
lcd_gotoxy(pospulx,pospuly);
printf(lcd_putc,"%02u",n);
}
}
printf(lcd_putc,"salio de while \n");
return(n);
}
..
....
el caso es que al simularla en proteus 7, no me reconoce si pulso boton por la lectura del LCD se que entra en el while pero ahi se queda, en el bucle while entra pero no lo hace en el if, tampoco me deja salir del while por lo que deduzco que no me reconoce los pulsadores.