Programation PIC18F4520 interruption

Fermé
houss13 Messages postés 1 Date d'inscription mercredi 17 février 2016 Statut Membre Dernière intervention 18 février 2016 - 18 févr. 2016 à 16:34
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 20 févr. 2016 à 22:13
bonjour,
je commence la programmation sur microcontrôleur. je souhaite réaliser une interruption sur l'UART en réception le problème c'est que mon code ne fonctionne pas correctement. je ne vois vraiment pas d'ou vient le problème pourtant il me semble avoir comprit le principe et j'ai du relire la datasheet au moins 20 fois. Mon code es le suivant pour un PIC18F4520:



void interrupt ()
{
if( (INTCON.PEIE == 1) && (PIR1.RCIF == 1))
{
LATA.LATA4=0; //eteindre une led
delay_ms(300);
LATA.LATA4=1; //allumer une led
delay_ms(300);
PIR1.RCIF = 0;
}


}

void main() {

int a = 0;

ADCON0 = 0b00111100;
ADCON1 = 0b00001111;
TRISA = 0b11001111;
LATA = 0b00000000;
TRISB = 0b11000000;
TRISC = 0b10010100;
TRISD = 0b11111111;
TRISE = 0b000;
LATE = 0b000;
LATC = 0b01000011;
UART1_Init(9600);
delay_ms(500) ;
OSCCON.SCS1 =0;
OSCCON.SCS0= 0;
PIE1.RCIE= 1;
PIE1.TXIE= 0;
RCON.IPEN= 0;
INTCON.GIE= 1;
INTCON.PEIE= 1;
/*
TXSTA.TXEN= 1;
RCSTA.SPEN = 1;
RCSTA.CREN= 1;
  • /

while(1)
{
/*if(PIE1.RCIE == 0)
PIE1.RCIE= 1;*/

LATE.LATE2=1; //allumer une led
LATA.LATA4=1; //allumer une led
delay_ms(1000);
LATE.LATE2=0; //eteindre une led
delay_ms(1000);
}
}

l`´interruption a lieu mais le programme ne sort pas de celle si il bloque dans la routine a l'interrieur

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
20 févr. 2016 à 22:13
Bonjour,

Je ne connais pas du tout le PIC.
En lisant le code, PIR1.RCIF en lecture doit signaler une interruption UART, et en écriture à 0 acquitte l'interruption.

Ce qui me surprend est l'appel de delai_ms(), sous interruption de nombreuses fonctions sont interdites. Et les seules attentes possibles sont en nano ou micro-secondes jamais en milli! je lèverai ces fonctions pour essayer.
0