# Problema de compilación en PIC C Compiler



## arrivaellobo (Jun 14, 2011)

Buenos días a todos.
Hace un mes más o menos empecé en el mundo de los PIC, por lo que instalé Proteus y Pic C Compiler (pic ccs) para practicar, pero desde hace unos días no me funciona correctamente el compilador. A la hora de compilar cualquier programa, me especifica el Error 18: File can not be opened.
Me pasa con cualquier programa, hasta los que tenía hechos funcionando perfectamente.
Como detalle cabe decir que hace unos días abrí el Pic C y se me bloqueó, por lo que lo cerré desde el administrador de tareas, y desde entonces no me funciona.
Tengo Windows 7, y la versión 4.114 del CCS.


----------



## Chico3001 (Jun 14, 2011)

Intentaste desinstalando y reinstalandolo de nuevo?


----------



## arrivaellobo (Jun 14, 2011)

Se me olvido mencionarlo...
He probado reinstalando, pasando el CCleaner y Your Uninstaller.


----------



## arrivaellobo (Jun 16, 2011)

Ya lo he conseguido solucionar.
Para ello he ido al menú Option -> Project Options -> Include Files y he pulsado "Default".
Era un problema de las rutas internas del compilador.
Un saludo


----------



## manuel0011 (Jul 28, 2011)

que tal amigos del foro tengo un problema con loa compilacion de un programa en pic c.

 Error 18 "Cronometro_DISPLAY.c" Line 2(9,57): File can not be opened
    Not in local "C:\Archivos de programa\PICC\Devices\16F628A.h"

tengo los archivos del compilador picc en "archivos de programa(x86)", ya he probado direccionando la direccion del progama hacia ahi y no paa nada tambien hay otros errores que tienen problemas similares. les voy a dejar el programa y los mensajes de errror que recibo

