Interrupción en c

#1
Necesito vuestra ayuda.

estoy programando en c el pic18f4550 y con el MPLAB IDE v8

me he metido a programa una interrupción y cuando compilo me dice esto:

Error [499] ; 0. undefined symbol:
_enable_interrupts(dmx.obj)

supongo que es en las líneas de código:

enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);

creo que me falta agregar un include que contenga esa funcion, me aprece a mi. como soluciono este problema¿ que cual libreria està?

gracias un saludo ...
 
#3
Hola, pues tienes toda la razón. os pido disculpas, ahi va el código

PHP:
/***********************************************************************
** I N C L U D E S **********************************************************/
#include <htc.h>
#include <lcd_84F4550.c>
#include <stdio.h>
#include <stdlib.h>
#include <eeprom_routines.h>

#define INT_RDA                   0x9D20
#define GLOBAL                    0xF2C0


/************************************************************************
*                    Estados protocolo DMX                              *
************************************************************************/

#define       DMX_ESPERA_BYTE              0
#define       DMX_ESPERA_BREAK            1
#define       DMX_ESPERA_START            2
#define       DMX_ESPERA_DATO             3
#define       DMX_RECEPCION_DATOS     4


/************************************************************************
*                    Variables globales y constantes                    *
************************************************************************/

#define TotalCanales          3            // Total canales a almacenar en este caso solo interesan los 3 primeros
int TramaDMX[TotalCanales];          // Trama completa de valores DMX

int CanalDMX;                     // Canal DMX seleccionado para visualizar, de 1 a 512
int DatoDMX;                       // Dato que contiene el canal seleccionado
int DMX_Estado = DMX_ESPERA_BREAK; // Estado de la máquina de estados
int DatoRX;								//	Dato genérico recibido en USART
int DMX_Indice = 0;					// Apuntador a una posición de la trama DMX


union                                               // Estructura para hacer una copia del registro RCSTA
  {
    unsigned char registro;
    struct {
        unsigned char RX9D:1;
        unsigned char OERR:1;
        unsigned char FERR:1;
        unsigned char ADDEN:1;
        unsigned char CREN:1;
        unsigned char SREN:1;
        unsigned char RX9:1;
        unsigned char SPEN:1;
    } bits ;
  }Copia_RCSTA;



#int_rda
void Dato_Recibido_USART(void)
{
	while (RCIF) // ejecutamos mientras haya un dato pendiente de procesar
	{
	 // Hacemos una copia del registro RCSTA porque sus bits cambian de valor
	 // al leer RCREG y modificar CREN
	 Copia_RCSTA.registro = RCSTA;

	 // En RCREG está el dato que acaba de recibir la USART
	 DatoRX = RCREG;

	 // Si se reciben más de 3 bytes sin haberlos procesado, se produce un error
	 // de Overrun. En este caso, se borra el error reiniciando CREN y dejamos
	 // la interrupción preparada para procesar la siguiente trama DMX
	 if (Copia_RCSTA.bits.OERR)
	 {
	   CREN=0;
	   CREN=1;
	   DMX_Estado = DMX_ESPERA_BYTE;
	   return;
	 }

	 // Máquina de estados
	 switch (DMX_Estado)
	 {
	   case DMX_ESPERA_BYTE:	// si estamos en este estado y hay error FRAME
		// es que nos ha pillado en medio de un Byte. Hay que seguir esperando
		// hasta que desaparezca el error.
	     if (!Copia_RCSTA.bits.FERR)
		  		// Ha llegado un byte. Ahora esperaremos la señal Break
	       DMX_Estado = DMX_ESPERA_BREAK;
	     break;


	   case DMX_ESPERA_BREAK:	// estamos esperando la señal Break
	     // Esta señal se identifica porque aparece el error de Frame
	     if (Copia_RCSTA.bits.FERR)
	       // Tras recibir el error de Break, hay que esperar un byte de valor 0
	       if (!DatoRX)
	         DMX_Estado = DMX_ESPERA_START;
	     break;
	   case DMX_ESPERA_START: // ya hemos recibido el Break y ahora hay que
	   	 // esperar un Byte con valor 0, que será la señal de Start
	     // Mientras tanto, si recibimos un error de Frame, hay que volver a
	     // empezar para recibir la señal de comienzo de trama.
	     if (Copia_RCSTA.bits.FERR)
	         DMX_Estado = DMX_ESPERA_BYTE;
	     else {
	       if (!DatoRX)
	       {
	         // Llegados a este punto, ya hemos recibido el Byte Start=0
	         // y comenzamos la trama de valores DMX.
	         DMX_Indice = 0;
	         DMX_Estado = DMX_RECEPCION_DATOS;
	       } else
            // Si el dato recibido no es 0, volvemos a empezar
	         DMX_Estado = DMX_ESPERA_BREAK;
	     }
	     break;
	   case DMX_RECEPCION_DATOS:
	     // En este estado estamos recibiendo la trama de datos DMX
        // Si se detecta un error de Frame es que ha habido un error y estamos
        // al principio
	     if (Copia_RCSTA.bits.FERR)
	       if (!DatoRX)
	         DMX_Estado = DMX_ESPERA_START;
	       else
	         DMX_Estado = DMX_ESPERA_BYTE;
	     else
	     {
	       // Almacenamos el dato recibido en nuestro array
	       TramaDMX[DMX_Indice++] = DatoRX;

	       // Si ha llegado al final de la capacidad, cambiamos al estado de espera
          // de nueva trama
	       if (DMX_Indice >= TotalCanales)
	         DMX_Estado = DMX_ESPERA_BREAK;
	     }
	     break;
   }
}
return;
}

