Autor Tema: Error en la compilacion del CCS  (Leído 12906 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mldavid

  • PIC10
  • *
  • Mensajes: 18
Error en la compilacion del CCS
« en: 14 de Octubre de 2005, 13:25:00 »
Hola a todos, me estoy iniciando en la ardua tarea de programar pics en c y mi problema es el que al compilar el codigo descrito en la parte inferior me da un error:

Error[51]   D:Documents and SettingsAdministradorEscritorioCCSvs_juego_luces.c 18 : A numeric expression must appear here

Utilizo el CCS version 3.203 y el codigo es:

#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP
#use delay (clock=4000000)
#build(reset=0x1, interrupt=0x5)
#ORG 0x0F00,0x0FFF {}
#use fast_io(c)
#use i2c(master, slow, sda=PIN_C4, scl=PIN_C3)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)


///PROGRAMA
void main(void)
{
   set_tris_c(0x00);            
   disable_interrupts(GLOBAL);      
   signed char i;      //variable indice
   char led2[40]={"Esto Funciona"};


   output_high(PIN_C5);


   i2c_start();
   i2c_write(0xc6);
   i2c_write(0);
   i2c_write(12);

   for (i=0;i<39;i++){         
      i2c_write(led2);
      delay_ms(100);
   }



     do{
                 printf("hola mundo"Giño;
                 output_low(PIN_C5);      
    delay_ms(1000);
    output_high(PIN_C5);      
    delay_ms(500);
   }while(TRUE);



}

Espero que me puedan ayudar.
Gracias a todos.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Error en la compilacion del CCS
« Respuesta #1 en: 14 de Octubre de 2005, 13:38:00 »
primero la declaracion de variables... despues lo demas Giño

.
..
...
void main(void)
{
unsigned int i; //variable indice
char led2[40]={"Esto Funciona"};

set_tris_c(0x00);
disable_interrupts(GLOBAL);

output_high(PIN_C5);
...
..
.

saludos

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Error en la compilacion del CCS
« Respuesta #2 en: 16 de Enero de 2008, 16:02:47 »
Lo primero que hay que declarar dentro de la función main son todas las variables que se van a usar dentro de ese ámbito.

es decir luego de las llaves de apertura { de la función main, definirlas.
y a continuación seguir con el código que se desee programar.

EJEMPLO:

void main(void)
{
int i=0;     // declaro variable i
int bucle=0; // declaro variable bucle
set_tris_a(0xff);           //defino todo el puerto A como entradas
set_tris_b(0x00);          //defino todo el puerto B como salidas
disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas

// primero se deben declarar todas las variables sino el compilador da el error
// "a numeric expression must appear here"



// Luego continuamos con el código normalmente


      do

        {

         //parpadeo de led en port b.0

             for (i=1;i<10;++i)
               {
               output_high(PIN_B0);      //led on
               delay_ms(100);
               output_low(PIN_B0);         //led off
               delay_ms(100);
               }
        }while (true);
}
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado hospeck

  • PIC10
  • *
  • Mensajes: 11
Re: Error en la compilacion del CCS
« Respuesta #3 en: 22 de Junio de 2009, 08:40:37 »
Estimados amigos de todopic, necesito que me ayunden con el siguiente tema: estoy programando en CCS y he realizado el programa que vereis a continuacion. Mi problema es que al compilar el programa me aparecen los siguientes errores

>>> Warning 203 "C:\led\archivos acuario\ds1307.c" Line 58(1,1): Condition always TRUE
*** Error 51 "acualed.c" Line 19(1,5): A numeric expression must appear here
*** Error 79 "acualed.c" Line 129(0,1): Expect }
C:\led\archivos acuario\acualed.o ===>  2 Errors,  1 Warnings.

El error de la linea 79 no deberia aparecer porque he revisado la escritura de los corchetes y estan bien!! El error en el que necesito AYUDAAA es el de ***Error 51, no consigo quitarlo

#include "C:\led\archivos acuario\acualed.h"

#byte pb=0xF81
#bit t_ok=pb.0
#bit t_mas=pb.1
#bit t_mns=pb.2
#byte puerto_c=0xF82

#byte intcon=0xFF2
#byte intcon3=0xFF0
#bit intf=intcon.1
#bit intf1=intcon3.0
#bit intf2=intcon3.1

#include <LCD.c>
#include <ds1307.c>
#include <menu.c>

void main(void)<--- aqui me aparece el error 51 en la linea 19 !!AYUDA!!
{
   unsigned int8 h1,h2,m1,m2,h,m;
   unsigned int8 h3,h4,m3,m4,m5,m6,c,s,r;
   unsigned int8 t=16;
   unsigned int8 k=44;
   unsigned int8 dn[]={15,15,14,14,30,30,28,28,60,60,56,56,120,120,112,112};
   unsigned int8 nd[]={112,112,113,113,97,97,99,99,67,67,71,71,7,7,15,15};
   set_tris_c(0x00);
   output_c(0x00);
   port_b_pullups(true);
   setup_adc_ports(NO_ANALOGS);
   intf=0; intf1=0; intf2=0;
   enable_interrupts(INT_EXT);
   enable_interrupts(INT_EXT1);
   enable_interrupts(INT_EXT2);
   enable_interrupts(GLOBAL);
   lcd_init();
   menu_modo();
  
   while(true)
  { //el resto de codigo.......
« Última modificación: 22 de Junio de 2009, 08:42:55 por hospeck »

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Error en la compilacion del CCS
« Respuesta #4 en: 22 de Junio de 2009, 08:49:42 »
hospeck:
            Copiá todo el código por favor así podemos ver todo y no se escapa nada que quizá te de el error.

Te sugiero otra opción que uso mucho es ir comentando el código con

/*



 */

Así voy descartando que zona del programa me puede estar causando el error.
            Saludos.
                  Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado hospeck

  • PIC10
  • *
  • Mensajes: 11
Re: Error en la compilacion del CCS
« Respuesta #5 en: 22 de Junio de 2009, 10:45:15 »
ok, aqui esta el programa completo:

#include "C:\led\archivos acuario\acualed.h"

#byte pb=0xF81        //configuracion del puerto b para los botones
#bit t_ok=pb.0
#bit t_mas=pb.1
#bit t_mns=pb.2
#byte puerto_c=0xF82 //configuracion del puerto c para las salidas de luz
 
#byte intcon=0xFF2    //configuracion de las interrupciones exteriores
#byte intcon3=0xFF0
#bit intf=intcon.1
#bit intf1=intcon3.0
#bit intf2=intcon3.1

#include <LCD.c>        //codigos que complementan el programa
#include <ds1307.c>
#include <menu.c>

void main(void)
{
   unsigned int8 h1,h2,m1,m2,h,m;  //declaracion de las variables a utilizar
   unsigned int8 h3,h4,m3,m4,m5,m6,c,z,r;
   unsigned int8 t=16;
   unsigned int8 k=44;
   unsigned int8 dn[]={15,15,14,14,30,30,28,28,60,60,56,56,120,120,112,112}; //declaracion de las matrices
   unsigned int8 nd[]={112,112,113,113,97,97,99,99,67,67,71,71,7,7,15,15};
   set_tris_c(0x00);
   output_c(0x00);
   port_b_pullups(true);
   setup_adc_ports(NO_ANALOGS);
   intf=0; intf1=0; intf2=0;
   enable_interrupts(INT_EXT);
   enable_interrupts(INT_EXT1);
   enable_interrupts(INT_EXT2);
   enable_interrupts(GLOBAL);
   lcd_init();
   menu_modo();
  
   while(true)
  {
  //leemos el reloj

  leer_ds1307();

  //leemos de la memoria los datos grabados de las alarmas

  h1=read_eeprom(e_hora_dn_1);
  m1=read_eeprom(e_mins_dn_1);
  h2=read_eeprom(e_hora_nd_1);
  m2=read_eeprom(e_mins_nd_1);
  h3=read_eeprom(e_hora_3);
  m3=read_eeprom(e_mins_3);
  h4=read_eeprom(e_hora_4);
  m4=read_eeprom(e_mins_4);
  h=registros_ds1307[horas];
  m=registros_ds1307[minutos];

  //desactivamos las interrupciones durante la comparacion de alarmas

  disable_interrupts(GLOBAL);

  //comparamos y actualizamos las salidas de luz

  if (((m1<k)&&(h==h1)&&(m<m1))||((m1>k)&&(h==h1)&&(m<m1))||((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2<k)&&(h==h2)&&(m>m2)&&(m>m4)))||
  ((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2<k)&&(h!=h2)&&(h>h2)&&(h<h1)))||((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2>k)&&(h!=h2)&&(h!=h4)&&(h>h2)&&(h<h1))))
  {
      puerto_c=112;break;
  }
  else if (((m1<k)&&(h==h1)&&(m>m1)&&(m<m3))||((m1>k)&&(h==h1)&&(m>m1))||((m1==m)&&(h1==h)))
  {
    c=m-m1;
    for(r=c;r<16;r++)
    {
       puerto_c=nd[r];delay_ms(60000);
    }
    break;
  }
  else if ((m1>k)&&(h!=h1)&&(h=h3))
  {
    m5=60-m1+m;
    if (m5>t)
    {
       puerto_c=15;break;
    }
    else
    {
       c=m5;
       for(r=c;r<16;r++)
        {
          puerto_c=nd[r]; delay_ms(60000);
        }
      break;
    }
  }
  else if (((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2<k)&&(h=h2)&&(m>m2)&&(m<m4)))||((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2>k)&&(h=h2)&&(m<m2)))||
  ((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m==m2)&&(h==h2))))
  {
    c=m-m2;
    for(z=c;z<16;z++)
    {
       puerto_c=dn[z];delay_ms(60000);
    }
    break;
  }
  else if ((((m1<k)&&(h!=h1))||((m1>k)&&(h!=h1)&&(h!=h3)))&&((m2>k)&&(h!=h2)&&(h=h4)))
  {
    m6=60-m2+m;
    if(m6>t)
    {
       puerto_c=112;break;
    }
    else
    {
      c=m6;
      for(z=c;z<16;z++)
      {
        puerto_c=dn[z];delay_ms(60000);
      }
      break;
    }
  }
  else
  {
     puerto_c=15; break;
  }

  //reactivamos las interrupciones despues del la actualizacion de las salidas

  enable_interrupts(GLOBAL);

  //actualizamos la pantalla con el estado normal

  lcd_gotoxy(1,1);
  printf(lcd_putc,"HORA: %02u:%02u:%02u",registros_ds1307[horas],registros_ds1307[minutos],registros_ds1307[segundos]);
  lcd_gotoxy(1,2);
  printf(lcd_putc,"FECHA: %02u/%02u/%02u",registros_ds1307[dias],registros_ds1307[meses],registros_ds1307[anios]);
  }
}

