Bonjour,
voila, j'ai un soucis, j'utilise un PIC18F6722, et j'utilise une source externe pour le Timer1. Il s'agit d'une sortie 32Khz de ma RTCC DS1306. Elle est cablée sur le port RC0/T1OSO.
Dans mon programme, j'initialise bien mon timer:
Et voila ma routine d'IT:Code:T1CON = 0b10000110; // Initialisation timer1 - 16bits Timer/Ext source T1OSO TMR1H = 0x80; // Fixe la valeur du registre TMR1H TMR1L = 0x00; // Fixe la valeur du registre TMR1L T1CONbits.TMR1ON = 1; // Enable Timer 1 PIR1bits.TMR1IF = 0; // Initialise le flag TMR0IF d'IT du Timer 1 PIE1bits.TMR1IE = 1; // Autorise les interruptions de TMR1 RCONbits.IPEN = 1; // Activation des niveaux de priorités INTCONbits.GIE = 1; // Autorise toutes les interruptions
Et malheureusement, je n'accède qu'une seule fois a la routine d'interruption, et j'ai beau remettre le flag TMR1IF à 0, même s'il repasse à 1, il ne va pas en interruption...Code:#pragma interrupt HighInterrupt void HighInterruptCde(void) { if (RCONbits.TO == 0) // Test du drapeau d'IT du WDT { _asm RESET _endasm } if (PIE1bits.TMR1IE == 1) { if(PIR1bits.TMR1IF == 1) { if (BL_POWERON == 1) { BL_POWERON = 0; } else if (BL_POWERON == 0) { BL_POWERON = 1; } TMR1H = 0x80; // Fixe la valeur du registre TMR1H TMR1L = 0x00; // Fixe la valeur du registre TMR1L PIR1bits.TMR1IF = 0; } } } #pragma code high_vector=0x08 void HighInterrupt(void) { _asm goto HighInterruptCde _endasm } #pragma code
Je ne comprend pas!! Auriez vous une explication?
Merci d'avance,
PS: J'ai vu qu'il y avait une Errata sheet sur le Timer1 pour sur composant, mais je ne comprend pas trop...
http://ww1.microchip.com/downloads/e...Doc/80329B.pdf
Merci d'avance
-----