Problema de compilación en PIC C Compiler

Hola a todos, soy nuevo en el foro( no he visto donde presentarme).

tengo un problema con el pic cc. hago mi programa, monto el circuito en proteus y al editar las propiedades del micro para cargarle el programa,la carpeta donde tengo el programa me aparece vacia y no esta vacia,tiene sus programas.

espero haberme explicado y haber si alguien me hecha una mano.

gracias
 
hola lo compilaste al programa en PIC C ?? si no lo compilaste no se va a generar el archivo.hex y tal vez por eso no lo encuentre el Proteus
 
el CCS es un compilador un un monton de bugs

uno de ellos es que no genera nada

para ello abres el CCS compilas , cierras el CCS , lo abres otravez y compilas ahi debes tener ya el .hex
 
probá agregando el archivo.c a un Proyecto ( osea crear Proyecto) y en output Files, fijate si tenes seleccionada la opcion para generar el archivo.hex a lo mejor lo tenes destildado y por eso no lo genera
 
buena, pues ya lo tengo solucionado, abri,compile,abri,compile y a la 4ª me salio.

Gracias por la ayuda y sobretodo por la rapidez de esta.Soy novatisimo en el elnguaje y sin poder simular lo que hago,un caos.

una vez mas gracias.
 
Buenas tardes amigos del foro, les adjunto este programa de un contador 0-9999 con el pic 16f84a en c compiler estoy empezando a programar con este lenguaje pero me genera 6 errores y no logro comprender porque me los genera quiza algunos de ustedes me puede explicar el problema gracias

Código:
#include <16F84a.h>
#fuses xt,noput,nowdt,noprotect
#use delay (clock = 4000000)
#use fast_io (a)
#use fast_io(b)
int u=0;//unidades 
int d=0;//decenas
int c=0;//centenas
int m=0;//millares

#int_ext
  void contador(){
  if(u<9){ //se a mostrado el numero 9 en el digito unidades??
  u=0;//si entonces u=0, se muestra 0 en digito unidades
  d++;//incrementa indice decenas
  if(d<9){
  d=0;
  c++;
  if(c<9){
  c=0;
  m++;
  if(m<9){
  m=0;
  }
  }
  }
  }
  else {
  u++;
  }
}

 void config (){
       set_tris_a (0b00000);//0b00000000 o 0x00 config salidas
       output_a(0b00000);//se inicializa el puerto a en cero
       set_tris_b (0b00000001);//config entrada del pin b0 int_ext
       output_b  (0b00000000);//se inicializa el puerto b en cero
 }
void main (){
    config();
 
     int tab7seg(10)={0b01111110, 0b00001100, 0b10110110, 0b10011110, 0b11001100,
                      0b11011010, 0b11111010, 0b00001110, 0b11111110, 0b11001110};//BCD del 0-9
     if(input(pin_b0)==1);
      u++; // unidade = unidad+1 
    enable_interrupts (int_ext);//habilitamos la funcion interrupcion
    ext_int_edge(l_to_h);//interrupcion de cambio de bajo a alto en el pin b0
    enable_interrupts (global);//habilita interrupcion
    

do{
   output_high(pin_a0);//activo display unidades
   output_low(pin_a1);//desactivo display decenas
   output_low(pin_a2);//desactivo display centenas
   output_low(pin_a3);//desactivo display millares
   output_b(tab7seg(u));//valor decimal en display unidad (0-9)
   delay_ms(10);//retardo para cambiar de display
   
   output_low(pin_a0);//desactivo display unidades
   output_high(pin_a1);//activo display decenas
   output_low(pin_a2);//desactivo display centenas
   output_low(pin_a3);//desactivo display millares
   output_b(tab7seg(d));//valor decimal en display decena (0-9)
   delay_ms(10);//retardo para cambiar de display
 
   output_low(pin_a0);//desactivo display unidades
   output_low(pin_a1);//desactivo display decenas
   output_high(pin_a2);//activo display centenas
   output_low(pin_a3);//desactivo display millares
   output_b(tab7seg(c));//valor decimal en display centena (0-9)
   delay_ms(10);//retardo para cambiar de display
   
   output_low(pin_a0);//desactivo display unidades
   output_low(pin_a1);//desactivo display decenas
   output_low(pin_a2);//desactivo display centenas
   output_high(pin_a3);//activo display millares
   output_b(tab7seg(m));//valor decimal en display millar (0-9)
   delay_ms(10);//retardo para cambiar de display
}while (true);
}
 

Adjuntos

  • error.png
    error.png
    15.6 KB · Visitas: 15
