Sei sulla pagina 1di 29

Corso introduttivo sui

microcontrollori
A. S. 2007 2008
Programmare i PIC in C
Timers Interrupts
Prerequisiti: Lezione7 Lezione8

Nicola Amoroso
namoroso@mrscuole.net
NA L15

http://www.mrscuole.net/anxapic/
1

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers - Interrupts

I timers e gli Interrupts sono elementi fondamentali per luso e la gestione di un


microcontrollore. Nelle lezioni 7 e 8 abbiamo gi presentato questo elementi e
abbiamo visto degli esempi di gestione in linguaggio assembler. Vedremo ora
esempi di gestione e programmazione in linguaggio C rimandando alle lezioni
indicate per definizioni, indicazioni e suggerimenti.

Dopo semplici richiami vedremo un esercizio illuminante sulluso e la gestione


di questi fondamentali componenti Hardware e software del nostro
microcontrollore.

NA L15

http://www.mrscuole.net/anxapic/
2

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers - Interrupts

I timers sono precisi contatori, che possono essere


configurati per incrementarsi su fronti di segnali
esterni o su fronti di un segnale interno ottenuto dal
clock di sistema, direttamente dallhardware del pic.
La frequenza del segnale con cui il registro viene
incrementato pari a fosc/4 oppure a fosc/4
opportunamente prescalato [fosc/4 diviso per un
multiplo di due (2, 4, 8, 16 etc...)]
Fosc/4 un segnale generato internamente al PIC dal
circuito di clock ed pari alla frequenza di clock
divisa per quattro.
NA L15

http://www.mrscuole.net/anxapic/
3

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers - Interrupts

Gli interrupts sono dei componenti software-hardware, contenuti


allinterno del PIC, in base ai quali il PIC, quando gli arriva un segnale di
interrupt, interrompe immediatamente quello che stava facendo ed esegue
una determinata funzione, detta funzione di interrupt, alla fine di questa
funzione ritorna ad eseguire il codice che stava eseguendo prima della
interruzione.
Volendo fare un paragone con il mondo reale possiamo dire che l'interrupt
rappresenta per il PIC quello che per noi rappresenta ad esempio la
suoneria del telefono.
Per poter ricevere telefonate non dobbiamo preoccuparci di alzare
continuamente la cornetta per vedere se c' qualcuno che vuol parlare con
noi, ma, grazie alla suoneria, possiamo continuare tranquillamente a fare le
nostre faccende in quanto saremo avvisati d questa ogni volta che
qualcuno ci sta chiamando.
Appena sentiamo lo squillo, possiamo decidere di interrompere
momentaneamente le nostre faccende, rispondere al telefono e, una volta
terminata la conversazione, riprendere dal punto in cui avevamo interrotto.

NA L15

http://www.mrscuole.net/anxapic/
4

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers - Interrupts

Il PIC 16F877 ha tre timer individuati come timer0, timer1 e


timer2.
I timer 0 e 2 sono ad 8 bit mentre il timer 1 a 16 bit; ci
implica che i timer 0 e 2 tornano nella condizione iniziale dopo
256 impulsi in ingresso mentre il timer 1 torna nella
condizione iniziale dopo 65536 impulsi in ingresso.
I registri associati ai timer sono ciclici cio dopo aver
raggiunto il valore massimo al successivo impulso
ricominciano il conteggio da zero in fase UP o dal vaore
massimo in fase DOWN.
Es per un registro a 8 bit

254, 255, 0, 1, 2, UP
2, 1, 0, 255, 254, DOWN

Il passaggio per lo zero viene sempre individuato come condizione di overflow


NA L15

http://www.mrscuole.net/anxapic/
5

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers - Interrupts

I registri timer possono essere inizializzati ad un valore


iniziale, al successivo impulso in ingresso il conteggio inizia
dal valore immesso e continua in modo sequenziale.
I timer Tmr0 (8 bit) e Tmr1(16 bit) sono utilizzati per impieghi
generici mentre Tmr2 (8 bit) spesso associato per impieghi
che coinvolgono sezioni Hw del controllore (ad esempio luso
dei pin CPP1 e CPP2 per la generazione di segnali PWM
richiedono luso di questo timer); vedremo in seguito un
opportuno esempio duso.
Il compilatore CCS PicC mediante il Pic wizard facilita
notevolmente luso di questi timer.
NA L15

