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){
}
}