tab7seg que inicias como matriz int está mal, las matrices se declaran con corchetes [] no con parentesís (), tu error es que no estas leyendo el puntero tab7seg[n] sino que intenta llamar la función tab7seg(n)
ademas intenta usar mejor unsigned char para ahorrar memoria esa es de 8 bits, suficiente para el puerto y evitas sobre carga
Código:
unsigned char tab7seg[10]={0b01111110, 0b00001100, 0b10110110, 0b10011110, 0b11001100,
                      0b11011010, 0b11111010, 0b00001110, 0b11111110, 0b11001110};//BCD del 0-9
 
¿Qué tal amigos?
Una disculpa por revivir este tema, lo que pasa es que estoy teniendo dificultades al compilar este ejemplo que encontré, supuestamente debe de compilar bien pero me resultan los siguientes errores, como son el error 23, 48 y 43
Les dejo el código de programación.

Código:
#include "conf.h"
#include <string.h>

//dirección del registro TRISA
#byte TRISA = 85  

//dirección del puerto A
#byte puerto_a = 05   
#bit RA0 = puerto_a.0 


#int_RDA
//Cuando entra un mensaje se produce una interrupción
void  RDA_isr(void) {

   char entrada[5]="\0";

   //Guardamos el mensaje recibido
   fgets(entrada,BLUE); 

   char led1[3]="\0"; 
   char led2[3]="\0"; 

   led1="1";
   led2="2";
 
 //Comparamos el mensajes recibido para saber que hacer:
 
   if(strcmp(entrada,led1)==0)RA0=0; //ON
   else if(strcmp(entrada,led2)==0)RA0=1;//OFF
  else {
      int i;
       for( i=1; i<=10; i++){ 
         puerto_a=0x00;delay_us(300);puerto_a=0x03;delay_us(700); 
         puerto_a=0x00;delay_ms(50); puerto_a=0x03;delay_ms(50);
     }   
 }
 
}


void main() {  
   //Desactivamos los comparadores
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   //Activamos las interrupciones
   enable_interrupts(INT_RDA); 
   enable_interrupts(GLOBAL);  

   //configuramos el puerto A
   set_tris_a( 0xfe); 
   puerto_a =0x01;

   putc('Z'); 

    //como el mensaje produce una interrupción, el resto del tiempo estamos en un bucle infinito sin hacer nada
   while(true){     

    }                                
 }
Primero me dice que va eso y después me dice que, cómo vemos al principio del programa, se incluye un fichero llamado conf.h.
Este fichero contiene las configuraciones necesarias para que el PIC funcione, simplemente debemos crearlo en el mismo directorio e incluir esto:
Código:
#include <16F628A.h>

        #FUSES NOWDT                    //No Watch Dog Timer
        #FUSES INTRC_IO                 //Internal RC Osc
        #FUSES NOPUT                    //No Power Up Timer
        #FUSES NOPROTECT                //Code not protected from reading
        #FUSES NOBROWNOUT               //No brownout reset
        #FUSES NOMCLR                   //Master Clear pin used for I/O
        #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
        #FUSES NOCPD                    //No EE protection
        #FUSES RESERVED                 //Used to set the reserved FUSE bits

        #use delay(clock=4000000)
        #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,STREAM=BLUE,errors)

Entonces puse primero la parte de #include <16F628A.h> hasta rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,STREAM=BLUE,errors)
y después lo que puse al principio y al compilar y ver los errores me sale otra ventana, es la que les muestro en la imagen.
Cabe destacar que ya he probado cambiando el pic y en la parte en donde va #include <16F628A.h> lo cambie por #Define <16F628A.h> ya que me salían mas errores y al cambiar eso me redujeron a 4
No sé si sea el compilador, si es que se utilizo otro, o sea la versión.
De antemano muchas gracias.
 
Última edición por un moderador:
¿Qué tal amigos?
Una disculpa por revivir este tema, lo que pasa es que estoy teniendo dificultades al compilar este ejemplo que encontré, supuestamente debe de compilar bien pero me resultan los siguientes errores, como son el error 23, 48 y 43
Les dejo el código de programación.

Código:
#include "conf.h"
#include <string.h>

//dirección del registro TRISA
#byte TRISA = 85  

//dirección del puerto A
#byte puerto_a = 05   
#bit RA0 = puerto_a.0 


#int_RDA
//Cuando entra un mensaje se produce una interrupción
void  RDA_isr(void) {

   char entrada[5]="\0";

   //Guardamos el mensaje recibido
   fgets(entrada,BLUE); 

   char led1[3]="\0"; 
   char led2[3]="\0"; 

   led1="1";
   led2="2";
 
 //Comparamos el mensajes recibido para saber que hacer:
 
   if(strcmp(entrada,led1)==0)RA0=0; //ON
   else if(strcmp(entrada,led2)==0)RA0=1;//OFF
  else {
      int i;
       for( i=1; i<=10; i++){ 
         puerto_a=0x00;delay_us(300);puerto_a=0x03;delay_us(700); 
         puerto_a=0x00;delay_ms(50); puerto_a=0x03;delay_ms(50);
     }   
 }
 
}


