Bonjour , j'ai un probleme lorsque j'essaye de me servir des interruptions INT0 et INT1 (sur PD2 et PD3) dans un meme programme . En compilant j'ai ce message d'erreur :
!E FINISH.o(137): Code address 0x4 already contains a value
!E FINISH.o(137): Code address 0x5 already contains a value
Pourriez vous m'aider un peu a tout prendre en compte ?
Je vous mets ci joint mon programme . Merci d'avance
programme :
#include <iom8535v.h>
#include <macros.h>
#pragma interrupt_handler Y:iv_INT0 Stop:iv_INT1;
void MoteurX(int nbre_pasX);
void MoteurY(int nbre_pasY);
unsigned char Delay(unsigned long a); // Time delay function
void main(void)
{
int i;
DDRC=0xFF;PORTC=0xFF;
DDRA=0xFF;PORTA=0xFF;
DDRB=0xFF;PORTB=0xFF;
SREG=0x80; //Permet l'interruption
MCUCR=0x0A; //interruption sur front descendant
GICR=0xC0; //mask d'interruption
SEI ();
while (1)
{
MoteurX(1);
}
}
void Y() //Fonction d'interruption
{
while(1)
MoteurY(1);
}
void Stop() //Fonction d'interruption
{
PORTA=0x00;
Delay(40000);
}
unsigned char Delay (unsigned long a)
{
unsigned long b;
for(b=0;b<a;b++){};
return 1;
}
void MoteurX (int nbre_pasX) //fonction permettant de controler le deplacement du moteur en X
{
int i;int sensX=1;
if (sensX==1) //Deplacement dans un sens
{
for(i=0;i<nbre_pasX;i++) //Nombre de creneaux et gestion de ces creneaux sur le PORTC broche 0
{
PORTC=0xFA; Delay(30000);
PORTC=0xFB; Delay(30000);
}
}
else //Deplacement dans l'autre
{
for(i=0;i<nbre_pasX;i++)
{
PORTC=0xF8; Delay(30000);
PORTC=0xF9; Delay(30000);
}
}
PORTC=0xFF;
}
void MoteurY (int nbre_pasY) //fonction permettant de controler le deplacement du moteur en Y
{
int i;int sensY=0;
if (sensY==0) //Deplacement dans un sens.
{
for(i=0;i<nbre_pasY;i++) ////Nombre de creneaux et gestion de ces creneaux sur le PORTB broche 0
{
PORTB=0xFA; Delay(30000);
PORTB=0xFB; Delay(30000);
}
}
else //Deplacement dans l'autre sens
{
for(i=0;i<nbre_pasY;i++)
{
PORTB=0xF8; Delay(30000);
PORTB=0xF9; Delay(30000);
}
}
PORTB=0xFF;
}
Deux interruptions sur atm8535
Modérateur : Modérateur
Ok , le probleme a été resolu mais je ne sais meme pas pourquoi . C'etait apparemment un probleme dans la configuration du compilateur . Mais maintenant un autre probleme Dans ma premiere interruption Y , ayant un while(1) je ne sors pas de cette interruption. Comment trouver un moyen simple de sortir de cette interruption si l'autre interruption est demandée (appui sur PD3) . J4essaye de voir un peu avec les flags mais c'est pas encore ca , je dois avoir des petits problemes d'expression . Merci pour l'aide JP en tout cas .