les agradeceria infintamente su ayuda

	#INCLUDE	"C:\Archivos de programa\PICC\Devices\16F628A.h"
	#FUSES		INTRC,NOWDT,NOLVP,MCLR
	#USE		DELAY(CLOCK=4M)

	int 	ss=0,mm=0,hh=0;
	int		n=0,st=0;

	void main(void)
	{
		setup_timer_2(T2_DIV_BY_16,249,10);
		set_timer2(0);
		setup_timer_0(RTCC_INTERNAL | RTCC_DIV_8);
		set_timer0(0);
		enable_interrupts(GLOBAL);
		enable_interrupts(INT_TIMER2);
		enable_interrupts(INT_TIMER0);

BUCLE:	goto	BUCLE;
	}

	#INT_TIMER0
	void interrupcion_tmr0(void)
	{
		int const tabla[10]={0x3f,0x06,0x05,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
		output_a(0);//todos los display van a estar desabilitados
		switch(st)
		{
			case 0: output_b(tabla[ss%10]);//cada 2 ms 
					output_high(PIN_A0);
					st=1; break;
			case 1: output_b(tabla[ss/10]);
					output_high(PIN_A1);
					st=2; break;
			case 2: output_b(tabla[mm%10]);
					output_high(PIN_A2);
					st=3; break;
			case 3: output_b(tabla[mm/10]);
					output_high(PIN_A3);
					st=4; break;
			case 4: output_b(tabla[hh%10]);//pin RA5 solo tiene para entrada
					output_high(PIN_A6);
					st=5; break;
			case 5: output_b(tabla[hh/10]);
					output_high(PIN_A7);
					st=0; break;
		}
	}


	#INT_TIMER2
	void interrupcion_tmr2(void)
	{
		n++;
		if(n==25)
		{
			n=0;
			ss++;
			if(ss==60)
			{
				ss=0;mm++;
				if(mm==60)
				{
					mm=0;hh++;
				}
			}
		}
	}



resumen de errores


Clean: Deleting intermediary and output files.
Clean: Deleted file "D:\unac\PIC\PIC_2\pic_2\Cronometro_LCD.ESYM".
Clean: Deleted file "D:\unac\PIC\PIC_2\pic_2\Cronometro_LCD.ERR".
Clean: Done.
Executing: "C:\Program Files (x86)\PICC\Ccsc.exe" +FM "Cronometro_DISPLAY.c" +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 18 "Cronometro_DISPLAY.c" Line 2(9,57): File can not be opened
    Not in local "C:\Archivos de programa\PICC\Devices\16F628A.h"
*** Error 111 "Cronometro_DISPLAY.c" Line 3(6,29): Unknown keyword in #FUSES   "MCLR"
*** Error 128 "Cronometro_DISPLAY.c" Line 6(1,17): A #DEVICE required before this line
      3 Errors,  0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Thu Jul 28 14:16:11 2011


----------



## Ingegogo (Nov 9, 2011)

disculpen queria ver si algien me pudiese dar un link de donde descargar el pic c compiler
lo *qu*e pasa es*qu*e format*eé* la compu *y* no respalde nada,se los agradeceria mucho *y*a *qu*e no *h*e podido des*c*argarlo estos dias


----------



## Chico3001 (Nov 9, 2011)

http://www.ccsinfo.com/content.php?page=compilers


----------



## perearosales (Mar 13, 2012)

arrivaellobo dijo:


> Ya lo he conseguido solucionar.
> Para ello he ido al menú Option -> Project Options -> Include Files y he pulsado "Default".
> Era un problema de las rutas internas del compilador.
> Un saludo



Gracias por el aporte


----------



## oxanderv (Mar 25, 2012)

arrivaellobo dijo:


> Ya lo he conseguido solucionar.
> Para ello he ido al menú Option -> Project Options -> Include Files y he pulsado "Default".
> Era un problema de las rutas internas del compilador.
> Un saludo



gracias soy nuevo en esto de los pics y preciso tenia este error


----------



## micro23 (May 9, 2012)

Gracias arrivaellobo, recientemente tenia el mismo problema, de que cuando queria compilar me marcaba error desde la primera linea del programa que es donde se manda a llamar al pic,pero gracias a ti, logre solucionar el problema.

Muchas Gracias


----------



## cmontoya (Sep 20, 2012)

Hola amigos 
Me estoy dando mañanas para aprender a manejar el CCS, pero al momento de utilizar mi único pic que tengo me sale un error al compilar y el código que estoy haciendo es súper sencillo 
Que le puede estar pasando???


----------



## Limako (Sep 21, 2012)

mmmm.... habias compilado programas antes con este ccs??
prueba a reinstalarlo o por lo menos las librerias de los micros copiarlas, si esque antes te funcionaba.
A mi hace no mucho me paso lo mismo, no se porque(algun virus o algo mal hecho) y reinstalando lo solucione.


----------



## fabio1 (May 21, 2013)

hola a todos...estoy empesando a programar en c,el programa que utiliso se llama pic c compiler
y no se cual es mi error en este programa 

#include <16f877a.h>
#use delay (clock = 4M)

void main ()  {
while (true) (
if (input (pin_bo)) {
output_high(pin_c0);
)
 if (!input (pin_b0)){
 output_low(pin_co);
 }
}
}


la funcion que solo tiene que cumplir es cuando cuando el pin b0 esta en 1 se prenda el led y cuando este en 0 se apague...
Espero que me puedan ayudar


----------



## D@rkbytes (May 21, 2013)

Cambia las letras "o" por cero "0" en pin_bo y pin_co
Los ) "Brackets" cámbialos por } "Curly Braces" en donde abres el while (true) y cierras el primer If

Saludos.


----------



## fabio1 (May 22, 2013)

hola lo modifique pero sigue sin funcionar,no lo puedo compilar

#include <16f877a.h>
#use delay  (clock = 4M)
VOID MAIN () {
WHILE (TRUE){
IF (INPUT{PIN_B0}){
OUTPUT_HIGH{PIN_C0};
}
IF (!INPUT {PIN_B0}){
OUTPUT_LOW{PIN_C0};
}
}
}

algo me debe estar faltando...

espero que me puedan ayudar


----------



## AleSergi (May 22, 2013)

y los {PIN_B0}
por (PIN_B0)????   y PIN_CO
fijate en el help del programa, como es la gramática, empeza con un programa de ejmplo, busca un curso de 'C', porque tu problema pasa por ahi...
el mísmo CCS trae cantidad de ejemplos.


----------



## D@rkbytes (May 22, 2013)

fabio1 dijo:


> algo me debe estar faltando...


Así lo tenías que haber corregido...

void main () {
while (true) {
if (input (pin_b0)) {
output_high(pin_c0);
}
if (!input (pin_b0)){
output_low(pin_c0);
}
}
}

Mejor date una vuelta por aquí *Curso de programación en C para microcontroladores PIC*
para que no te sigas confundiendo más.