http://www.mrscuole.net/anxapic/
6

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers - Interrupts

Linterrupt una particolare caratteristica dei microprocessori in generale


che consente di intercettare un evento esterno, interrompere
momentaneamente il programma in corso, eseguire una porzione di
programma specializzata per la gestione dellevento verificatosi e
riprendere lesecuzione del programma principale.

Ci sono infatti eventi che pu far comodo rilevare in un qualsiasi momento


dellesecuzione del programma, come ad esempio larrivo di una
comunicazione seriale, loverflow di un timer, oppure un fronte su di un
pin. In questi casi entrano in gioco gli interrupt: ad un preciso evento
richiesto, il controllore interrompe quello che stava facendo e passa ad una
subroutine di interrupt. Nel caso della seriale, tale subroutine si
incaricher di ricevere correttamente il byte trasmesso dallesterno. Al
termine della routine di interrupt il programma riprende dal punto in cui era
stato lasciato.
NA L15

http://www.mrscuole.net/anxapic/
7

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers - Interrupts

Il PIC16F877 ha fino a 14 sorgenti (Hw-Sw) di interrupt:

il cambiamento di stato sulla linea RB0 (external interrupt);


la fine del conteggio del registro TMR0 (TMR0 Overflow Interrupt);
il cambiamento di stato su una delle linee da RB4 a RB7 (PORTB Change Interrupt);
il cambamento di stato del modulo Comparatore (Comparator Change Interrupt);
interrupt sulla porta parallela (Parallel Slave Port Interrupt);
interrupt sulla porta seriale (USART Interrupt);
Receive Interrupt (Rx interrupt);
Transmit Interrupt (Tx interrupt);
la fine di una conversione A/D (A/D Conversion Complete Interrupt);
interrupt sul modulo LCD (LCD Interrupt);
la fine della scrittura su una locazione EEPROM (Data EEPROM Write Complete Interrupt);
la fine del conteggio del timer TMR1 (Timer1 Overflow Interrupt);
interrupt sul modulo Capture/Compare (CCP Interrupt);
interrupt sulla porta seriale sincrona (SSP Interrupt).

NA L15

http://www.mrscuole.net/anxapic/
8

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers - Interrupts

Vedremo con degli esempi come impiegare luso di


timers e interrupts nella gestione di un sistema
comunque il CCS PicC compiler semplifica
notevolmente le impostazioni, per luso di questi
strumenti, mediante il picC wizard.
Un semplice esempio nelluso del timer0 e del timer1
insieme alla gestione di un interrupt dovuto al
cambiamento di stato del segnale sul pin RB0.

NA L15

http://www.mrscuole.net/anxapic/
9

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

Un trimmer, i cui pin estremi sono collegati tra 5 V e GND, ha il terzo pin (centrale) collegato con
RA0; la tensione in ingresso dei Pin RA0 pu variare tra 0 e 5 V quando il perno centrale del trimmer
viene ruotato tra 0 e 270.
Leggere, convertire e visualizzare su display LCD il valore della tensione ai capi dei trimmer [input pin
RA0] e contemporaneamente far lampeggiare (ON/OFF) un led collegato sul pin RD3 del nostro
microcontrollore. Lintervallo di tempo tra la condizione ON-OFF del led deve essere di circa 500 ms
(0,5 secondi).
Collegato sul pin RB0 del nostro controllore vi un pulsante (switch-Button), normalmente aperto
che se viene premuto deve attivare una routine di interrupt che dopo circa due secondi dalla
pressione del tasto, permette la emissione di un doppio beep da parte di un buzzer autoscillante
collegato dul pin RD2 del nostro microcontrollore.
Sviluppare lesercizio seguendo le semplici fasi di sviluppo:
1.

Analisi del problema, schematizzazione a blocchi (se necessario), con schema elettrico finale operativo

2.

Impostazione del Software e relativo Flow Chart

3.

Codice sorgente in linguaggio C [CCS Pic-C PCWH Compilator]

4.

