Problema de compilación en PIC C Compiler

#41
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.
 
#42
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.
 

Adjuntos

#44
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.
PHP:
#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);
}
}
 
Última edición por un moderador:
#45
Checa si funciona así:

Código:
#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);
}
}
}
 
Última edición por un moderador:
#47
¿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:
PHP:
#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
   }
}
 
Última edición:
#48
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);

}

}
 
#49
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:
Código:
//#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); 

}

}
 
#51
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:
PHP:
#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í.
 

Adjuntos

#52
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 ++;
 
#53
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.
 

Temas similares