@ALFREDOSKY y @KILLERJC.
Si, no se por cuál razón daba ese error si no tenía declarada senales en la función interrup.c, en cualquier caso cambié las definiciones como sigue:
la declaración "SENALES senales" la cambié a interrup.c y ya no da error, además le quité el nombre a la estructura para no usar tantos nombres al llamar a cualquier miembro de la union-estructura; ahora los archivos lucen como sigue:
el archivo "interrup.c" es el siguiente:
#include "interrup.h"
#include "globales.h"
SENALES senales; /* Declaración de la variable senales */
//senales.tecla = 0; /* para usarla en la interrupción que */
/* sea necesaria. */
void Inicia_Interr(void) /* Función para configurar e iniciar
* las fuentes de interrupción. */
{
IEC0bits.T3IE = 1; /* Se habilita la interrupción */
/* para el timer de 32 bits, se */
IPC2bits.T3IP = 1; /* establece la prioridad de la */
IFS0bits.T3IF = 0; /* interrupción en 1 y se borra la */
/* la bandera del timer de 32 */
/* bits. */
IEC1bits.CNIE = 1; /* Se habilitan los pines CN62 a CN65 */
IPC4bits.CNIP = 2; /* para detectar el cambio de estado, */
IFS1bits.CNIF = 0; /* esto es, los Puerto E,4 a Puerto */
CNEN4 = 0xc000; /* E,7 para detectar la tecla */
CNEN5 = 0x0003; /* presionada. También se configuró la*/
/* prioridad de la interrupción por */
/* notificación de cambio de estado en*/
/* 2, un nivel más alta que la del */
/* temporizador. */
}
/* Funciones para el manejo de interrupciones */
void __attribute__((interrupt(no_auto_psv))) _T1Interrupt(void)/* Función para*/
{ /* manejo de la interrupción del */
/* timer 1, para usarlo como ciclo de */
IFS0bits.T1IF =0; /* trabajo del sistema. */
}
void __attribute__((interrupt(no_auto_psv))) _T3Interrupt(void)/* Función para*/
{ /* manejo de la interrupción del */
T2CONbits.TON = 0; /* timer 32 para usarlo como */
IFS0bits.T3IF = 0; /* temporizador de 32 bits. */
}
void __attribute__((interrupt(no_auto_psv))) _CNInterrupt(void)/* Función para*/
{ /* el manejo de la interrupción por */
//senales.tecla ^= senales.tecla; /* cambio de estado en los terminales */
/* habilitados para este tipo de */
/* interrupción. Cada vez que entra */
IFS1bits.CNIF = 0; /* conmuta la bandera de tecla */
/* presionada. La intención de esto es*/
/* chequear si */
}
el archivo "interrup.h" es como sigue:
#ifndef INTERRUP_H
#define INTERRUP_H
#include <xc.h>
#include "globales.h"
/* Definición de constantes a usar en las interrupciones. */
void Inicia_Interr(void); /* Prototipo de función para configurar e
* iniciar las fuentes de interrupción. */
/* Prototipos de función para manejar las fuentes de interrupción */
void __attribute__((interrupt(no_auto_psv))) _T1Interrupt(void);/* Prototipo de
* función para manejar la
* interrupción del timer 1. */
void __attribute__((interrupt(no_auto_psv))) _T2Interrupt(void);/* Prototipo de
* función para manejar la
* interrupción del timer 2. */
void __attribute__((interrupt(no_auto_psv))) _CNInterrupt(void);/* Prototipo de
* función para manejar la
* interrupción por notificación
* de cambio en los pines
* seleccionados. */
#endif /* INTERRUP_H */
sin embargo cuando intento inicializar el miembro de la unión estructura que me interesa de la siguiente manera: "senales.tecla = 0;" da el siguiente error:
interrup.c:6:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
y ese error se presenta justo en la línea que tiene la inicialización del miembro "senales.tecla", es por eso que tengo esa línea comentada aunque ya tengo declarada la variable compuesta una línea más arriba.
Por qué me da este error?, estoy aprendiendo y aunque estoy leyendo todo lo que consigo por ahí aún no comprendo qué estoy haciendo mal en este caso.