Simulazione in ambiente Proteus VSM interfaccia ISIS

5.

Presentazione del lavoro finale su demo-Board opportuna (Gp_Mbus . AnxaPic4)

6.

Opportuna documentazione conclusiva

NA L15

http://www.mrscuole.net/anxapic/
10

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

1. Una semplice analisi del problema porta a definire il seguente schema elettrico

NA L15

http://www.mrscuole.net/anxapic/
11

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

Una considerazione circuitale


Dallo schema elettrico riportato si nota la resistenza R5 = 470 in
ingresso al pin RA0, cerchiamo di dare una semplice spiegazione
rimandando ai Data-Shhet del Pic16F877 (sez. ADC) della Microchip
per approfondimenti e ulteriori considerazioni.
In condizioni normali di funzionamento la corrente in ingresso al
modulo ADC del Pic non supera i 500 nA quindi, nel nostro caso, in
condizioni normali la caduta di tensione su R5 non supera i 235
microVolt (470x500 10-9 = 235 10-6 V), valore irrilevante per il normale
funzionamento del sistema.
Se la tensione (per un qualsiasi errore) in ingresso al nostro modulo ADC supera il valore maximo
ammesso (5 V), dei diodi di protezione allinterno del modulo entrano in azione e permettono la
salvaguardia del modulo stesso, se per la corrente in ingresso al modulo supera dei valori limite
ammessi questi diodi potrebbero bruciarsi e viene quindi meno la loro protezione. Microchip consiglia
linserimento di questa resistenza con valori limite non superiore a 1 K per limitare la corrente sui
diodi nel caso di sovratensioni in ingresso al modulo ADC. La stessa Microchip consiglia di non
superare il K per non avere cadute di tensioni rilevanti durante il normale funzionamento. In genere
valori compresi tra 330 e 1 K sono accettabili.

NA L15

http://www.mrscuole.net/anxapic/
12

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

2. Impostazione del Software e relativo Flow Chart


Pseudo funzioni per punti con evidenziazione delle cose da fare

In condizioni di funzionamento normali il sistema deve leggere la tensione in ingresso e


presentare il corrispondente valore su dispaly.
Il lampeggio del led viene controllato mediante la condizione di overflow di un timer (TIMER1 16
bit) che genera un interrupt e la relativa routine controlla lo stato del led variando opportunamente il
livello logico del segnale del pin RD3.
Quando viene premuto il pulsante collegato con il pin RB0, viene attivata una routine di interrupt che
a sua volta attiva linterrupt sulla condizione di overflow di un altro timer del Pic (TIMER0 8 bit).
Questa routine di interrupt collegato con loverflow di TIMER0 genera i due beep di avviso dopo
circa 2 secondi dalla pressione del pulsante collegato su RB0

NA L15

http://www.mrscuole.net/anxapic/
13

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

2. Impostazione del Software e relativo Flow Chart Main function


Pseudo funzioni per punti con evidenziazione delle cose da fare

Main function
1. Start
2. Set system [Canale ADC Abilito timer0 con prescaler opportuno
Abilito timer1 con prescaler opportuno Abilito interrupt su overflow
timer 1 Abilito interrupt su scambiamento stato segnale ingresso RB0]
3. Init LCD
4. Display messaggio iniziale
5. Leggi e converti segnale in ingresso del canale ADC scelto
6. Mostra su display i valori opportuni
7. Continua dal punto 5.

NA L15

http://www.mrscuole.net/anxapic/
14

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

2. Impostazione del Software e relativo Flow Chart Routines di Interrupt


Pseudo funzioni per punti con evidenziazione delle cose da fare

Routine di interrupt: overflow TIMER1 (circa 500 ms)


1. Complementa livello logico del segnale su RD3
2. Esci dalla routine

Routine di interrupt: cambiamento segnale su RB0


1. Disabilita interrupt su RB0 [In questo modo durante la fase di interrupt non viene
intercettato nessun altro cambiamento su RB0]
2. Abilita interrupt su overflow TIMER0 [Da questo punto inizia la fase di conteggio di 2
secondi]
3. Esci dalla routine

NA L15

http://www.mrscuole.net/anxapic/
15

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

2. Impostazione del Software e relativo Flow Chart Routines di Interrupt