Suerte.


----------



## fabio1 (May 22, 2013)

hola sigo con el mismo problema....subo foto para ver que puede ser


----------



## D@rkbytes (May 22, 2013)

Por algún motivo el PCWHD no está encontrando la carpeta Devices, y te produce esos errores.
Cerciórate que las carpetas de los dispositivos estén correctamente ubicadas en el programa.
Ve al menú Options / Project Options y aparecerá una ventana, ahí presionas el botón Include Files

Tienes que ver algo así...


Si no te aparecen las rutas, ó éstas no corresponden al lugar de instalación del PCWHD, corrígelas.​ Si no te funciona puedes probar desinstalando el programa con el revo uninstaller usando el modo avanzado.
Luego lo vuelves a instalar para ver si se recupera la configuración.

Suerte.


----------



## fabio1 (May 22, 2013)

Gracias  lo pude solucionar reintalando el programa pic c como me dijieron...


----------



## selarep04 (Abr 19, 2014)

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


----------



## ilcapo (Abr 19, 2014)

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


----------



## selarep04 (Abr 20, 2014)

Si,compile el programa y 0 errores,solo el warning del while.
esto es lo que me ha generado el programa:


----------



## TRILO-BYTE (Abr 20, 2014)

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


----------



## ilcapo (Abr 20, 2014)

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


----------



## selarep04 (Abr 22, 2014)

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.


----------



## cesarlrk (May 6, 2014)

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


```
#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);
}
```


----------



## Nuyel (May 6, 2014)

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
ademas intenta usar mejor unsigned char para ahorrar memoria esa es de 8 bits, suficiente para el puerto y evitas sobre carga

```
unsigned char tab7seg[10]={0b01111110, 0b00001100, 0b10110110, 0b10011110, 0b11001100,
                      0b11011010, 0b11111010, 0b00001110, 0b11111110, 0b11001110};//BCD del 0-9
```


----------



## cesarlrk (May 6, 2014)

ok entiendo hice el cambie en el programa como lo dijiste pero ahora me genera 2 errores


----------



## kalel2291 (May 13, 2014)

¿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.


```
#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:

```
#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.


----------



## luis30 (May 16, 2014)

kalel2291 dijo:


> ¿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.
> 
> ...



mira si te funciona.


```
#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){     

    }                                
 }
```


----------



## francko 28 (Ago 12, 2014)

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


----------



## papirrin (Ago 12, 2014)

ya probaste poniendo:
#include <lcd.c>
#include <KBD.C>

en lugar de:
#include <lcd1.c>
#include <KBD1.C>

en el pic C que tengo no lleva el 1


----------



## marby (Oct 19, 2014)

luis30 dijo:


> mira si te funciona.
> 
> 
> ```
> ...







yo lo corri pero me aparece este error too many nested #includes


----------



## gonzaloz17 (Jun 23, 2015)

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?

```
#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);

}

}
```


----------



## D@rkbytes (Jun 23, 2015)

¿Será porque a ese programa le faltan estas librerías?
variables.c, flex_lcd.c, def_registros.c, motor_lib.c y keypad.c


----------



## gonzaloz17 (Jun 23, 2015)

INCLUDE <variables.c>

#include <flex_lcd.c>

#include <def_registros.c>

#include <motor_lib.c>

#include <keypad.c>
si estan puestas


----------



## D@rkbytes (Jun 23, 2015)

gonzaloz17 dijo:


> Si están puestas.


En el código si están incluidas, pero, ¿están dentro de la carpeta del proyecto?


----------



## gonzaloz17 (Jun 23, 2015)

creo que no , como soluciono eso ?


----------



## D@rkbytes (Jun 23, 2015)

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.


----------



## COSMICO (Oct 22, 2015)

Hola amigos, esta línea esta en un código de mensaje anterios.
Executing: "C:\Program Files (x86)\PICC\Ccsc.exe" +FM "Cronometro_DISPLAY.c" +DF +LN +T +A +M +Z +Y=9.
Estoy interesado en modificar algunos parametros para que ccs no me genere algunos archivos al compilar.
como el lst, pjt, sim. He leido en la ayuda el commnad_line_compiler. Pero no logro entender muy bien.
como hacerlo.


----------



## D@rkbytes (Oct 23, 2015)

Yo uso un archivo de procesos por lotes .bat
Originalmente creado por Arossini y lo he modificado para la nueva versión de PIC C Compiler y Proteus.
(También funciona para versiones anteriores.)
Lo ejecutas y pregunta si deseas realizar la limpieza de archivos.

Aquí lo adjunto.

Nota:
Si éste archivo es ejecutado en raíz, también eliminará los archivos de las extensiones seleccionadas en todas las sub carpetas.


----------



## COSMICO (Oct 23, 2015)

Gracias amigo eres muy amable.
lo probaré.
Tengo ccs 5.08 y proteus 8.3 sp2.


----------



## yunier (Sep 23, 2016)

Hola amigos, soy nuevo en el foro.
Si pudieran ayudarme, pues estoy tratando de probar el encendido de un led.
Ya compilé el código, pero cuando cargo el .hex en el proteus, no hace nada.

Aquí les dejo el código.

```
#include <16f876.h>
#fuses XT,NOWDT
#use delay (clock=4000000)
#use fast_io(B)

