TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kaki en 07 de Agosto de 2010, 01:15:30

Título: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: kaki en 07 de Agosto de 2010, 01:15:30
Buenas desarolle una funcion que de duvuelve un valor char :

Código: [Seleccionar]
char TeclaLeida (){
int valor;
char TeclaChar;
valor = medir();
     if (valor<150)
        TeclaChar='#';
     else if (valor<154)
        TeclaChar='9';
     else if (valor<160)
        TeclaChar='6';
     else if (valor<165)
        TeclaChar='3';
     else if (valor<175)
        TeclaChar='0';
     else if (valor<180)
        TeclaChar='8';
     else if (valor<188)
        TeclaChar='5';
     else if (valor<195)
        TeclaChar='2';
     else if (valor<205)
        TeclaChar='*';
     else if (valor<211)
        TeclaChar='7';
     else if (valor<223)
        TeclaChar='4';
     else if (valor<233)
        TeclaChar='1';
else
TeclaChar='A';
return TeclaChar;
}

Bueno el problema q tengo es que cuando llamo esa funcion en el programa principal:

Código: [Seleccionar]
void main() {
 char Tecla;
 int i=0;
 configuracion ();
 
 while (TRUE){
lcd_gotoxy(1,1);
  lcd_putc("Ingrese Pass:");  
Tecla = TeclaLeida(); // -------------------> ACA ME DA EL ERROR EN ESTA LINEA
     if (Tecla != 'A') {
         Pass[i] = Tecla;   //---> ES UN ARREGLO CHAR GLOBAL...
         i++;
}  
  }
}

Me da el siguiente error:
Citar
*** Error 51 "Principal.c" Line 32(21,22): A numeric expression must appear here

La verdad es que ya agote me pensamiento y no se por que me dice q tiene que haber una exprecion numerica.

Espero que entiendan algo de todo este lio que arme.
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: RedPic en 07 de Agosto de 2010, 09:45:49
¿lcd_putc() no es para poner en el LCD un carácter (no un string)?  :shock:
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Suky en 07 de Agosto de 2010, 10:36:20
¿lcd_putc() no es para poner en el LCD un carácter (no un string)?  :shock:


Pero en CCS se puede  :?  Envía un string al LCD.

Yo al programa no le veo ningun error :undecided:
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Cryn en 07 de Agosto de 2010, 10:38:09
lcd_putc() me ha funcionado, hasta ahora siempre colocandole una string adentro tal como lo hace nuestro amigo kaki, quizá pueda depender de la librería que estás usando y es la que provoca el error.

Para comprobar eso usa

printf(lcd_putc,"Ingrese pass:");

saludos.
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: migsantiago en 07 de Agosto de 2010, 11:07:59
Creo que no todos los IF llegan al 'return' de la función.
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: BrunoF en 07 de Agosto de 2010, 11:35:12
¿Capaz anidó demasiados if?
No sé cuál será el límite de anidamiento del CCS...

Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Nocturno en 07 de Agosto de 2010, 11:47:42
El número que tu función espera es el que va detrás del "return". Lo has puesto sin paréntesis y son obligatorios.
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Suky en 07 de Agosto de 2010, 13:06:45
Ja! Yo copio lo mostrado, compilo y ningún problema (CCS 4.108). Por lo menos de compilación no me indica nada, del funcionamiento, ni idea  :mrgreen:


Saludos!
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: kaki en 07 de Agosto de 2010, 13:31:28
Código: [Seleccionar]
Insertar Cita
El número que tu función espera es el que va detrás del "return". Lo has puesto sin paréntesis y son obligatorios.
Publicado en: Hoy a las 11:35:12 Publicado por: BrunoF 

Donde me fala los parentecis?


Con respecto a lo que dicen del lcd no esa parte es aca:Tecla = TeclaLeida(); por cuando le pongo la // barra a esa linea, compila sin error y sin warning.

Es un problema en la funcion pero no logro detectarlo.
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Suky en 07 de Agosto de 2010, 13:34:57
Más organizadito  :mrgreen: sería:


Código: C
  1. if(....){
  2.  
  3.    }else if(....){
  4.  
  5.    }else{
  6.  
  7.    }
  8.  
  9.  
  10.    return(...);


Saludos!
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Nocturno en 07 de Agosto de 2010, 13:36:32
Aquí te faltan los paréntesis:

return (TeclaChar);
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: kaki en 07 de Agosto de 2010, 13:39:09
no me sigue dando el error!! Ya sueño de noche con este maldito error!
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: kaki en 07 de Agosto de 2010, 13:45:18
Hice lo que me dijo Suky...

Código: [Seleccionar]
char TeclaLeida (){
int valor;
char TeclaChar;
valor = medir();
     if (valor < 150){
        TeclaChar = '#';
     }else if (valor<154){
        TeclaChar = '9';
     }else if (valor<160){
        TeclaChar = '6';
     }else if (valor<165){
        TeclaChar = '3';
     }else if (valor<175){
        TeclaChar = '0';
     }else if (valor<180){
        TeclaChar = '8';
     }else if (valor<188){
        TeclaChar = '5';
     }else if (valor<195){
        TeclaChar = '2';
     }else if (valor<205){
        TeclaChar = '*';
     }else if (valor<211){
        TeclaChar = '7';
     }else if (valor<223){
        TeclaChar = '4';
     }else if (valor<233){
        TeclaChar = '1';
}else{
TeclaChar = 'A';
}
     return (TeclaChar);
}

y adivinen que!!
Me sigue dando el error!!!!!!!!!!!!!!!!!!
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Nocturno en 07 de Agosto de 2010, 13:52:48
Pues yo también hice lo que dijo Suky
Ja! Yo copio lo mostrado, compilo y ningún problema (CCS 4.108). Por lo menos de compilación no me indica nada, del funcionamiento, ni idea  :mrgreen:


Saludos!

y también me compila sin errores. Versión 4.093

¿Cuál es tu versión?
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: kaki en 07 de Agosto de 2010, 13:59:13
IDE  Version 4.104
PCB  Version 4.104
PCM  Version 4.104
PCH  Version 4.104
PCD  Version 4.104

Esa es mi version me parece q es superior!! Aclaro que yo no uso el IDE de PCW uso MPLAB
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Nocturno en 07 de Agosto de 2010, 14:10:46
Yo también he compilado desde MPLAB.
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: migsantiago en 07 de Agosto de 2010, 14:13:19
Aquí te faltan los paréntesis:

return (TeclaChar);

Los paréntesis del return siempre son opcionales.  ;-)
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Nocturno en 07 de Agosto de 2010, 14:18:04
Pues lo acabo de probar sin paréntesis y tienes razón Santiago.

Al leer la ayuda de CCS sobre return los he visto puesto y he pensado que eran obligatorios.
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: bmb en 07 de Agosto de 2010, 14:33:46
Hola kaki, acabo de hacer la misma prueba que hicieron Suki y Nocturno.  Igual que a ellos, a mi no me muestra ningún error en la línea que dices (CCS V4.106).  Creo que debe haber algo más en tu código que está causando el error y sin verlo completo va a ser muy difícil encontrarlo.

Saludos!
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: ema en 07 de Agosto de 2010, 16:36:04
En CCS muchas veces sucede que los errores en alguna linea no son provocados por esa linea.... osea pueden ser causado por falta de memoria u otras cosas.

Te sugiero que pruebes en un proyecto nuevo solamente esta sección de tu codigo y va a funcionar correctamente, pero en el conjunto va a fallar.

Saludos
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: kaki en 07 de Agosto de 2010, 17:30:49
Código: [Seleccionar]
#include <18F2550.h>
#device adc=8
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(oscillator=20M)
//LCD
#define use_portb_lcd TRUE
#include <lcd.c>
//Libreria STRING
#include <string.h>

//Variables Globales
char Pass[4];

//Declaro Funciones
void configuracion ();
int medir ();
char LeerEEPROM ();
void EscribirEEPROM ();
    void TeclaLeida();
    void ComprobarPASS();