Pseudo funzioni per punti con evidenziazione delle cose da fare
In fase di setup supponiamo di impostare loverflow del timer0 per un tempo pari a 65,5 ms; avremo quindi che
dopo 31 condizioni di overflow saranno trascorsi circa 2 secondi (31 x 65,5 10-3 = 2,0305 sec).
Incrementiamo una variabile di tipo Static [Cfr. Lez10-Lez14] per ogni condizione di interrupt; quando questa
variabile sar uguale a 31 saranno trascorsi circa 2 secondi.

Routine di interrupt: overflow TIMER0


(circa 65,5 ms)
1. Incrementa variabile statica: TMR0_Ov ++
2. TMR0_Ov >31 No Salta al punto 3.
2.1 Disabilita interrupt overflow Timer0
2.2 Beep
2.3 Beep
2.4 Riabilita interrupt su variazione segnale
ai capi di RB0 (possiamo intercettare una
nuova pressione del pulsante su RB0)
3. Esci dalla routine

NA L15

http://www.mrscuole.net/anxapic/
16

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

Come accennato nelle precedenti lezioni, alcuni moduli Hardware-Software del nostro
microcontrollore non sono abilitati di default; per attivare il loro funzionamento bisogna
opportunamente abilitarli in fase di setup.
Avevamo gia indicato questa condizione per lADC del nostro controllore e la stesso ribadiamo
per i TIMERS e gli INTERRUPTS dello stesso

Come al solito il CCS Pic Wizard Tool ci aiuta in questa fase di setup

Le abilitazioni necessarie:
1.

Ingresso RA0 come ingresso analogico (Canale 0 ADC)

2.

Timer0 (TMR0) con condizione di overflow pari a 65 ms circa (Prescaler opportuno)

3.

Timer1(TMR1) con condizione di overflow pari a 500 ms circa (Prescaler opportuno)

4.

Interrupt su variazione fronte segnale su RB0 (Int_Ext)

5.

Interrupt su overflow Timer0 (Int_RTCC)

6.

Interrupt su overflow Timer1 (Int_TIMER1)

NA L15

http://www.mrscuole.net/anxapic/
17

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente CCS Pic Wizard Tool General Tab

Impostazioni generali del sistema e relativo codice prodotto

NA L15

http://www.mrscuole.net/anxapic/
18

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente CCS Pic Wizard Tool Timers Tab

Overflow

Prescaler

Prescaler

Overflow

Abilitazione e impostazioni dei timers da utilizzare con opportuno prescaler e


relativo intervallo di tempo di overflow

NA L15

http://www.mrscuole.net/anxapic/
19

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente CCS Pic Wizard Tool Timers Tab Alcune considerazioni

Il clock di sistema uguale a 4 MHz, la frequenza del segnale di clock per i Timers pari a fsys/4 = 1 MHz.
Il Timer0 (RTCC) ha un prescaler pari a 256 abilitato quindi la frequenza del segnale di clock per TMR0
pari a 1/256 = 3,906 KHz il corrispondente periodo sara pari a 1/3906 = 256 s.
Il registro associato al Timer0 ad 8 bit quindi la condizione di overflow la otteniamo dopo 256 impulsi di
clock cio dopo un tempo pari a: 256 x 256 10-6 = 65,5 ms. Ogni volta che si verifica questa condizione
(cio ogni 65,5 ms) viene generato un opportuno segnale di interrupt.

Le stesse considerazioni valgono per il TIMER1, in questo caso per bisogna considerare che il valore del
prescaler pari a 8 e il registro associato al TIMER1 a 16 bit quindi la condizione di overflow avviene dopo
65536 impulsi di clock.
fTMR1 = (fsys/4)/8 = 125 KHz periodo associato = (1/125 103) = 8 s
Intervallo temporale di overflow 65536 x 8 10-6 = 524 ms. Ogni volta che si verifica questa
condizione (cio ogni 524 ms) viene generato un opportuno segnale di interrupt.

NA L15

http://www.mrscuole.net/anxapic/
20

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente CCS Pic Wizard Tool Analog Tab

Abilitazione ADC con opportuno canale (RA0)- LADC viene impostato a 10 bit