saludos!!
« Última modificación: 22 de Junio de 2009, 10:59:17 por hospeck »

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Error en la compilacion del CCS
« Respuesta #6 en: 22 de Junio de 2009, 11:31:20 »
Hospeck:
 el problema lo tenés fuera del programa principal.
Posiblemente dentro de la libreria que invocás:

#include "C:\led\archivos acuario\acualed.h"


el error te indica que es en la línea 51 pero de acualed.c (es decir el programa principal, pero del programa principal estás invocando otros trozos de código)
*** Error 51 "acualed.c" Line 19(1,5): A numeric expression must appear here
*** Error 79 "acualed.c" Line 129(0,1): Expect }

Copiá todo el código de la librería acualed.h y lo vemos.
« Última modificación: 22 de Junio de 2009, 19:38:01 por jukinch »
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado hospeck

  • PIC10
  • *
  • Mensajes: 11
Re: Error en la compilacion del CCS
« Respuesta #7 en: 22 de Junio de 2009, 11:50:55 »
el error esta en la linea 19 del programa: void main(void) y ya te he puesto el codigo completo del archivo acualed.c anteriormente, de todas formas te dejo aqui la informacion del archivo acualed.h:

#include <18F4520.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV25                   //Brownout reset at 2.5V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES LVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=4000000)
#use i2c(Master, SDA=PIN_A0, SCL=PIN_A1)
« Última modificación: 22 de Junio de 2009, 11:55:50 por hospeck »

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Error en la compilacion del CCS
« Respuesta #8 en: 22 de Junio de 2009, 12:00:17 »
Hospeck:
          La librería acualed.h está completa? El error te dice que está adentro del programa principal, pero podría estar en esa librería, ya que al invocarla con un include pasa a formar parte del código principal.
          Si podés subí el archivo entero.
