Establecer un pin en PORTA en el PIC18F452 alto: la compilación del código falló

Estoy tratando de escribir un código que establecerá bit0 en PORTA en el PIC18F452 alto si se cumple alguna de las condiciones en las declaraciones IF. Estoy usando el depurador MPLAB ICD2 y el conjunto de herramientas Microchip C18. El código es el siguiente:

#include <p18f452.h>

void main (void)
{
    // array containing vital sign values 
    unsigned char pulseR = 0x32;  // syntax error 
    unsigned char sysP = 0x64;
    unsigned char diasP = 0x26;

    // acceptable limits for vital signs according to relavant heath officials
    unsigned char pulseR_ULimit = 0xA0;
    unsigned char pulseR_LLimit = 0x28;

    unsigned char diastolic_ULimit = 0x5A;
    unsigned char diastolic_LLimit = 0x3C;

    unsigned char systolic_ULimit = 0x8C;
    unsigned char systolic_LLimit = 0x5A;

    TRISAbits.TRISA0 = 0;

    //Comparing obtained values with acceptable limits
    if (sysP < systolic_LLimit || sysP > systolic_ULimit)
    {
        PORTAbits.RA0 = 1;
    }
    else if (diasP < diastolic_LLimit || diasP > diastolic_ULimit ) 
    {
        PORTAbits.RA0 = 1 ;    
    }
    else if (pulseR < pulseR_LLimit || pulseR > pulseR_ULimit ) 
    {
        PORTAbits.RA0 = 1;
    }
    else                 
        PORTAbits.RA0 = 0;
}

Agregado:

La salida de la compilación es la siguiente:

 Debug build of project `C:\Users\Owner\Desktop\School Files\ECNG 3006 2011\Labs\Lab 3\Softare-Hardware Only\Lab3_3.mcp' started.
Preprocessor symbol `__DEBUG' is defined.
Sat Nov 19 13:56:03 2011
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\Users\Owner\Desktop\School Files\ECNG 3006 2011\Labs\Lab 3\Softare-Hardware Only\Lab3_3.mcs".
Clean: Done.
Couldn't locate build tool.  Check tool locations.
----------------------------------------------------------------------
Debug build of project `C:\Users\Owner\Desktop\School Files\ECNG 3006 2011\Labs\Lab 3\Softare-Hardware Only\Lab3_3.mcp' failed.
Preprocessor symbol `__DEBUG' is defined.
Sat Nov 19 13:56:05 2011
----------------------------------------------------------------------
BUILD FAILED

¿Alguien puede ayudarme a solucionar este código?

@D Brown: copie y pegue la salida completa. Ese no es el mensaje de error real. Probablemente estará en la línea debajo de "Ejecutando C:\...etc"
@Oli Glaser: vea las ediciones de las preguntas anteriores.
@D Brown: vea la edición para responder. Déjame saber como va. Si no funciona, puede reemplazar el error anterior con el nuevo.
@Oli Glaser: hice lo que sugeriste en las ediciones, pero sigo teniendo el mismo problema...
@D Brown: verifique que Project -> Select Language Toolsuite esté configurado correctamente en C18. Si es así, es probable que los ejecutables aún no estén configurados correctamente, asegúrese de que los 4 que se muestran en la imagen a continuación estén configurados en la ruta correcta.

Respuestas (2)

Para configurar una salida, debe usar LATAbits.RA0 = x en lugar de PORTAbits.RA0 = x.

Además, intente agregar algunos corchetes. Prueba esto:

#include <p18f452.h>

void main (void)
{
    // array containing vital sign values 
    unsigned char pulseR = 0x32;  // syntax error 
    unsigned char sysP = 0x64;
    unsigned char diasP = 0x26;

    // acceptable limits for vital signs according to relavant heath officials
    unsigned char pulseR_ULimit = 0xA0;
    unsigned char pulseR_LLimit = 0x28;

    unsigned char diastolic_ULimit = 0x5A;
    unsigned char diastolic_LLimit = 0x3C;

    unsigned char systolic_ULimit = 0x8C;
    unsigned char systolic_LLimit = 0x5A;

    TRISAbits.TRISA0 = 0;

    //Comparing obtained values with acceptable limits
    if ((sysP < systolic_LLimit)||(sysP > systolic_ULimit))
    {
        LATAbits.RA0 = 1;
    }
    else if ((diasP < diastolic_LLimit)||(diasP > diastolic_ULimit)) 
    {
        LATAbits.RA0 = 1 ;    
    }
    else if ((pulseR < pulseR_LLimit)||(pulseR > pulseR_ULimit)) 
    {
        LATAbits.RA0 = 1;
    }
    else 
    {                
        LATAbits.RA0 = 0;
    }
}

Ponga el TRISAbits.RA0 = 0;después de la declaración de sus variables (deben declararse al comienzo de las rutinas)
Entonces, justo después unsigned char systolic_LLimit = 0x5A;
, debería compilar bien.

EDITAR: verifique que las opciones de compilación de su proyecto (Proyecto->Opciones de compilación->Proyecto) estén configuradas para el directorio de inclusión correcto. Aquí hay un clip de mi configuración para el último compilador C18 (es posible que tenga que buscar el suyo en su unidad C si está instalado en un lugar diferente o si usa una versión anterior)

Opciones de construcción

EDITAR 2: sí, el archivo de encabezado que está utilizando es el problema. Si observa la estructura de TRISA, puede ver que los bits se denominan TRISAx:

 extern volatile near unsigned char       TRISA; 
extern volatile near struct { 
  unsigned TRISA0:1; 
  unsigned TRISA1:1; 
  unsigned TRISA2:1; 
  unsigned TRISA3:1; 
  unsigned TRISA4:1; 
  unsigned TRISA5:1; 
  unsigned TRISA6:1; 
} TRISAbits; 

Entonces, si lo cambias, TRISAbits.TRISA0 = 0;debería funcionar. Del mismo modo, es posible que deba cambiar otras cosas para cumplir con el archivo de encabezado.
O no cambie nada y simplemente comience a usar el último archivo de encabezado de microchips (debe estar en el directorio del compilador llamado \h (vea la imagen de arriba)

EDIT 3 - "no se puede encontrar la herramienta de compilación"
Esto significa que MPLAB no puede encontrar el ejecutable del compilador. Debe ir a "Proyecto -> Establecer ubicaciones de herramientas de idioma" y configurar correctamente los ejecutables de C18 Toolsuite.
Vea este hilo para una discusión sobre el tema. Este es un fragmento de cómo se ve en mi computadora portátil (tenga en cuenta que la ruta/archivo puede ser diferente en su computadora según la versión que esté usando):

C18 Ubicación

Así que probé su consejo, pero ahora aparece un error que dice: "miembro desconocido 'RA0' en '__tag_24'" en la misma línea TRISAbits.RA0 = 0;, aunque he incluido el archivo de encabezado correspondiente. ¿Podría ayudarme a solucionar este problema?
Lo acabo de probar aquí y compila bien. ¿Tienes el 0 en RA0 correcto? (es decir, un cero numérico) Si eso está bien, entonces puede ser algo con el archivo de encabezado. Trate de usar #include <p18cxxx.h>en su lugar. ¿Qué versión del compilador estás usando?
Sí, es RA0, pero lamentablemente sigo recibiendo el mismo error. Obtuve el archivo de encabezado p18f452 de este enlace ( read.pudn.com/downloads155/sourcecode/embed/685984/h/… ), ¿podría ser el archivo de encabezado que estoy usando el problema?
Ah, claro, ese es el problema: ver editar.
Intenté su segundo cambio y aparece el siguiente error: " C:\Users\Owner\Desktop\School Files\ECNG 3006 2011\Labs\Lab 3\Softare-Hardware Only\Lab3_3.mcp' failed. Preprocessor symbol Se define la compilación de depuración del proyecto __DEBUG". ¿Por qué fallaría?
¿Cómo me desharía de esa directiva de preprocesador? ¿En qué archivo entro?
@DBrown: ¿puede editar su pregunta y pegar el mensaje de error exacto que está recibiendo?
Ver ediciones en cuestión