NA L15

http://www.mrscuole.net/anxapic/
21

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente CCS Pic Wizard Tool Interrupts Tab

Abilitazione Interrupt-Sono abilitati gli interrupts per condizione di overflow


TIMER0 (RTCC), TIMER1(TIMER1) e segnale in ingresso su RB0 (EXT)

NA L15

http://www.mrscuole.net/anxapic/
22

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente CCS Pic Wizard Tool Il codice generato Sintassi uso Interrupts

Routine di Interrupt overflow


TIMER0
Routine di Interrupt
cambiamento segnale su RB0
Routine di Interrupt overflow
TIMER1

Le routine di Interrupt
vengono dichiarate seguendo
una opportuna sintassi. Ogni
routine deve iniziare con la
opportuna direttiva.
(#int_nome interrupt attivato)

Prima del loro utilizzo bisogna sempre abilitare i corrispondenti registri


di Interrupts. Opportune built-In function del CCS Pic-C compiler ci
agevolano il lavoro.
Oltre alle abilitazioni dei singoli interrupt (flag di attivazione negli
opportuni registri), bisogna sempre attivare il registro globale degli
interrupts; la built-In function enable_interrupts(GLOBAL)
indispensabile per lutilizzo di qualsiasi interrupt.

NA L15

http://www.mrscuole.net/anxapic/
23

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente Il nostro esercizio Parte 1

Il set del sistema e gli opportuni driver per LCD e Buzzer sono inclusi nel
codice sorgente

NA L15

http://www.mrscuole.net/anxapic/
24

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente Il nostro esercizio Parte 2 Le routines di Interrupt

Complemento il valore di vled


Output_bit(LED, vled) Built-In function
In uscita sul pin LED il valore vled

NA L15

http://www.mrscuole.net/anxapic/
25

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente Il nostro esercizio Parte 2 Le routines di Interrupt Considerazioni


Le routine di interrupts sono implementate prima della funzione main(), sono facilmente individuali perch
ogni routine viene dichiarata con opportuna direttiva (#int_nome interrupt attivato).
Il nome della funzione invece libero, nel codice generato mediante il tool CCS Pic Wizard, dopo la opportuna direttiva
viene indicato un nome per la funzione, comunque questo nome pu essere cambiato a proprio piacimento; non
modificare mai la corrispondente direttiva.
Nel nostro esempio abbiamo cambiato i nomi proposti con: 1) RTCC_isr per overflow TIMER0, 2) EXT_intr_RB0
per interrupt su RB0, 3) TIMER1_isr per overflow TIMER1.

Buit-In functions utilizzate per gestione interrupts:


enable_interrupts(INT_xxxx),

disable_interrupts(INT_xxxx)

Abilta o disabilita la intercettazione (quindi la

esecuzione della relativa routine) dellinterrupt corrispondente.


clear_interrupt(INT_xxxx) Disattiva il flag relativo allinterrupt considerato nellopportuno registro degli interrupts.
E sempre buona norma disattivare il flag di interrupt prima della abilitazione di un interrupt, in questo modo siamo
sicuri che la routine di interrupt viene eseguita solo per un fronte di interrupt attuale e non per un fronte precedente che
ha lasciato il corrispondente flag attivo.

NA L15

http://www.mrscuole.net/anxapic/
26

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente Il nostro esercizio Parte 3 Main function

Abilito solo gli interrupt s che servono


in questa fase; altri interrupts li abilito
successivamente.

NA L15

http://www.mrscuole.net/anxapic/
27

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

3. Codice sorgente Il nostro esercizio Parte 4 Librerie per il buzzer della demo-Board

Le funzioni di gestione del buzzer della demo-Board


iniziale su display

NA L15

La presentazione

http://www.mrscuole.net/anxapic/
28

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Programmare i microcontrollori in linguaggio C


Timers Interrupts
Esercizio: uso di TMR0 (Timer0), TMR1 (Timer1) e int_RB0 (Int_EXT Interrupt su RB0)

4. Simulazione con Proteus VSM Ambiente ISIS

file: ADC_IntRB0_TMR0.DSN

NA L15

http://www.mrscuole.net/anxapic/
29

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/