Problema al compilar en PIC C Compiler de CCS

Hola a todos, para resumir estaba trabajando en un programa para maneajar un adc en el pic 18f4550 y decidí utilizar registros #bit pero tengo un par de problemas con estos.
En si lo que estoy haciendo es crear un archivo .c con funciones declaradas para utilizar en el programa principal, por lo que además del archivo del módulo .c tengo el archivo .h de su librería y el archivo .c del programa principal sin embargo siempre me tira errores con los bits puesto que sucede una de dos, o pongo en el programa primero el header de la función y me tira error de "A #DEVICE required before this line" marcando el primer #BIT o pongo primero la libería de 18f4550.h y me marca en el segundo #BIT (intente deecho tener un solo registro de esos para ver si se resolvía pero no, me siguió tirando el mismo error) el error de "Undefined Identifier".
Por si se lo preguntan ya intenté eliminar la librería donde tengo los FUSE y la librería del pic y poner todo eso en el principal, no funcionó, también intenté hacer un solo archivo con todo junto y fue igual; e inclusive lo que adjunto es un programa corto de prueba para ver si de pura casualidad veia el problema con un programa mucho más pequño y simplificado pero sigue el mismo problema, tanto en este cómo en el primer programa que intenté hacer.
Lamento las molestias, y gracias por su atención.
Por cierto estoy trabajando con el CCS
 

Adjuntos

  • Archivos.rar
    979 bytes · Visitas: 3
PORTD.X (Donde X es el bit) no es reconocido por PCHWD Compiler.

Para que este compilador reconozca cualquier puerto o registro, lo tienes que declarar.
Tienes dos formas:
La más sencilla para no buscar su locación en la hoja de datos.
Código:
#byte PORTD = getenv ("SFR:PORTD")
O declarando su locación en la memoria.
#byte PORTD = 0xF83 // Puerto D del PIC18F4550

Ya con eso puedes declarar sus bits con el nombre que quieras.
Que en tu caso son:
#bit led1 = PORTD.1
#bit led2 = PORTD.0
#bit led3 = PORTD.2

Y también puedes hacerlo de esta forma:
#bit led1 = 0xF83.1

PD:
El último break no es necesario porque es la salida de switch.
 
Cordial saludo.
A la hora de ejecutar el programa de PIC C se generan errores como:
- "Error 51: a Numeric expression must appear here"
- "Error 12: Undefined identifier i "

He revisado varias veces y he intentado hacer cambios pero no resulta. Estoy trabajando con el PIC16F84A
C:
#include <16f84a.h> //Pic a utilizar

#USE DELAY (CLOCK=4000000) //oscilador

#FUSES XT,NOWDT,NOPROTECT, NOPUT //Oscilador para el programador

#USE standard_io(b)

#USE standard_io(a)


////Comienzo de programa//////


int datos_BCD[10]={0xc0, 0xf9, 0x24, 0xb0, 0x99, 0x92, 0x83, 0xf8, 0x80, 0x98};

int Useg = 0, Dseg = 0, Umin = 0;

void main(void)//Programa principal

