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