- Ringraziamenti ricevuti 0
Interrupt su timer0
- Tecnica
- Autore della discussione
- Nuovo Utente
-
Less
Di più
14 Anni 1 Settimana fa - 14 Anni 5 Giorni 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.
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 14 Anni 5 Giorni fa da Mauro Laurenti.
Si prega Accesso o Crea un account a partecipare alla conversazione.
14 Anni 5 Giorni 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
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
- Nuovo Utente
-
Less
Di più
- Ringraziamenti ricevuti 0
14 Anni 5 Giorni 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
Mi sono riletto il datassheet e sono riuscito
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