void main(void)
{
port_b_pullups(true);
set_tris_B(0x01); // configuracion de todos los pines como salida
output_low(Pin_B1);
while(1)
{
if(input(PIN_B0)==1)
output_low(Pin_B1);
else
output_high(Pin_B1);
}
}
```


----------



## luis30 (Sep 23, 2016)

Checa si funciona así:


```
#include <16f876.h>
#fuses XT,NOWDT
#use delay (clock=4M)
//#use fast_io(B)

void main(void)
{
port_b_pullups(true);
set_tris_B(0x01); // configuracion de todos los pines como salida
output_low(Pin_B1);

while(1)
{
if(input(PIN_B0)==1){
output_low(Pin_B1);
}
else{
output_high(Pin_B1);
}
}
}
```


----------



## yunier (Sep 23, 2016)

Gracias ya funciono. Podria explicarme porque no funcionaba usando esa directiva?


----------



## D@rkbytes (Sep 23, 2016)

yunier dijo:


> ¿Podría explicarme por qué no funcionaba usando esa directiva?


En realidad, así como está tu programa debe funcionar, pero debes tener en cuenta que estás usando las resistencias pull-up internas del puerto B.
Entonces RB0 mantendrá un 1 por medio de la resistencia pull-up.
Por lo tanto, será más común esperar un 0 que un 1, que es cómo está en tu programa.
Así que todo depende de cómo compares y cómo tengas el hardware.

Algo más comprensible por código usando las resistencias pull-up, sería de esta forma:

```
#include <16f876.h>
#use     delay (crystal = 4MHz)
#use     fast_io(B)