void main() {  
   //Desactivamos los comparadores
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   //Activamos las interrupciones
   enable_interrupts(INT_RDA); 
   enable_interrupts(GLOBAL);  

   //configuramos el puerto A
   set_tris_a( 0xfe); 
   puerto_a =0x01;

   putc('Z'); 

    //como el mensaje produce una interrupción, el resto del tiempo estamos en un bucle infinito sin hacer nada
   while(true){     

    }                                
 }
Primero me dice que va eso y después me dice que, cómo vemos al principio del programa, se incluye un fichero llamado conf.h.
Este fichero contiene las configuraciones necesarias para que el PIC funcione, simplemente debemos crearlo en el mismo directorio e incluir esto:
Código:
#include <16F628A.h>

        #FUSES NOWDT                    //No Watch Dog Timer
        #FUSES INTRC_IO                 //Internal RC Osc
        #FUSES NOPUT                    //No Power Up Timer
        #FUSES NOPROTECT                //Code not protected from reading
        #FUSES NOBROWNOUT               //No brownout reset
        #FUSES NOMCLR                   //Master Clear pin used for I/O
        #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
        #FUSES NOCPD                    //No EE protection
        #FUSES RESERVED                 //Used to set the reserved FUSE bits

        #use delay(clock=4000000)
        #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,STREAM=BLUE,errors)

Entonces puse primero la parte de #include <16F628A.h> hasta rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,STREAM=BLUE,errors)
y después lo que puse al principio y al compilar y ver los errores me sale otra ventana, es la que les muestro en la imagen.
Cabe destacar que ya he probado cambiando el pic y en la parte en donde va #include <16F628A.h> lo cambie por #Define <16F628A.h> ya que me salían mas errores y al cambiar eso me redujeron a 4
No sé si sea el compilador, si es que se utilizo otro, o sea la versión.
De antemano muchas gracias.

mira si te funciona.

Código:
#include <16F628A.h>
#include <string.h>

        #FUSES NOWDT                    //No Watch Dog Timer
        #FUSES INTRC_IO                 //Internal RC Osc
        #FUSES NOPUT                    //No Power Up Timer
        #FUSES NOPROTECT                //Code not protected from reading
        #FUSES NOBROWNOUT               //No brownout reset
        #FUSES NOMCLR                   //Master Clear pin used for I/O
        #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
        #FUSES NOCPD                    //No EE protection
        #FUSES RESERVED                 //Used to set the reserved FUSE bits

        #use delay(clock=4000000)
        #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,STREAM=BLUE,errors)

//dirección del registro TRISA
#byte TRISA = 85  

//dirección del puerto A
#byte puerto_a = 05   
#bit RA0 = puerto_a.0 


#int_RDA
//Cuando entra un mensaje se produce una interrupción
void  RDA_isr(void) {

   char entrada[5]="\0";

   //Guardamos el mensaje recibido
   fgets(entrada,BLUE); 

   char led1[3]="\0"; 
   char led2[3]="\0"; 

   led1="1";
   led2="2";
 
 //Comparamos el mensajes recibido para saber que hacer:
 
   if(strcmp(entrada,led1)==0)RA0=0; //ON
   else if(strcmp(entrada,led2)==0)RA0=1;//OFF
  else {
      int i;
       for( i=1; i<=10; i++){ 
         puerto_a=0x00;delay_us(300);puerto_a=0x03;delay_us(700); 
         puerto_a=0x00;delay_ms(50); puerto_a=0x03;delay_ms(50);
     }   
 }
 
}


void main() {  
   //Desactivamos los comparadores
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   //Activamos las interrupciones
   enable_interrupts(INT_RDA); 
   enable_interrupts(GLOBAL);  

   //configuramos el puerto A
   set_tris_a( 0xfe); 
   puerto_a =0x01;

   putc('Z'); 

    //como el mensaje produce una interrupción, el resto del tiempo estamos en un bucle infinito sin hacer nada
   while(true){     

    }                                
 }
 
Hola a todos soy nuevo en esto de los pics estoy usando pic c copiler y a la hora de copilar el proyecto me da estos mensajes de errores error 18y error 12 si alguien podría ayudarme se lo agradecería. ...



estos son los errores que me da pic c copiler
 

Adjuntos

  • Presentación2.jpg
    Presentación2.jpg
    53.7 KB · Visitas: 9
mira si te funciona.

Código:
#include <16F628A.h>
#include <string.h>

        #FUSES NOWDT                    //No Watch Dog Timer
        #FUSES INTRC_IO                 //Internal RC Osc
        #FUSES NOPUT                    //No Power Up Timer
        #FUSES NOPROTECT                //Code not protected from reading
        #FUSES NOBROWNOUT               //No brownout reset
        #FUSES NOMCLR                   //Master Clear pin used for I/O
        #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
        #FUSES NOCPD                    //No EE protection
        #FUSES RESERVED                 //Used to set the reserved FUSE bits

        #use delay(clock=4000000)
        #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,STREAM=BLUE,errors)