void main(void) 
{ 

	
	
	TRISA=0;
	TRISB=0;
	TRISC=0;
	TRISD=0;
	TRISE=0;

	//configurar el USB-RS232
	TRISC7=1;
	TRISC6=1;

   // Configuración de la USART
   BRGH=1;           // Alta velocidad seleccionada.
   BRG16=1;          // Baudrate de 16 bits
   SYNC=0;           // Seleccionamos transmisión asíncrona
   SPBRG=7;          // A 8MHz representa Baudios = 250KHz
   SPBRGH=0;
   RX9=1;            // Activada la recepción a 9 bits
   SREN=0;           // Desactivada la recepción de un sólo byte
   ADDEN=0;          // Desactivada la autodetección de dirección
   FERR=0;           // No hay error de frame
   OERR=0;           // No hay error de overrun
   SPEN=1;           // USART activada
   CREN=1;           // Recepción activada
	
	CanalDMX=1;
	enable_interrupts(INT_RDA);
	enable_interrupts(GLOBAL);

	while(1)
	{

	} 
}


/************************************************************************
************************************************************************/
y este es el error

Código:
Executing: "C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\bin\picc18.exe" --pass1 "C:\Documents and Settings\miguel\Escritorio\Electronica\Curso electronica\Copia de Caja UDB-DMX\dmx.c" -q --chip=18F4550 -P --runtime=default,+clear,+init,-keep,-download,+stackwarn,-config,+clib,+plib --opt=default,+asm,-debug,-speed,+space,9 --warn=0 -D__DEBUG=1 -Blarge --double=24 --float=24 --cp=16 --addrqual=ignore -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" 
Warning [111] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic.h; 18.30 redefining preprocessor macro "CLRWDT" (C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18.h: 38)
Warning [111] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic.h; 19.29 redefining preprocessor macro "SLEEP" (C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18.h: 44)
Warning [111] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic.h; 23.21 redefining preprocessor macro "NOP" (C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18.h: 40)
Warning [111] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic.h; 41.17 redefining preprocessor macro "__IDLOC" (C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18.h: 55)
Warning [107] C:\Documents and Settings\miguel\Escritorio\Electronica\Curso electronica\Copia de Caja UDB-DMX\dmx.c; 59.8 illegal # directive "int_rda"
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 75.6 variable "RA3" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5144)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 77.6 variable "RA1" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5140)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 80.6 variable "RA0" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5138)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 83.16 variable "RB7" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5168)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 84.6 variable "RA0" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5138)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 139.8 variable "RA1" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5140)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 141.9 variable "RA3" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5144)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 145.8 variable "RA0" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5138)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 147.8 variable "RA0" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5138)
Warning [361] C:\Documents and Settings\miguel\Escritorio\Electronica\Curso electronica\Copia de Caja UDB-DMX\dmx.c; 174.1 function declared implicit int
Executing: "C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\bin\picc18.exe" -odmx.cof -mdmx.map --summary=default,-psect,-class,+mem,-hex --output=default,-inhx032 dmx.p1 --chip=18F4550 -P --runtime=default,+clear,+init,-keep,-download,+stackwarn,-config,+clib,+plib --opt=default,+asm,-debug,-speed,+space,9 --warn=0 -D__DEBUG=1 -Blarge --double=24 --float=24 --cp=16 --addrqual=ignore -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" 
(1273) Omniscient Code Generation not available in Lite mode (warning)
HI-TECH C Compiler for PIC18 MCUs (Lite Mode)  V9.80
Copyright (C) 2011 Microchip Technology Inc.
Advisory[1233] Employing 18F4550 errata work-arounds:
Advisory[1234]  * Corrupted fast interrupt shadow registers
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 75. variable "_RA3" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5144)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 77. variable "_RA1" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5140)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 80. variable "_RA0" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5138)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 83. variable "_RB7" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5168)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 84. variable "_RA0" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5138)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 139. variable "_RA1" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5140)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 141. variable "_RA3" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5144)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 145. variable "_RA0" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5138)
Warning [1385] C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\lcd_84F4550.c; 147. variable "_RA0" is deprecated (declared at C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\include\pic18f4550.h:5138)
Error   [499] ; 0. undefined symbol:
	_enable_interrupts(dmx.obj) 

********** Build failed! **********

gracias
 
Última edición por un moderador:

Temas similares

Arriba