Pulsado simultáneo de dos botones con MC9S08QG8

Hola,

Estoy aprendiendo a programar un MC9S08QG8 de Freescale y quiero hacer un pulsado simultáneo (tipo Ctrl+F4, Ctrl+C, Ctrl+V... espero que se entienda) de dos botones, es decir, primero un botón (Ctrl) y mientras mantengo pulsado el primer botón, pulsar otro (F4).

El problema es que cuando pulso el primero entra en la interrupción de teclado (KBI), pero no detecta más botones pulsados hasta que todos los botones vuelven al estado habitual, lo que me complica la idea de hacerlo así.

  1. ¿Es posible hacerlo?
  2. ¿Es una limitación de sólo algunos micros o ocurre en todos?

Gracias de antemano!!
 
Última edición:
Si lo haces en assembler podés hacer una rutina de la siguiente manera:

Suponete que llamas a un pin Ctrl y a otro PTA:

Una vez que se oprima Ctrl que salte a una rutina donde chequee el estado de PTA. En caso de que no esté presionado, no hace nada. En caso de que esté presionado, hace la acción correspondiente y retorna de la subrutina.
Una vez chequeado esto debe chequear que todavía esté presionado Ctrl, si lo está comienza la rutina de nuevo, si no lo está retorna de la subrutina.

PD: recordá que con este tipo de subrutinas tenes que poner delays para evitar los rebotes de los pulsadores.

Saludos
 
Si lo haces en assembler podés hacer una rutina de la siguiente manera:

Suponete que llamas a un pin Ctrl y a otro PTA:

Una vez que se oprima Ctrl que salte a una rutina donde chequee el estado de PTA. En caso de que no esté presionado, no hace nada. En caso de que esté presionado, hace la acción correspondiente y retorna de la subrutina.
Una vez chequeado esto debe chequear que todavía esté presionado Ctrl, si lo está comienza la rutina de nuevo, si no lo está retorna de la subrutina.

PD: recordá que con este tipo de subrutinas tenes que poner delays para evitar los rebotes de los pulsadores.

Saludos


Gracias por tu respuesta. ¿Se puede hacer lo mismo en C o existen limitaciones? ¿Tiene ventajas programar en assembler frente a C en este micro? ¿Y en el resto de micros?
 
Podés hacer lo mismo en C, por supuesto. Los micros de Freescale están hechos con una arquitectura ideal para lenguaje C. No tenés limitaciones. En ningún micro. A veces, partes del programa conviene hacerla en ASM y otras en C.
El lenguaje C te ahorra tipeo (escribir). El ASM te da exactitud en los tiempos y estás en un nivel mas cercano al de la máquina, además tenés control de la memoria que llevas escribiendo.
Saludos.

PD: buena elección de micro
 
Gracias, ha funcionado!! En qué estaría pensando... Era más sencillo de lo que creía. Hay que ir comprobando los PTAD_PTADx o PTBD_PTBDx (por si le interesa a alguien).

Pero me surgen dos cuestiones más:

1. Pongo los delays correspondientes para cubrirme de los rebotes, pero cuánto tiempo calculáis de rebotes? Cuánto es lo adecuado, 100ms?

2. Porqué dices que es un buen micro el MC9S08QG8 de Freescale? No es bastante simple si quieres hacer cosas un poquito complicadas, con muchas teclas por ejemplo?

Saludos y gracias por responder!!
 
EL delay conviene hacerlo de 20 ms una vez que se pulsó, luego chequear que se haya "despulsado" y poner otro delay de 20 ms.
El microcontrolador no lo conosco. Me refería al microprocesador. EL HCS08. Es muy parecido al HC908.
saludos
 
Atrás
Arriba