INTERRUPCIONES

Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea que está realizando para atender dicho acontecimiento y luego volver al mismpo lugar donde se encontraba realizando alguna operacion antes de la interrupcion... Veamos los comandos que nos ofrece el lenguaje PBP para interactuar con las interrupciones...

ON INTERRUPT GOTO Label

Permite el manejo de las interrupciones del micro controlador por medio de una subrutina PBP .

Existen dos formas de manejar interrupciones usando PBP . La primera es escribir una subrutina de interrupción en lenguaje ensamblador .Esta es la forma de manejar interrupciones con la menor latencia y el menor overhead .Este método se discute más adelante , en la sección avanzada .

El segundo método es escribir un handler ( manejador ) de interrupciones PBP .Es similar a una subrutina PBP , pero termina con un RESUME .

Cuando ocurre una interrupción , se marca con una bandera .Cuando la ejecución de la declaración PBP que se estaba ejecutando termina , el programa salta al handler de interrupciones indicado en Label .Una vez que termina el trabajo del handler , una declaración RESUME envía el programa de vuelta a donde estaba cuando ocurrió la interrupción , tomando todo como lo dejó .

DISABLE y ENABLE permiten que distintas secciones de un programa PBP se ejecuten sin la posibilidad de ser interrumpidas El lugar más notorio para usar DISABLE es justo antes del actual handler de interrupciones . O el handler puede ser colocado antes que la declaración ON INTERRUPT ya que la bandera de interrupciones no se chequea antes del primer ON INTERRUPT en un programa .

Latencia es el tiempo entre el pedido de interrupción y el momento en que se ingresa en el handler de interrupciones .Como las declaraciones de PBP no son reentrantes (p.ej. no se puede ejecutar una declaración mientras se está ejecutando una anterior) , puede existir una latencia considerable hasta que se ingrese a la rutina de interrupciones .

PBP no ingresará al handler BASIC de interrupciones hasta que haya terminado de ejecutar la declaración en curso .Si la declaración es PAUSE ó SERIN , puede demorarse bastante hasta que sea reconocida la interrupción .Se debe diseñar el programa tomando en cuenta esta latencia .Si esta es inaceptable y las interrupciones deben ser manejados más rapidamente , se debe usar una rutina en lenguaje ensamblador .

ON INTERRUPT agregará una instrucción después de cada declaración , para chequear si ocurre ó no una interrupción DISABLE elimina la posibilidad de usar esta instrucción y ENABLE la habilita .Normalmente , las instrucciones adicionales no son un problema , pero programas largos en pequeñas computadoras si lo son .

Se puede usar más de un ON INTERRUPT en un programa :

 

ON INTERRUPT GOTO myint              ´ el handler de interrupciones es myint

INTCON = %10010000                         ´ habilita la interrupción RB0

. . . . . . . .

DISABLE                                              ´ deshabilita las interrupciones en el Handler

Myint : led=1                                         ´ enciende el LED con una interrupción

RESUME                                              ´ vuelve al programa principal

ENABLE                                               ´ habilita las interrupciones después del Handler

 

Para deshabilitar permanentemente las interrupciones ( ó hasta que se necesiten ) , una vez que se usó ON INTERRUPT , coloque INTCON en $80

 

INTCON = $80

ENABLE

ENABLE interrumpe el procesamiento que fue previamente deshabilitado con DISABLE ,siguiendo a esta instrucción.

DISABLE y ENABLE son pseudo-operaciones en el sentido que dan direcciones de compilador, en lugar de producir código. Vea ON INTERRUPT para más información.

 

DISABLE            ‘ Deshabilita interrupciones en el handler

Myint: led = 1      ‘ enciende el LED cuando es interrumpido

Resume              ‘ Vuelve al programa principal

Enable                ‘ ENABLE interrumpe después del handler

DISABLE

DISABLE interrumpe el procesamiento siguiente a la instrucción. Pueden ocurrir otras Interrupciones, pero el manipulador de interrupciones del BASIC en el PBP, no se ejecutará hasta que se encuentre un ENABLE .

DISABLE y ENABLE son pseudo-operaciones en el sentido que dan direcciones de compilador, en lugar de producir código. Vea ON INTERRUPT para más información.

 

DISABLE             ‘ Deshablita interrupciones en el handler

Myint: led = 1       ‘ enciende el LED cuando es interrumpido

Resume               ‘ Vuelve al programa principal

Enable                 ‘ ENABLE interrumpe después del handler

DISABLE INTERRUPT

DISABLE INTERRUPT Se procesa después de esta instrucción. Las interrupciones pueden ocurrir pero no se ejecutarán hasta que un ENABLE o ENABLE INTERRUPT en el programa de PicBasic se encuentra.

DISABLE INTERRUPT (INVALIDE LA INTERRUPCIÓN) y ENABLE INTERRUPT ( PERMITA LA INTERRUPCIÓN )son más como pseudo-ops que dan al compilador directivas, más que generan código.

Vea ON INTERRUPT para más información.

 

DISABLE INTERRUPT           ' Invalide las interrupciones

myint: led = 1                          'encienda el LED con una interrupcion

resume                                    ' retorne al programa principal

enabled interrupt                     ' Permita al programa verificar las interrupciones

ENABLE INTERRUPT

ENABLE INTERRUPT Permite el proceso de la INTERRUPCIÓN que era previamente DISABLEd después de esta instrucción.

DISABLE INTERRUPT Y ENABLE INTERRUPT son pseudo-ops que dan al compilador directivas, más que generan código. Vea ON INTERRUPT para más información.

 

DISABLE INTERRUPT      'Invalide las interrupciones en HANDLER

myint:LED = 1                    ' encienda el LED con interrupcion

resume                               'retorne al programan principal

ENABLE INTERRUPT       ' Permita al programa piloto de las interrupciones

RESUME { Label }

 

Vuelve al lugar del programa que se abandonó , después que termina de procesarse una interrupción . RESUME es similar a RETURN ,pero es usado al final de un handler de interrupciones PBP .

Si se usa el Label opcional , la ejecución del programa va a continuar en este Label y no donde estaba el programa cuando ocurrió la interrupción .En este caso , cualquier otra dirección de retorno , no será accesible .Vea ON INTERRUPT para mayor información .

 

clockint: seconds=seconds+1             ´ cuenta tiempo

RESUME                                            ´ vuelve al programa después de la Interrupción

error: high errorled                              ´ enciende el led de error

RESUME restart                                 ´ vuelve a algun otro lugar