*** Error 51 "acualed.c" Line 19(1,5): A numeric expression must appear here
*** Error 79 "acualed.c" Line 129(0,1): Expect }
          
« Última modificación: 22 de Junio de 2009, 19:40:35 por jukinch »
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado hospeck

  • PIC10
  • *
  • Mensajes: 11
Re: Error en la compilacion del CCS
« Respuesta #9 en: 22 de Junio de 2009, 12:10:05 »
si es que eso es lo raro que mi codigo solo tiene 127 lineas!

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Error en la compilacion del CCS
« Respuesta #10 en: 22 de Junio de 2009, 12:13:18 »
Si querés hablamos por msn. te mandé una invitación.

Si esta es la librería acualed.h

#include <18F4520.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV25                   //Brownout reset at 2.5V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES LVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=4000000)
#use i2c(Master, SDA=PIN_A0, SCL=PIN_A1)

En la librería sólo hay 30 líneas de código. Y el compilador hace referencia a 129 líneas como mínimo, es decir que el error está en el programa principal, pero puede ser a causa de alguna librería que invocás.
      Saludos.
         Jukinch
« Última modificación: 22 de Junio de 2009, 19:42:46 por jukinch »
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado hospeck

  • PIC10
  • *
  • Mensajes: 11
Re: Error en la compilacion del CCS
« Respuesta #11 en: 22 de Junio de 2009, 12:22:15 »
del error 51 "a numeric expression must appear here" en la linea 19 como se puede resolver?

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Error en la compilacion del CCS
« Respuesta #12 en: 22 de Junio de 2009, 12:34:44 »
Quiero probar compilarlo en mi computadora y me faltan las librerías que invocás.

#include <LCD.c>        //codigos que complementan el programa
#include <ds1307.c>
#include <menu.c>

Si podés subilas.
           Saludos.
           Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado hospeck

  • PIC10
  • *
  • Mensajes: 11
Re: Error en la compilacion del CCS
« Respuesta #13 en: 22 de Junio de 2009, 12:42:30 »
aqui te adjunto los archivos ds1307, lcd y menu!!

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Error en la compilacion del CCS
« Respuesta #14 en: 22 de Junio de 2009, 13:00:09 »
El error lo tenés en el archivo menu.c
mirá en esta función void minstemp(void)

le falta un }  :( al final para cerrar el for. :-/
Agregá debajo de todo un } y listo.

Usé el truco: de comentar /*todo el codigo que creo que anda bien para dar por sentado que ahí no está el problema. y funciono  :-/ */


void minstemp(void)
{
     for(i=0;i!=255;i++)
     {
        delay_ms(20);
        lcd_gotoxy(15,2);
        printf(lcd_putc,"%02u",mins);
        if(!t_ok)
        {
           delay_ms(300);
           break;
        }
        else if(!t_mas)
        {
            i=0;
            delay_ms(300);
            mins++;
            if(mins>59)
            {
              mins=0;
            };
        }        
        else if(!t_mns)
        {
             i=0;
             delay_ms(300);
             mins--;
             if(mins==255)
             {
                mins=59;
             }
        }
     }
}
« Última modificación: 22 de Junio de 2009, 13:02:55 por jukinch »
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes