TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: matis14 en 01 de Diciembre de 2012, 09:18:03

Título: Ayuda con problema para compilar
Publicado por: matis14 en 01 de Diciembre de 2012, 09:18:03
Hola amigos, hice un programa, es bastante sencillo pero al momento de compilar me tira el siguiente error
 error 128 A #device required before this line
y me marca la linea de los fuses... la verdad que no se que puede ser y queria ver si me podian ayudar a encontrar cual es el error... intente creando un proyecto nuevo y tampoco pasa nada, pero si en vez de poner #include <16f84a.h> pongo #include <16f628a.h>, el programa compila sin problemas...
El programa es el siguiente

#include <16f84a.h>
#fuses XT,NOWDT,NOPROTECT,PUT
#use delay( clock = 4000000 ) /* reloj de 4 MHz */
#use fast_io(A)
#byte intcon=0x0b /*Regisro de interrupcion*/
#bit RBIF=intcon.3 /*Para limpiar flag de interrupcion!!!*/
#BYTE TRISA = 0x85
#BYTE PORTA = 0x05
#BYTE TRISB = 0x86
#BYTE PORTB = 0x06
#BIT RB0 = 0x06.0 // lo uso para el led
#BIT RB4 = 0x06.4 // lo uso para el contacto
#BIT RB7 = 0x06.7 // lo uso para el la tecla
#BIT RA0 = 0x05.0 // lo uso para cerrar el cierre
#BIT RA3 = 0x05.3 // lo uso para abrir el cierre


int a;
int a_aux;
int b;


// RUTINA INTERRUPCION RB0
#int_EXT
void EXT_isr(void) {
         clear_interrupt(int_ext);
         a_aux=1;
         a=0;
         RA0 = 1;
         RA3 = 0;
         delay_ms(2000);
         RA0 = 0;
         RA3 = 0;
         enable_interrupts(GLOBAL);

         enable_interrupts(int_ext);
        
}

// RUTINA INTERRUPCION RB4-RB7
#int_RB
void x(){
clear_interrupt(int_rb);
if (RB4==1) {
   delay_ms(5000);
   RA0=1; // cierro
   RA3=0;
   delay_ms(1000);
   RA0 = 0;
   RA3 = 0;
}
if (RB7==1) {
   if (RA0==1){ // si esta cerrado
         RA0=0;//abro
         RA3=1;
         delay_ms(1000);
         RA0 = 0;
         RA3 = 0;
   }
   else {
         RA0=1; // si esta abierto cierro
         RA3=0;
         delay_ms(1000);
         RA0 = 0;
         RA3 = 0;
   }
}
enable_interrupts(int_rb);//habilita interrupción particular
enable_interrupts(GLOBAL);
}
// PROGRAMA PRINCIPAL
void main()
{
a=0;
a_aux=0;
b=400000;
TRISB = 0xFF;
TRISA = 0x00;
enable_interrupts(int_rb);//habilita interrupción particular
enable_interrupts(GLOBAL);
enable_interrupts(int_ext); //activar interrupcion externa
for( ; ; ){
   if(a_aux == 1){ // esta titilando el led
      if(a<b){ // si sigue titilando a se resetea por lo tanto nunca supera a b, excepto que se apague el led y aumente a
         a++;
      }
      else { // si a supero o igualo a b, abro
         a_aux=0;
         RA0 = 0;
         RA3 = 1;
         delay_ms(2000);
         RA0 = 0;
         RA3 = 0;
      }
   } //bucle infinito esperando interrupcion

}
}
Título: Re: Ayuda con problema para compilar
Publicado por: AngelGris en 01 de Diciembre de 2012, 09:22:36
  Yo no estoy seguro porque no uso CCS, pero creo que después del #unclude debes colocar la directiva #device <P=xxxx> siendo xxx el pic a utilizar. Buscalo en el manual de CCS. Si no aparece, crea un proyecto nuevo con el wizard de CCS y fíjate como es el código generado.
Título: Re: Ayuda con problema para compilar
Publicado por: matis14 en 01 de Diciembre de 2012, 09:31:14
  Yo no estoy seguro porque no uso CCS, pero creo que después del #unclude debes colocar la directiva #device <P=xxxx> siendo xxx el pic a utilizar. Buscalo en el manual de CCS. Si no aparece, crea un proyecto nuevo con el wizard de CCS y fíjate como es el código generado.

No, creando un proyecto nuevo me lleva al archivo de encabezamiento que crea el proyect wizard y me marca la linea de #fuses... pero si en vez de poner el 16f84a uso el 16f628a compila sin problemas... el tema es que donde yo vivo no consigo otro que no sea el 16f84a
Título: Re: Ayuda con problema para compilar
Publicado por: MGLSOFT en 01 de Diciembre de 2012, 09:32:48
Entiendo que el f84a no tiene PowerUpTimer, comenta el fuse PUT... y prueba...
Título: Re: Ayuda con problema para compilar
Publicado por: matis14 en 01 de Diciembre de 2012, 09:38:03
Entiendo que el f84a no tiene PowerUpTimer, comenta el fuse PUT... y prueba...

En fuses deje solamente el XT,NOWDT y me sigue dando el mismo error... la verdad que no entiendo que puede ser lo que esté fallando
Título: Re: Ayuda con problema para compilar
Publicado por: matis14 en 01 de Diciembre de 2012, 09:54:00
Ya lo pude solucionar, con este pic hay que agregar en la primer linea lo siguiente... #device PIC16F84A ... no se porque compila sin esa linea con cualquier otro pic, bueno en fin solucione mi problema y dejo aclarado esto por si le sucede a alguien mas.
Gracias
Título: Re: Ayuda con problema para compilar
Publicado por: ppyote en 02 de Diciembre de 2012, 10:57:18
Modifica la librería del 16f84 y así te evitarás calentamientos de cabeza en un futuro