Heredé un producto físico que necesita funcionar así usando un 8051 en modo STOP. Mi manual de usuario es un poco más claro en el modo STOP, pero no puedo hacer que esto funcione. ¿Alguien que ha usado el 8051s puede hacer un gran esfuerzo en esto?
Acciones deseadas
Nota: el botón A es una interrupción externa.
1) Mantenga presionado el botón A, durante cinco segundos. Botón de encuesta A cada 5 ms. Después de cinco segundos de sondeo, llame al STOP (); macro. El sistema se apaga.
2) Mientras el sistema está en modo de parada, presione el botón A y el sistema vuelve a encenderse.
El problema que tengo es que cuando mantengo presionado el botón A durante 5 segundos, se activa el modo STOP. Pero al instante el sistema salta del modo STOP porque el botón A aún se mantiene presionado.
La hoja de datos (sketchball Asian 8051 MCU ...) no está clara en el comportamiento de activación. En un lugar dice que cualquier entrada de cualquier cosa en el puerto 1 o en el puerto 0 activará la MCU desde el modo STOP. Eso no es cierto.
También sugiere que las interrupciones externas pueden activar la MCU. Eso parece ser cierto, y explica por qué el modo STOP no se "pega" cuando uso el botón A. Si cambio el sondeo al botón B, un botón de interrupción no externo, el método de sondeo funciona y el sistema pasa al modo STOP. .
Lo extraño de este comportamiento es que el botón ¡Una interrupción externa no está habilitada! Las interrupciones globales están habilitadas, pero no las interrupciones externas. El comportamiento es realmente extraño.
¿Hay alguna forma en que pueda usar el Botón A para activar el modo STOP, pero no tener que desencadenar inmediatamente una interrupción externa y sacar el sistema del modo STOP?
(Este no era un problema del sistema con un PIC en un diseño anterior, ya que se trataba de botones de sondeo que utilizan algún tipo de temporizador del tipo de perro guardián de sueño profundo ... sketchball Asian 8051 no tiene dicha función).
ACTUALIZAR
A pesar de que la hoja de datos no lo indica, parece que el temporizador de vigilancia y el reloj interno de bajo consumo siguen funcionando en el modo STOP. Puede haber una manera de cambiar algunas variables para mantener el sistema en STOP incluso cuando se está reactivando.
SOLUCIÓN SUGERIDA
Podría entrar en el modo STOP, cuando el botón se mantiene presionado durante cinco segundos y luego se suelta. Eso funcionaría, pero requiere una reescritura manual del producto.
CÓDIGO FINAL
El disparo del modo STOP en la liberación del botón funciona bien. Una cosa que no es ideal es que termine teniendo que suplantar que la unidad está encendida / apagada, por lo que la lógica del código es que mantenga presionado el botón A durante cinco segundos, a los cinco segundos la pantalla se apaga PERO la unidad aún está funcionando . Parece estar apagado, pero cuando suelta el botón, la unidad realmente se apaga.
Hay mucha lógica de código detrás de escena para manejar todos los casos de borde. Al igual que si alguien toca el Botón A, una vez que está apagado, pero no lo mantiene presionado durante 5 segundos. Necesita capturar eso y apagar el sistema nuevamente.