Вы находитесь на странице: 1из 12

PIC 18F45XX

La Interrupcin externa
1. Caractersticas generales sobre interrupciones (I)
La familia 18F45XX incorpora mltiples fuentes de interrupcin.
Cuando se produce una interrupcin se produce un salto hacia la direccin que indica
el vector de interrupcin.
Cada fuente de interrupcin puede configurarse como
!L"! prioridad #vector $$$$$8h%
&!'! prioridad #vector $$$$18h%
(i no se utili)an las prioridades #*C+,.(-.,/$% todas las interrupciones son
consideradas de alta prioridad.
Cada fuente de interrupcin tiene tres 0its que configuran su funcionamiento
&it de ha0ilitacin #.na0le 0it%1 permite2impide el 3salto4 al vector de interrupcin.
&it de prioridad #-riorit5 0it%1 configura el vector de salto !L"! o &!'!.
&it de 0andera #Flag 0it%1 se pone a uno cuando se produce la interrupcin.
La interrupcin e6terna est7 implementada en los pines *&$1 *&1 5 *&8.
-ara ha0ilitar la int. .6terna en *&$ sin prioridad ha5 que poner a uno los 0its I!" 5
I#$%I! del registro 9,"C+,.
1. Caractersticas generales sobre interrupciones (II)
Las rutinas de atencin a las interrupciones tienen las siguientes limitaciones
,o devuelven ni aceptan par7metros
,o pueden invocarse desde otros puntos del programa
Las varia0les glo0ales que se utilicen se de0en declarar como volatile
La directiva
:pragma interruptlo; nom0re<interrupcion
=efine la rutina de servicio a la interrupcin como de 0a>a prioridad

La directiva
:pragma interrupt nom0re<interrupcion
=efine la interrupcin como alta prioridad

.>emplos de programacin
:pragma interrupt ?ser@igh-riorit59(*Code
void ?ser@igh-riorit59(*Code#%A B
:pragma interruptlo; ?serLo;-riorit59(*Code
void ?serLo;-riorit59(*Code#% AB
&. 'ar()are (e interrupciones
*. +egistro (e con,iguracin I#$C-#
-ara desha0ilitar el control de
prioridades poner a cero el 0it
9-., del registro *C+,
*C+,0its.9-.,/$C
"odas las interrupciones
3saltan4 al vector $$$$$8
Cuando se produce la int.
.6terna se pone a uno su
0andera de interrupcion
9,"C+,0its.9,"$9F/1
-ara ha0ilitar la int. .6terna
9,"C+,0it.9,"$9./1C
9,"C+,0its.D9./1C
4. +egistro (e con,iguracin I#$C-#&
La int. .6terna en *&$ puede
configurarse para activarse
con flanco de su0ida o de
0a>ada.
-ara configurar con cada
flanco de 0a>ada
9,"C+,80its.9,".=D$/$C
-ara configurar con cada
flanco de su0ida
9,"C+,80its.9,".=D./1C
5. Interrupciones en la placa (e peri,.ricos
-ara poder generar una interrupcin por
flanco de 0a>ada
a% -oner el >umper '8 en posicin #&$E.%
0% -ulsar *&$
/. Progra0acin en C18
-ara configurar la interrupcin e6terna *&$ sin prioridades se puede seguir el
siguiente procedimiento
!n la ,uncin 0ain()
=esha0ilitar prioridades. *C+,0its.9-.,/$C
@a0lilitar todas las interrupciones. 9,"C+,0its.D9./1C
@a0ilitar interrupcin en *&$. 9,"C+,0its.9,"$9./1C
Configurar el tipo de flanco #su0ida20a>ada%. 9,"C+,80its.9,".=D$/12$C
-oner a cero la 0andera de control. 9,"C+,0its.9,"$9F/$C

!n la ,uncin (e interrupcin
=esha0ilitar todas las interrupciones. 9,"C+,0its.D9./$C
Duardar el estado del programa principal #si procede%
-rogramar la funcin segn necesidades.
*ecuperar el estado del programa principal #si procede%
-oner a cero la 0andera de control. 9,"C+,0its.9,"$9F/$C
@a0ilitar todas las interrupciones. 9,"C+,0its.D9./1C
1. Progra0a (e e2e0plo
=iseFar un programa que presente un segmento girando en la parte 0a>a del displa5
de la placa de perifGricos a intervalos de H$$ms. Configurar la interrupcin e6terna
en *&$1 generada por flanco de 0a>ada1 para que cuando se produ)ca parpadee la
parte 0a>a del displa5 tres veces a intervalos de 8$$ms. Cuando termine la
interrupcin el segmento de0e seguir girando en la misma posicin donde se
encontra0a.
3olucin (progra0a principal)
3olucin (,uncin (e interrupcin)
3i0ulacin

Вам также может понравиться