Questo sito utilizza cookie, anche di terze parti, per migliorare la tua esperienza e offrire servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie vai alla sezioneCookie Policy

Interrupt con Timer0

Ultimo aggiornamento: 31/07/2015

Interrupt con Timer0

Un interrupt (utilizzando il timer interno del picmicro) puo' essere considerato un metodo semplice per eseguire una routine all'interno di un programma sistematicamente. Tale caratteristica risulta essere molto importante e comoda quando, ad esempio, si deve mostrare un valore su di un display oppure quando si ha la necessità di controllare qualcosa durante l'esecuzione del programma interno al picmicro.

 Naturalmente, in questi casi, sarà necessario settare in modo appropriato one dei timers disponibili ed abilitare la funzione di interrutp del pic. Tale possibilità è gestita, come al solito, da due registri: INTCON e OPTION_REG.

OPTION_REG: è un registro ad 8 bits utilizzato per controllare il timer0, il prescaler, settare l'interrupt ed abilitare o meno le resistenze di pull-up interne alla porta:

option reg interrupt

 

Bit7: abilita (0) o disabilita (1) i resistori di pull-up
Bit6: scelta del fronte: salita (1) o discesa (0). Fig. a dx;
Bit5: impulso esterno (su RA4) (if 1) o interno Fosc/4 (if 0);
Bit4: incremento del timr0 in base a da-alto-a-basso (se 1) o da basso-a-alto (se 0);
Bit3: Prescaler. Assegnato al Watctdogtimer (se 1) o al timer0 (se 0);
Bits 2,1,0: Setta il prescaler.

  fronte salita

 
L'altro registro da settare riguarda il Registro di controllo dell'interrupt. Deve essere opportunamente settato considerando:

 

intcon

 

Bit7: Abilita (1)/disabilita (0) gli interrupts
Bit6: Abilita (1)/disabilita (0) interrupts periferici
Bit5: Abilita (1)/disabilita (0) interrupt su TMR0
Bit4: Abilita (1)/disabilita (0) interrupt su RB0/INT
Bit3: Abilita (1)/disabilita (0) interrupt basati sul cambio di stato della PORTB
Bit2: risultato: overflow di TMR0
Bit1: interrupt su RB0/INT  avvenuto (1)
Bit0: risultato: (1) quando un qualsiasi pin della PORTB ha cambiato di stato.

Dovrebbe essere chiaro ora che qualora, ad esempio, si desideri attivare l'interrupt basato sul Timer0 si dovranno predisporre i due registri in questo modo:


OPTION_REG = 0x83 or (0b10000011) disabilita i resistori di pull-up e setta il prescaler ad 1/16
INTCON = 0xA0 or (0b10100000) Abilita l'interrupt su TMR0 come desiderato (ricordando che il timer0 è un timer0 è ad 8 bits (0-FF, 0-255)) .


Usando il Mikroc, quindi, dovrebbe essere facile ora attivare e gestire questa forma di interrupt:

....

TRISA = 0;
TRISB = 0;
TMR0 = 0;
OPTION_REG = 0x83;
INTCON = 0xA0;

void interrupt() {
....                                             //routine da essere eseguita periodicamente
TMR0 = 0;                                  //timer reset
INTCON = 0x0b00100000;           //Intcon Bit5 reset (T0IE)
}

void main  (){
.....
.....
}

Diritti riservati Cuteminds.com 2008-2015. Tutti i marchi riportati sono detenuti dai legittimi proprietari. Tutto il materiale e` liberamente utilizzabile ma non per scopi commerciali. Non si assume alcuna responsabilita` sul materiale pubblicato per eventuali danni diretti o indiretti che possano derivare dall`utilizzo di schemi, progetti o altro materiale presente nel sito. Inviare una mail a: remove-admin@cuteminds.com (contenuti) remove-webmaster@cuteminds.com (webserver) per domande e/o suggerimenti.