void main(void)
{
   port_b_pullups(true);         // Habilitar resistencias pull-up
   set_tris_B(0x01);             // RB0 cómo entrada, los demás cómo salidas.
   output_b(0x00);               // Bits configurados cómo salida, en cero al iniciar.
   
   while(true)
   {
      if(input(PIN_B0) == 0)     // Si RB0 está en 0...
         output_high(Pin_B1);    // RB1 en 1
      else                       // Caso contrario...
         output_low(Pin_B1);     // RB1 en 0
   }
}
```


----------



## ElElel3 (Oct 14, 2016)

Hola soy nuevo en el foro y en el lenguaje C.
Al querer compilar el programa me sale 3 errores, esos errores son: 23, 48, 31. El programa es bastante sensillo.
Les agradeceria mucho si podrian Ayudarme

Les dejo el programa:

#include <Probando entradas y salidas 16f628.h>
#include <16f628.h>
#BYTE TRISB=0x86
#BYTE PORTB=0x06
#BYTE OPTION_REG= 0x81

void main()
{
   port_B_pullups(0xFF);
   bit_clear(OPTION_REG,7);
  bit_set(TRISB,0);
  bit_clear(TRISB,1);
  bit_clear(PORTB,1);

   while(TRUE)
   {
   if(bit_test(portb,0)==1)  
   bit_set(portb,1);
   else
   bit_clear(portb,1);       

   }

}


----------



## roberttorres (Oct 14, 2016)

ElElel3 dijo:
			
		

> Hola soy nuevo en el foro y en el lenguaje C.
> Al querer compilar el programa me sale 3 errores, esos errores son: 23, 48, 31. El programa es bastante sensillo.
> Les agradeceria mucho si podrian Ayudarme



Buenas.
El error esta en la librería "Probando entradas y salidas 16f628.h", si tienes esa libreria sube tambien el codigo para poder ayudarte.
O prueba compilar de esta forma:

```
//#include <Probando entradas y salidas 16f628.h>
#include <16f628.h> 
#BYTE TRISB=0x86
#BYTE PORTB=0x06
#BYTE OPTION_REG= 0x81
void main()
{
port_B_pullups(0xFF);
bit_clear(OPTION_REG,7);
bit_set(TRISB,0);
bit_clear(TRISB,1);
bit_clear(PORTB,1);

while(TRUE)
{
if(bit_test(portb,0)==1) 
bit_set(portb,1);
else
bit_clear(portb,1); 

}

}
```


----------



## ElElel3 (Oct 14, 2016)

No te puedo creer!! era eso nomas, como al general el proyecto ya salia eso lo deje. Muchas gracias!! Saludos desde Uruguay


----------



## molineitor (Jul 27, 2017)

Buenas. Entré por acá revisando sus entradas antes de escribirles.
Llevo un buen rato practicando e intentando hacer lo que se me ocurre y me encontré con un problema.

El programa no compila correctamente y el funcionamiento esperado no es el conseguido.
Al apretar los botones los LEDS finales no encienden de la manera que quiero. 

Aquí pondré lo que me propuse realizar ( He ido avanzando desde 0 haciendo rutinas de LEDS y es por donde voy usando el mismo programa base )

El programa es el siguiente:

a) Utilizar el puerto B para rutinas de LEDS iniciales
b) Utilizar el puerto D para la parte de POTENCIA

1) Un LED azul se mantiene encendido durante todo el proceso. Él indica que el sistema está activo.
2) Un LED amarillo estará intermitente mientras transcurre un tiempo de espera.
3) Se encenderá un LED verde de aprobación.
4) Se encenderá un LED azul ( POT ON ) indicando que la parte de potencia puede ser activada.
5) Mediante un botón controlar cual de los dos LEDS Verdes será encendido. (simulando Izquierda y Derecha de un motor DC a través del PIC)

El código que hice es éste:

```
#include <16f877a.h> // PIC a usar
#fuses hs, nowdt
#use delay(clock=20M) // Frecuencia de 20Mhz

int16 timer;

void main()
{
   set_tris_b(0b00000000);    // Puerto B es salida   
   set_tris_d(0b11110000);    // Puerto D 0-3 son salida y 4-7 son entrada
   output_b(0b00000001);      // LED que muestra encendido del dispositivo
   output_d(0b00000000);      //Puerto comienza en 0 lógico
   timer=0;
   {
   while (timer<5){           //Inicio de rutina
   timer=timer+1;
      output_b(0b01000001);
      delay_ms(500);
      output_b(0b00000001); 
      delay_ms(500);                                  
   }                          // Fin de la rutina
   output_b(0b10000001);      // Enciende LED de aprobación
   delay_ms(1000);            // Tiempo de espera para parte de potencia
   output_d(0b00000001);      // Enciende LED de activación 2
   }
        if (input(pin_d7));     // Entrada para LED 1 mediante botón
          output_d(0b00000101);
        if (input(pin_d6));     // Entrada para LED 2 mediante Botón
          output_d(0b00001001);
   }
```

* Al usar ELSE después del if ( Quise mantenerlo activo y con el botón solo cambiar la dirección, en un comienzo) me daba otro error: Esperaba una expresión numérica. ¿?

*Luego quiero agregarle al problema un sensor de nivel y necesitare leer las variables, por eso también me resulta imprescindible lograr esto. 

Si de alguna manera me pueden ayudar a entender este meollo, les agradecería.

Gracias, saludos y espero lograr pronto mis objetivos para compartirlos por acá para otros que tengan las mismas inquietudes que yo.

Esquema Electrónico en Proteus 8 adjunto con este mensaje.

NOTA: Tengo muchas dudas sobre el esquema eléctrico con los botones y las fuentes.
Intento usar unas flechitas y no tener que usar Vsource pero las pongo y no me hacen nada, es otra duda que me sale así.


----------



## D@rkbytes (Jul 27, 2017)

Sólo veo el siguiente error:
Terminar una sentencia if con ; hará que no se ejecute.

Esto no es un error, pero es del Basic: timer = timer + 1;
En C es más sencillo realizar un incremento: timer ++;


----------



## roberttorres (Jul 27, 2017)

Buenas
Agrego algunos detalles que te faltan a tu código:
1- el bucle infinito para sensar los botones
2- también seria mas conveniente utilizar los comandos "output_high(pin_x);", "output_low(pin_x);"
3- al oprimir los botónes, el comando "output_d(0b00001001);" creara un conflicto ya que utilizas el pin d6 y d7 como entradas y con ese comando lo estas mandando a 0 lógico. Mejor utiliza los comandos del item nº2.


----------



## Luis J. (Abr 21, 2020)

Hola. Tengo un problema con mi código.
Al compilar me aparece el error 23: "Can not change device type this far into the code. " En la línea 5
#device ADC=10
Gracias, lindo día.

```
//Arranque, paro e inversión de motor por temperatura, usando LM35

