Diferencia entre revisiones de «Discusión:KBI (Keyboard interrupts) - MC9S08QE128»

De Wikitronica
Saltar a: navegación, buscar
(Página blanqueada)
Línea 1: Línea 1:
   
 
== Efecto rebote ==
 
  
 
El microprocesador para una persona es sumamente rápido, nosotros no somos capaces de percibir la ejecución de las instrucciones en tiempo real, por esto,  cuando se habilitan las encuestas o  interrupciones por teclado, puede ocurrir un fenómeno llamado rebote en el cual se acciona un botón y el micro observa varios flancos, lo que ocasiona una respuesta extraña por parte de este (o bien puede activarse varias veces sin que uno logre observarlo o parecer que no se activa).
 
 
=== Rebote en interrupciones por teclado ===
 
                                                                                                                                                                                                                                                                                                                                                   
 
 
Para solucionar este problema es necesario, una vez que se activa la interrupción, colocar un tiempo de espera y luego volver a evaluar el estado de la bandera de interrupción, así se puede asegurar que los flancos ya no forman parte del accionamiento del botón anterior. Para esto se puede utilizar cualquiera de los Timers disponibles en el micro. A continuación se presentan dos ejemplos de rutinas para el tiempo de espera luego de accionar algún botón.
 
 
==== Ejemplo con RTC ====
 
 
Es necesario configurar el RTC para un tiempo mayor a 50ms, sin activar la interrupción de este. Para el ejemplo RTCLKS= #%00,  RTCPS= #%1011.
 
 
Reloj: 
 
    LDA #$06
 
    STA RTCMOD
 
 
 
Espera: 
 
    LDA RTCCNT
 
    CMP RTCMOD
 
    BNE Espera
 
 
Una vez culmina el tiempo de espera el programador puede limpiar la bandera de interrupción y salirse de esta o puede colocar la rutina reloj al principio de la interrupción, todo depende de la aplicación.
 
 
Para aumentar el rebote solo es necesario disminuir el tiempo de espera, si se considera que aún se observa rebote con ese tiempo de espera sólo es necesario incrementar el valor del módulo.
 
 
 
==== Ejemplo con un contador ====
 
 
Para utilizar este segmento de código es necesario inicializar las variables cnt y cnt1
 
 
Reloj:
 
    LDA #$00
 
    STA cnt
 
    STA cnt1
 
Espera:
 
    INC cnt
 
    BEQ Espera1
 
    BRA Espera 
 
Espera1:
 
    INC cnt1
 
    LDA #$0F
 
    CBEQ cnt1, Salir
 
    BRA Espera1 
 
 
Salir debe llevar al programa al flujo normal del código.
 
 
 
== Simulación de interrupciones por teclado ==
 
 
Para simular una interrupción por teclado, una vez que se está simulando un programa, se debe seleccionar arriba y a la izquierda la pestaña que dice HCS08FCS -> Port Pins Module -> Set Input Pin Levels (INPUTS).
 
 
[[Archivo:Simulación de interrupción por teclado.png|center]]
 
 
[[Image:Simulated Ports Inputs.png|thumb|widthpx| Cuadro para la simulación de los puertos de entrada del microprocesador]]
 
 
Aparecerá un recuadro llamado Simulated Port Inputs, en este todas las entradas aparecerán en alto, para simular la interrupción se coloca en bajo el pin deseado según el mapeo de pines del módulo del KBIx.
 
En la tabla mostrada se observa el valor que se debe introducir para simular la interrupción correcta.
 
 
{| class="wikitable" border="1"
 
|+
 
! Puerto que se modifica !! Valor para activar la interrupción
 
|-
 
| PTA2 || #$FB
 
|-
 
| PTA3 || #$F7
 
|-
 
| PTD2 || #$FB
 
|-
 
| PTD3 || #$F7
 
|}
 
 
 
Una vez que se entra en la interrupción se debe reestablecer el valor predeterminado del pin en el recuadro Simulated Port Inputs, a fin de poder accionar de nuevo la interrupción en un futuro. Recuerde que para hacer uso de estas interrupciones es necesario que primero se configuren en el programa.
 

Revisión del 14:32 28 mar 2013

Contributors

LuisiVelas, Racuna