{

//Se inician todas las salidas del puerto A en cero

output_low(pin_a0);

output_low(pin_a1);

output_low(pin_a2);

output_low(pin_a3);

output_low(pin_a4);

//Se inician todas las salidas del puerto B en 1


output_b(255);


while (true) //Ciclo

{

// En este gor se muestran los datos del tiempo en el display 7 segmentos de cuatro

//digitos (solo emplea 3 digitos)

for ( int16 i = 0; i <= 10320; i++) //----¡¡ERROR!!---

{

// Mostrando unidades de segundos

output_b(datos_BCD[Useg]); //Carga en el puerto b el dato de las unidades en seg

output_high(pin_a0); //Activa el display de las unidades de segundos

output_low(pin_a0); //Desactiva el display de las unidades de seg


//Mostrando decenas de segundos


output_b(datos_BCD[Dseg]); //Carga en el puerto b el dato de las unidades en seg

output_high(pin_a1); //Activa el display de las decenas de segundos

output_low(pin_a1); //Desactiva el display de las decenas en segundos


//Datos unidades de minutos


output_b(datos_BCD[Umin]); //Carga en el puerto b el dato de las unidades en min

output_high(pin_a2); //Activa el display de las unidades de minutos

output_low(pin_a2); //Desactiva el display de las unidades de minutos


// Condicion para hacer titiliar los dos puntos (DP)display

if(i<= 5150) //----¡¡ERROR!!---

{

output_high(pin_a3);;//Enciende los dos puntos (DP) del display

}else // ----¡¡ERROR!---

{

output_low(pin_a3); //apaga los dos puntos (DP)del display

}

}


output_low(pin_a4);

Useg++; //Incrementa la variable Useg que representa las unidades de segundos


//Si las variables Useg llega a 10, entonces se le asigna 0 a este variable y se incrementa

// el valor de la variable Dseg que representa las decenas de segundos

if (Useg==10){

Useg=0; //Asigna 0 a Useg

Dseg++; //Incrementa la variable Dseg en unidad

}

//Si la variable Dseg llega a 6, entonces se le asigna 0 a esta variable y se le

//incrementa el valor de la variable Umin que representa las unidades de minto


if (Dseg==6){

Useg =0; //Asigna 0 a Useg

Dseg=0; //Asigna 0 a Dseg

Umin++; //Incrementa la variable Umin en una unidad

}

//Si la variable Umin llega a 10, entonces se le asigna 0 a todas las variables

if (Umin==10){

Useg=0; //Se le asgina 0 a Useg

Dseg=0; //Se le asigna 0 a Dseg

Umin=0; //Se le asigna 0 a Umin

}

//Se activa el pin A4 para indicarle al otro microcontrolador (PIC16F887) que ya llego a 0:59, 1:59; 2:59, etc.

if (Dseg==5 && Useg==9)output_high(pin_a4);

} }

//FIN DEL PROGRAMA//
 
A la hora de ejecutar el programa de PIC C se generan errores como:
- "Error 51: a Numeric expression must appear here"
- "Error 12: Undefined identifier i "
Debes declarar la variable "i" que estás usando aquí:
if(i <= 5150)

Otro error.
Aquí colocaste un punto y coma extra:
output_high(pin_a3);;//Enciende los dos puntos (DP) del display
 
Por cierto una pregunta que me planteo, no es mejor, en vez de declarar como lo ha hecho el puerto A, hacerlo de la siguiente forma?
output_A(0);
 
Probablemente sea la definición int16 i que hace en el for() , hay compiladores que no lo aceptan y eso te deja indefinida i

Aunque este pibe en lugar de confiar en la clarividencia debería haber copiado entero el mensaje de error, porque además de:
- "Error 51: a Numeric expression must appear here"
- "Error 12: Undefined identifier i "

te dice el número de línea donde se produce.
 
Hola, amigos. ¿Qué tal?
¿Será que me pueden ayudar? Tengo un error en el PIC C Compiler.
A
l momento de compilar me arroja el error "File not found" y he buscado y aún no encuentro cómo repararlo.
L
o he intentado desistalando e instalando en varias versiones y en todas me aparece lo mismo.
Quisiera saber si alguien me puede ayudar, pues necesito este gran programa.
El error me aparece con el programa que sea.
1589687881507.png
Gracias...
 
Te está queriendo compilar otro programa. Fijate que en la ventana antes de dar ese error, cual es el nombre. O mirá en la pestaña Proyecto de la derecha

Si antes tenías creado un proyecto, cerraste las pestañas y cargaste un nuevo fuente, te va a querer seguir compilando el anterior.

Andá a Files->CloseAll y volvé a cargar el programa.
 
Última edición:
Atrás
Arriba