//Principal
void main() {
int i=0;
char tecla;
 
 configuracion ();
 
 while (TRUE){
lcd_gotoxy(1,1);
  printf(lcd_putc,"Ingrese Pass:"); 
tecla =  TeclaLeida ();
     if (tecla != 'A'){
         Pass[i] = Tecla;
         i++;
   }

  }
}
//Funciones/////////////////////////////////////////////////////////
char TeclaLeida (){
int valor;
char TeclaChar;
valor = medir();
     if (valor < 150){
        TeclaChar = '#';
     }else if (valor<154){
        TeclaChar = '9';
     }else if (valor<160){
        TeclaChar = '6';
     }else if (valor<165){
        TeclaChar = '3';
     }else if (valor<175){
        TeclaChar = '0';
     }else if (valor<180){
        TeclaChar = '8';
     }else if (valor<188){
        TeclaChar = '5';
     }else if (valor<195){
        TeclaChar = '2';
     }else if (valor<205){
        TeclaChar = '*';
     }else if (valor<211){
        TeclaChar = '7';
     }else if (valor<223){
        TeclaChar = '4';
     }else if (valor<233){
        TeclaChar = '1';
}else{
TeclaChar = 'A';
}
     return TeclaChar;
}

void ComprobarPASS(){
  if (strcmp(LeerEEPROM(),Pass)== 0 ){
    lcd_gotoxy(2,2);
lcd_putc("Bienvenido");
  }else{
    lcd_gotoxy(2,2);
    lcd_putc("EROR de Contraceña");
  }
}

char LeerEEPROM (){
char LAST_VOLUME=0;
return read_EEPROM (LAST_VOLUME);
}


int medir () {
int Medicion=0;
    Medicion = read_adc();
    delay_ms( 100 );
return Medicion; 
}     

void configuracion () {
 //ADC
 setup_adc_ports(AN0|VSS_VDD);
 setup_adc(ADC_CLOCK_DIV_32);
 set_adc_channel(0);
 //LCD
 lcd_init();
}


ahi esta el codigo completo
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: bmb en 07 de Agosto de 2010, 17:45:09
Hola kaki.  Cambia esta declaración de la función en Declaro Funciones:  void TeclaLeida(); por esta otra:  char TeclaLeida();  Como esta última es que creaste la función y asi mismo la debes declarar.

Saludos!
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: kaki en 07 de Agosto de 2010, 17:48:48
no loco que pelotudo que soy...... no sabes las veces que lei el codigo... es al pedo "Solo ves lo que uno quiere ver"..

   Gracias por todo che!!
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: Suky en 07 de Agosto de 2010, 17:54:56
 :D Por eso era que no veíamos nada mal  :D
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: kaki en 07 de Agosto de 2010, 21:02:56
eso me paso por que modifique la funcion... y despues me se me paso de cambiar ese detalle q me volvio loco 2 dias!! no puedo creer que sea tan pavo!!
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: RedPic en 08 de Agosto de 2010, 06:55:56
Pues yo estaba convencido de que si la declaración de función no coincide con la función desarrollada posteriormente el CSS mandaba un aviso de "Previous declaration not equal ..." o algo así.  :shock:

Edito: Acabo de hacer la prueba con mi CSS 4.093 ... ¡CSS nunca dejará de sorprenderme!

Declaro: int8 init_buffer(int16 maxlen, char *buffer);
Desarrollo: void init_buffer(int16 maxlen, char *buffer){ .... }
Utilizo en linea 999: init_buffer(LEN_BUFFER,rec_buffer);
Y CSS me dice que "Error 112 ... Line 999(1,1); Function used but not defined: ... init_buffer SCR=1230"

Pero si ...

Declaro: void init_buffer(int16 maxlen, char *buffer);
Desarrollo: char init_buffer(int16 maxlen, char *buffer){ .... return 'A'}
Utilizo en linea 999: x = init_buffer(LEN_BUFFER,rec_buffer);
Y CSS me dice que "Error 51 ... Line 999(41,42); A numeric expression must appear here"

O sea que cualquier error es posible menos el de que la declaración de la función y la función misma son distintas. Cualquier parecido con la realidad es mera coincidencia.

Para cortarse las venas y no sangrar.  :?
 
Título: Re: Error 51 Line 32(21,22): A numeric expression must appear here (CCS)
Publicado por: bmb en 08 de Agosto de 2010, 12:35:10
Citar
O sea que cualquier error es posible menos el de que la declaración de la función y la función misma son distintas. Cualquier parecido con la realidad es mera coincidencia.

Para cortarse las venas y no sangrar.  :?
  :D :D :D

Pues si... Como quién dice, sería lo mismo y confundiría menos si el manejador de errores de CCS sacara la línea:

 "Error XX ... Line xxx(XX,XX); Usted se ha equivocado..."  :5]