#include <18f4550.h>

#fuses NOMCLR, INTRC_IO

#device ADC=10

#use delay(clock = 8MHz)

#include <lcd.c>


//Conexiones LCD

#define LCD_RS_PIN      PIN_E0

#define LCD_RW_PIN      PIN_E1

#define LCD_ENABLE_PIN  PIN_E2

#define LCD_DATA4       PIN_D4

#define LCD_DATA5       PIN_D5

#define LCD_DATA6       PIN_D6

#define LCD_DATA7       PIN_D7



unsigned int16 temp;

float temperaturaLM35;


void main(){

  set_tris_a(0x3F);

  set_tris_b(0x00);

  setup_oscillator(OSC_8MHZ);                    // Oscilador interno a 8MHz

  setup_adc(ADC_CLOCK_INTERNAL);                 // Oscilador interno para ADC

  setup_adc_ports(AN0);                          // Configurar pin AN0 como análogo

  set_adc_channel(0);                            // Canal 0 (AN0)

  lcd_init();       

  

     //Mensaje inicial

   lcd_gotoxy(1,1);//Posiciona en LCD

   lcd_putc ("Arranque, paro e");//manda un mensaje al LCD

   lcd_gotoxy(1,2);

   lcd_putc ("inversion de giro");

   delay_ms(1000); //espera 1 segundo                   

   lcd_putc("\f"); //limpia el lcd

   lcd_gotoxy(1,1);//Posiciona en LCD

   lcd_putc ("con sensor de");//manda un mensaje al LCD

   lcd_gotoxy(1,2);

   lcd_putc ("temperatura LM35");

   delay_ms(1000); //espera 1 segundo                   

   lcd_putc("\f"); //limpia el lcd

 

   while(true){

      temp = read_adc();  //lee el dato de AN0

      // 1bit = 0.48828125°C, aplicamos regla de tres para temperatura final

      temperaturaLM35 = temp * 0.48828125;

      for(temperaturaLM35=21;temperaturaLM35<=26;)

      {

      output_b(0x00);

      lcd_putc("\f"); //limpia el lcd

      lcd_gotoxy(1,1);

      printf(lcd_putc,"Temp:%1.2f C",temperaturaLM35);

      lcd_gotoxy(1,2);

      printf(lcd_putc,"   Paro ");

      // %1.2f es para mostrar un entero y dos decimales de tipo floar

      delay_ms(1000);//espera 1000 milisegundos

      }

      for(temperaturaLM35=27;temperaturaLM35<=35;)

      {

      output_b(0x01);

      lcd_putc("\f");

      lcd_gotoxy(1,1);

      printf(lcd_putc,"Temp:%1.2f C",temperaturaLM35);

      lcd_gotoxy(1,2);

      printf(lcd_putc,"   Arranque");

      delay_ms(1000);

      }

      for(temperaturaLM35=12;temperaturaLM35<=20;)

      {

      output_b(0x02);

      lcd_putc("\f");

      lcd_gotoxy(1,1);

      printf(lcd_putc,"Temp:%1.2f C",temperaturaLM35);

      lcd_gotoxy(1,2);

      printf(lcd_putc,"  Inversion");

      delay_ms(1000);

      }

   }

}
```


----------



## Eduardo (Abr 21, 2020)

Luis J. dijo:


> ...
> Al compilar me aparece el error 23: "Can not change device type this far into the code. " En la línea 5
> #device ADC=10
> Gracias, lindo dia
> ....



🤔   Yo copypego tu código, lo compilo con CCS v5.091 y no da ningun error.


----------



## Luis J. (Abr 21, 2020)

:0
Intentare con esa versión
Gracias


----------

