Lezione 5

Step 3/3

Passo precedenteInizio lezionePasso successivo

Esempio pratico di gestione di più interrupt

 

Vediamo ora come gestire più interrupt contemporaneamente.

Utilizzando sempre come base il source precedente INTRB.ASM proviamo a gestire anche l'interrupt sulla fine conteggio del registro TMR0. Ovvero facciamo lampeggiare il LED 3 in corrispondenza di ogni fine conteggio di TMR0.

Il source da utilizzare è DBLINT.ASM.

Compiliamo e scarichiamo il programma DBLINT.ASM nella scheda PicTech e vediamo che oltre a LED 1 che lampeggia con la solita frequenza, c'é il LED 3 che lampeggia contemporaneamente con una frequenza più elevata.

Premendo un tasto qualsiasi, inoltre, otteniamo la solita accensione per tre cicli del LED 2. L'effetto finale che otteniamo è l'esecuzione di tre compiti ad una velocità tale da sembrare in esecuzione parallela.

Analizziamo ora il source DBLINT.ASM.

Le modifiche maggiori riguardano l'interrupt handler all'inizio del quale viene effettuato un controllo su quale evento abbia generato l'interrupt. Con le istruzioni:

	btfsc	INTCON,T0IF
	goto	IntT0IF
	btfsc	INTCON,RBIF
	goto	IntRBIF 

viene controllato il flag T0IF e RBIF per vedere rispettivamente se l'evento che ha scatenato l'interrupt proviene dal registro TMR0 o dalle porta RB4-RB7. Quindi vengono lanciate in esecuzione le relative subroutine di gestione a partire dalle label IntT0IF e IntRBIF.

Prima di ridare il controllo al programma principale vengono azzerati i flag T0IF e RBIF assicurarsi che i successivi eventi possano scaturire nuovamente gli interrupt.

 
Home page

PICPOINT, SXPOINT and ELETTROSHOP (C) 1997/98 by Andrea Galizia
For comments on this web site, write to webmaster@picpoint.com
Web design by Tiziano Galizia

Pic by example (c) 1997/98 by Sergio Tanzilli & Tiziano Galizia