Problema al compilar codigo en lenguaje C

Hola.
Entiendo poco de electronica. Estoy tratando de hacer girar un motor PAP unipolar 12V con un PIC 16f628A y un L293D. Altratar de compilar con el programa PIC C, me arroja el siguiente error: Error 128 "MotorPAP12V-1.c" Line 4(1,1): A #DEVICE required before this line
Alguien podria indicarme la causa por favor?

El codigo es el siguiente (lo obtuve de un sitio internet):

//MotorPAP12V.c
//Microcontrolador: PIC16F628A
//Oscilador: Interno 4MHz
void pasosCW(); //Ocho pasos CW (horario).
void pasosCCW(); //Ocho pasos CCW (antihorario).
#define PAUSA 5 //5 ms
char i;
void main(){
PORTB=0x00; //Inicialización.
NOT_RBPU_bit=0; //Habilitar las pull-up.
TRISB=0b10000000; //RB<6:0> como salidas. RB7 como entrada.

while(1){
if (RB7_bit==0){
RB4_bit=0; //Motor desconectado.
RB5_bit=0; //Motor desconectado.
}

if (RB7_bit==1){
//645 pasos CW
for (i=1; i<=80;i++)
pasosCW();
PORTB=0b00110110; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00110111; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00110101; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00111101; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00111001; //Secuencia continua.
Delay_ms(PAUSA);

//650 pasos CCW
PORTB=0b00111101; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00110101; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00110111; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00110110; //Secuencia continua.
Delay_ms(PAUSA);
for (i=1; i<=80;i++)
pasosCCW();
PORTB=0b00111110; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00111010; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00111011; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00111001; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00111101; //Secuencia continua.
Delay_ms(PAUSA);
PORTB=0b00111111; //Apagar el motor.
Delay_ms(500); //Esperar 5 segundos antes de repetir.
}
}
}

//Definición de funciones.
void pasosCW(){
PORTB=0b00110110;
Delay_ms(PAUSA);
PORTB=0b00110111;
Delay_ms(PAUSA);
PORTB=0b00110101;
Delay_ms(PAUSA);
PORTB=0b00111101;
Delay_ms(PAUSA);
PORTB=0b00111001;
Delay_ms(PAUSA);
PORTB=0b00111011;
Delay_ms(PAUSA);
PORTB=0b00111010;
Delay_ms(PAUSA);
PORTB=0b00111110;
Delay_ms(PAUSA);
}

void pasosCCW(){
PORTB=0b00111110;
Delay_ms(PAUSA);
PORTB=0b00111010;
Delay_ms(PAUSA);
PORTB=0b00111011;
Delay_ms(PAUSA);
PORTB=0b00111001;
Delay_ms(PAUSA);
PORTB=0b00111101;
Delay_ms(PAUSA);
PORTB=0b00110101;
Delay_ms(PAUSA);
PORTB=0b00110111;
Delay_ms(PAUSA);
PORTB=0b00110110;
Delay_ms(PAUSA);
}
 
He cambiado el codigo para compilarlo con mi compilador. Yo utilizo el compilador HTC PICC con linux. Espero que funciona.

El código cambiado:

Código:
//MotorPAP12V.c
//Microcontrolador: PIC16F628A
//Oscilador: Interno 4MHz
#include <htc.h>

#ifndef _XTAL_FREQ
#define _XTAL_FREQ 4000000
#endif

#define PAUSA 5 //5 ms

void pasosCW(void); //Ocho pasos CW (horario).
void pasosCCW(void); //Ocho pasos CCW (antihorario).

char i;
unsigned int d;

