Interrupt su timer0

  • Tecnica
  • Autore della discussione
  • Visitatori
  • Visitatori
12 Anni 7 Mesi fa - 12 Anni 7 Mesi fa #1 da Tecnica
Interrupt su timer0 è stato creato da Tecnica
Buongiorno a tutti, sto provando a fare lampeggiare il classico led con l'ausilio degli interrupt su timer0.
Ovviamente ho fatto tutti i settaggi che servono "spero" infatti di seguito vi posto il codice perchè sto led non ne vuole sapere di lampeggiare....
Qualcuno mi sa aiutare???
Grazie.
Code:
#include <p18f2550.h> #include <delays.h> #include <timers.h> #pragma config FOSC = HSPLL_HS #pragma config IESO= ON #pragma config WDT = OFF #pragma config LVP = OFF #pragma config PBADEN = OFF //OSC = HSPLL_HS Impostato per lavorare ad alta frequenza CON PLL ATTIVATO //PLL = attivato la divisione //WDT = OFF Disabilito il watchdog timer //LVP = OFF Disabilito programmazione LVP //PBADEN = OFF Disabilito gli ingressi analogici //PLLDIV1= divisione PLL //Impostazione per bassa priorità void Low_Int_Event (void); #pragma code low_vector=0x18 void low_interrupt (void){ //salto per la gestione dell'interrupt a bassa priorità _asm GOTO Low_Int_Event _endasm; } #pragma code #pragma interruptlow Low_Int_Event //Funzione per la gestione dell'interrupt a bassa priorità void Low_Int_Event (void){ // controllo che l'interrupt sia stato generato dal timer0 if(INTCONbits.TMR0IF==1){ PORTBbits.RB2=~PORTbits.RB2; INTCONbits.TMR0IF=0; } } void main (void){ //Abilitazione oscilatore interno OSCTUNEbits.INTSRC=1; OSCTUNEbits.TUN4=0; OSCTUNEbits.TUN3=1; OSCTUNEbits.TUN2=1; OSCTUNEbits.TUN1=1; OSCTUNEbits.TUN0=1; OSCCONbits.IRCF2=0; OSCCONbits.IRCF1=0; OSCCONbits.IRCF0=1; OSCCONbits.IOFS=1; OSCCONbits.SCS1=0; OSCCONbits.SCS0=0; //Abilitazione TIMER0 T0CONbits.TMR0ON=1; //abilito il timer0 T0CONbits.T08BIT=1; // lo configuro a 16 bit T0CONbits.T0CS=0; //clock interno T0CONbits.T0SE=0; T0CONbits.PSA=0; // assegno il prescaler al timer0 T0CONbits.T0PS2=1; //valore di prescaler 1:32 T0CONbits.T0PS1=0; //valore di prescaler 1:32 T0CONbits.T0PS0=0; //valore di prescaler 1:32 TMR0L=11; // sistema abilitato a bassa priorità TMR0H=1000; // sistema non abilitato all'alta priorità INTCONbits.TMR0IE=1; //interruzioni abilitate INTCONbits.TMR0IF=1; // abilito la visualizzazione dell'evento sul timer1 INTCON2bits.TMR0IP=0; // abilito per bassa priorità INTCONbits.GIE=1; //Interrupt globali INTCONbits.PEIE=1; //abilito gli interrupt periferici INTCONbits.TMR0IE=1; //abilito gli interrupt su timer0 INTCONbits.INT0IE=0; //disabilito gli interrupt esterni INTCONbits.RBIE=0; //disabilito gli interrupt su porte B INTCONbits.INT0IF=1; //avvenuto interruzione interna INTCONbits.RBIF=0; //no su Pin rb7 o rb4 RCONbits.IPEN=1; //priorità di interruzione // Imposto PORTA tutti ingressi TRISA = 0b11111111; ADCON1= 0b11111111;//Imposto come 1/0 tutti i pin del lato A, avrei potuto anche impostarne uno solo. // Imposto PORTB tutti ingressi TRISB = 0b11111000; // Imposto PORTC tutti ingressi TRISC = 0b11111111; //Dico al Pin RA0 che il suo stato se premuto è uguale a 1 cosi il Pin del LED RB0 si attiva if(PORTAbits.RA0==1){ PORTBbits.RB0=0; } else {PORTBbits.RB0=1; } if(PORTAbits.RA1==1){ PORTBbits.RB1=0; } else{PORTBbits.RB1=1;} while (1){ } }
Ultima Modifica 12 Anni 7 Mesi fa da Mauro Laurenti.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
12 Anni 7 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Interrupt su timer0
Ciao Tecnica,

non ho controllato tutto ma vedo che fai un uso improprio di alcuni bit (IF bit).
Ti consiglio di far riferimento all'esempio del testo C18 Step by Step (capitolo VIII) e modificarlo in base alle esigenze.
L'esempio del testo e' molto simile a quello che vuoi fare tu.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Tecnica
  • Autore della discussione
  • Visitatori
  • Visitatori
12 Anni 7 Mesi fa #3 da Tecnica
Risposta da Tecnica al topic Re: Interrupt su timer0
Ti ringrazio per la risposta ma hp già risolto
Mi sono riletto il datassheet e sono riuscito

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi