Progetti

   

Sponsor

   

Servizi

   

Sponsor OurPCB  

   
Benvenuto, Ospite
Nome utente: Password: Ricordami

ARGOMENTO: Interrupt su timer0

Interrupt su timer0 9 Anni 3 Mesi fa #1

  • Tecnica
  • Avatar di 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.
#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: 9 Anni 3 Mesi fa da Mauro Laurenti.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re: Interrupt su timer0 9 Anni 3 Mesi fa #2

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Offline
  • Moderatore
  • Messaggi: 4682
  • Ringraziamenti ricevuti 561
  • Karma: 52
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
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Re: Interrupt su timer0 9 Anni 3 Mesi fa #3

  • Tecnica
  • Avatar di Tecnica
Ti ringrazio per la risposta ma hp già risolto
Mi sono riletto il datassheet e sono riuscito
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Moderatori: Mauro Laurenti, Matteo Garia
Powered by Forum Kunena
   
© LaurTec 2006-2021