void main(){
  PORTB=0x00; //Inicialización.
//  NOT_RBPU_bit=0; //Habilitar las pull-up.
  RBPU=0;
  TRISB=0b10000000; //RB<6:0> como salidas. RB7 como entrada.

  while(1){
    if (RB7==0){
      RB4=0; //Motor desconectado.
      RB5=0; //Motor desconectado.
    }

    if (RB7==1){
//645 pasos CW
      for (i=1; i<=80;i++)
        pasosCW();
      PORTB=0b00110110; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00110111; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00110101; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00111101; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00111001; //Secuencia continua.
      __delay_ms(PAUSA);

//650 pasos CCW
      PORTB=0b00111101; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00110101; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00110111; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00110110; //Secuencia continua.
      __delay_ms(PAUSA);
      for (i=1; i<=80;i++)
        pasosCCW();
      PORTB=0b00111110; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00111010; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00111011; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00111001; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00111101; //Secuencia continua.
      __delay_ms(PAUSA);
      PORTB=0b00111111; //Apagar el motor.
      for(d=100; d>0; d--)
      __delay_ms(50); //Esperar 5 segundos antes de repetir.
    }
  }
}

//Definición de funciones.
void pasosCW(){
  PORTB=0b00110110;
  __delay_ms(PAUSA);
  PORTB=0b00110111;
  __delay_ms(PAUSA);
  PORTB=0b00110101;
  __delay_ms(PAUSA);
  PORTB=0b00111101;
  __delay_ms(PAUSA);
  PORTB=0b00111001;
  __delay_ms(PAUSA);
  PORTB=0b00111011;
  __delay_ms(PAUSA);
  PORTB=0b00111010;
  __delay_ms(PAUSA);
  PORTB=0b00111110;
  __delay_ms(PAUSA);
}

void pasosCCW(){
  PORTB=0b00111110;
  __delay_ms(PAUSA);
  PORTB=0b00111010;
  __delay_ms(PAUSA);
  PORTB=0b00111011;
  __delay_ms(PAUSA);
  PORTB=0b00111001;
  __delay_ms(PAUSA);
  PORTB=0b00111101;
  __delay_ms(PAUSA);
  PORTB=0b00110101;
  __delay_ms(PAUSA);
  PORTB=0b00110111;
  __delay_ms(PAUSA);
  PORTB=0b00110110;
  __delay_ms(PAUSA);
}

Añadido el archivo de hex.

Espero que tengas suerte.

Saludo
 

Adjuntos

  • paps.hex.zip
    774 bytes · Visitas: 6
Última edición:
Hola.
Si el código es tal cual... el error te indica que debes de declarar el PIC que estas usando al inicio de todo... escribe.
#Device PIC16F628A
y también..
#include "16F628A.h"

Todo esto si usas el compilador CCS. Revisa la web de donde conseguiste el código, deben de tener por lo menos dos archivos, uno *.h donde están las declaraciones y otro *.c donde está el código.

Saludos.
 
Gracias ByAxel, me sigue dando error, quizas debo configurar algo en el PIC C, voy a bajar algun tutorial mejor. El codigo lo saque de aqui: http://www.programarpicenc.com/productos/motor-pap-12v.html#Ejemplo Lo que quiero lograr al final es que mi motor (12V unipolar,6 cables) tenga un punto de inicio (0°) luego de 10 segundos gire 180° y se detenga ahi por 10 segundos y luego vuelva al punto de inicio y espere 10seg. para ir a los 180° de nuevo y asi sucesivamente. Seria genial si alguien me pudiera ayudar con este codigo. Solo se usar lo básico de PIC C.
 
No me di cuenta, ciertamente casi todas las líneas del programa no pertenecen directamente al PICC de CCS. En la página indican que el compilador es MikroC cuyo código no es nada compatible con el CCS. Sin embargo puedes usar esa misma lógica y adaptarlo para el CCS.
 
- Crea tu proyecto con ayuda del Wizard, ahí verás todo lo necesario para rellenar en la configuración del PIC que uses.

- En CCS hay dos formas para escribir en un puerto, la primera y más usada es con la función "output_b(dato);" donde dato seria el valor en binario de tu ejemplo.

- Para delays se utiliza la función "DelayMs(ms);", donde ms es el valor en milisegundos que quieras.

- Para leer pines creo que era "input_state(PIN_B0); o input_pin(PIN_B0);" por ejemplo. El valor devuelto es 0 o 1 de acuerdo al estado del pin leído.

- Si necesitas acceder directamente a un bit o registro debes de declararlo como #BYTE o #BIT, busca info de como usarlos.

Saludos.
 
Atrás
Arriba