//dirección del registro TRISA
#byte TRISA = 85  

//dirección del puerto A
#byte puerto_a = 05   
#bit RA0 = puerto_a.0 


#int_RDA
//Cuando entra un mensaje se produce una interrupción
void  RDA_isr(void) {

   char entrada[5]="\0";

   //Guardamos el mensaje recibido
   fgets(entrada,BLUE); 

   char led1[3]="\0"; 
   char led2[3]="\0"; 

   led1="1";
   led2="2";
 
 //Comparamos el mensajes recibido para saber que hacer:
 
   if(strcmp(entrada,led1)==0)RA0=0; //ON
   else if(strcmp(entrada,led2)==0)RA0=1;//OFF
  else {
      int i;
       for( i=1; i<=10; i++){ 
         puerto_a=0x00;delay_us(300);puerto_a=0x03;delay_us(700); 
         puerto_a=0x00;delay_ms(50); puerto_a=0x03;delay_ms(50);
     }   
 }
 
}


void main() {  
   //Desactivamos los comparadores
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   //Activamos las interrupciones
   enable_interrupts(INT_RDA); 
   enable_interrupts(GLOBAL);  

   //configuramos el puerto A
   set_tris_a( 0xfe); 
   puerto_a =0x01;

   putc('Z'); 

    //como el mensaje produce una interrupción, el resto del tiempo estamos en un bucle infinito sin hacer nada
   while(true){     

    }                                
 }





yo lo corri pero me aparece este error too many nested #includes
 
Tengo este código de control pi para velocidad de motor+encoder, pero en el PIC C Compiler me aparecen errores y no sé qué hacer.
¿Alguien me podría ayudar para saber por qué no compila?
PHP:
#include <18f2431.h>

#fuses MCLR,NOWDT,HS,put

#use delay (clock=20000000)

#use rs232(baud=115200, xmit=pin_C6, rcv=pin_C7)


#USE STANDARD_IO(A)

#USE STANDARD_IO(B)

#USE STANDARD_IO(C)


#INCLUDE <variables.c>

#include <flex_lcd.c>

#include <def_registros.c>

#include <motor_lib.c>

#include <keypad.c>


int16 t=15536;
//cristal 20M fs100


#int_TIMER1

void temp1s(void){

set_timer1 (t);

output_high(pin_c0);

w=medir_velocidad();
//medición de la variable a controlar

en=set_point-w;
//cálculo del error

cn=A0*en;

cn+=A1*en_1;

cn+=cn_1;


en_1=en;

cn_1=cn;


PWM_DATA=cn*0.93;


if(set_point>0){

if((PWM_DATA>1023) (w==0)){derecha();PWM_DATA=1023;}

if(PWM_DATA<0){izquierda();PWM_DATA*=-1;}

}

else{


PWM_DATA*=-1;

if((PWM_DATA>1023) (w==0)){izquierda();PWM_DATA=1023;}

if(PWM_DATA<0){derecha();PWM_DATA*=-1;}

//if(PWM_DATA<0){PWM_DATA=0;}

}


set_pwm1_duty(PWM_DATA);

printf("%Ld",w);

putc(13);

output_low(pin_c0);

}


VOID MAIN(VOID){

int8 dir=0,dato=0;

//signed int16 p=0;

signed int16 mi_set_point=0;

lcd_init();

KP=0.8; //0.0154

KI=10; //0.16

A0=KP;

A1=KI*0.01;

A1-=KP;

set_point=400;

setup_timer_2(T2_DIV_BY_1,255,1);

setup_ccp1(CCP_PWM);

QEICON=0b11110100;

setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);

set_timer1 (t);

enable_interrupts(INT_TIMER1);

enable_interrupts(global);

setup_timer_0(T0_INTERNAL | T1_DIV_BY_1);

while(TRUE){

dato=meter_caracter();

if(dato=='A'){

printf(lcd_putc,"\fSet Point:\n");

mi_set_point=meter_datos();

printf(lcd_putc,"%Ld",mi_set_point);

set_point=mi_set_point;

}

if(bit_test(QEICON,5)==0){dir=0;}


if(bit_test(QEICON,5)==1){dir=1;}

printf(lcd_putc,"\f%Ld%Ld\n%Ld %u",set_point,w,PWM_DATA,dir);

delay_ms(200);

}

}
 
Pues buscándolas en donde conseguiste ese programa.
Esas librerías son especiales, posiblemente creadas por el autor y la única que conozco es, flex_lcd.c.
Así que si no las puedes obtener, adiós compilación.
 
Atrás
Arriba