¿Cómo hibernar el microcontrolador 51?
Jaja, acabo de estudiar este tema recientemente\x0d\\x0d\51 Aplicación de modo inactivo y apagado de MCU\x0d\ Sabemos que hay un registro de administración de energía PCON dentro del microcontrolador, los dos más bajos Los bits de este registro, IDL y PD se utilizan para establecer si se ingresa al modo inactivo y al modo de apagado del microcontrolador, respectivamente. \x0d\ 1. Modo inactivo Cuando el microcontrolador entra en modo inactivo, excepto la CPU que está en modo de suspensión, todo el resto del hardware está activo. Los datos en la memoria de datos y los registros de funciones especiales que no están involucrados en el programa en el chip estarán activos. en modo inactivo durante el modo inactivo Mantenga el valor original. Pero si el cronómetro está en marcha, el valor en el registro del contador también aumentará. El microcontrolador puede reactivarse mediante cualquier interrupción o reinicio del hardware en modo inactivo. Cabe señalar que cuando se utiliza una interrupción para reactivar el microcontrolador, el programa continúa ejecutándose desde donde se detuvo originalmente. Despierte el microcontrolador, el programa comenzará a ejecutarse desde el principio. El propósito de dejar que el microcontrolador entre en modo inactivo suele ser reducir el consumo de energía del sistema. Para dar un ejemplo muy simple, todos han usado un multímetro digital durante el uso normal, el microcontrolador dentro del medidor está en modo de funcionamiento normal. no está en uso, se olvida Para apagar la alimentación del multímetro, la mayoría de los medidores apagarán automáticamente la pantalla LCD después de esperar unos minutos si no hay una operación humana para reducir el consumo de energía del sistema. Generalmente, esta función está implementada. utilizando el modo inactivo del microcontrolador o el modo de apagado. Tomando como ejemplo la serie de microcontroladores STC89, el consumo de energía del microcontrolador suele ser de 4 mA ~ 7 mA cuando funciona normalmente. Cuando ingresa al modo inactivo, su consumo de energía cae a 2 mA. Cuando ingresa al modo de apagado, su energía. El consumo se puede reducir a menos de 0,1 μA. \x0d\2.? Modo de suspensión Cuando el microcontrolador entra en modo de apagado, el oscilador de cristal externo se detiene, la CPU, el temporizador y el puerto serie dejan de funcionar y solo las interrupciones externas continúan funcionando. La instrucción que hace que el microcontrolador entre en modo de suspensión será la última instrucción ejecutada por el microcontrolador antes de entrar en modo de suspensión. Después de ingresar al modo de suspensión, los datos en la memoria de datos y los registros de funciones especiales que no participan en el programa en el chip conservarán sus valores originales. . El microcontrolador se puede activar mediante un disparador de interrupción externo de nivel bajo o mediante una interrupción de disparo de flanco descendente o un modo de reinicio de hardware. Cabe señalar que cuando se utiliza una interrupción para activar el microcontrolador, el programa continúa ejecutándose desde donde se encuentra. originalmente se detuvo. Cuando se utiliza un reinicio de hardware para reactivar el microcontrolador, el programa se ejecutará desde cero. Ejemplo: habilite dos interrupciones externas, establezca una interrupción de activación de bajo nivel, use un temporizador para contar y mostrarlo en los dos primeros dígitos del tubo digital. Cuando el conteo llega a 5, el microcontrolador ingresa al modo inactivo (suspensión) y apaga el. Temporizador Después de que el microcontrolador responde a la interrupción externa, regresa del modo inactivo (suspensión) y inicia el temporizador al mismo tiempo. El código del programa es el siguiente: \x0d\/*************************************** *** *******************************\x0d\*************** ********** **************************************** *********** *****/\x0d\ #define IdleMode() PCON |=0x01 //01 es el modo inactivo\x0d\ //Cuando el microcontrolador entra en modo inactivo, excepto la CPU en estado de suspensión, todo el resto del hardware está activo\ x0d\ //Los datos en la memoria de datos y los registros de funciones especiales que no participan en el programa en el chip mantendrán sus valores originales durante el modo inactivo. \x0d\ //Pero si el temporizador está funcionando, el valor en el registro del contador también aumentará. \x0d\ //El microcontrolador puede reactivarse mediante cualquier interrupción o reinicio del hardware en modo inactivo \x0d\ //Cabe señalar que cuando se utiliza una interrupción para reactivar el microcontrolador, el programa continúa ejecutándose desde donde se encuentra. originalmente se detuvo. Cuando se utiliza un reinicio de hardware para reactivar el microcontrolador, el programa se ejecutará desde el principio.
\x0d\ #define PowerOFF() PCON |=0x02 //02 modo de apagado \x0d\ //Ingrese al modo de apagado, el oscilador de cristal externo se detiene, la CPU, el temporizador y el puerto serie dejan de funcionar, solo interrupciones externas continuar trabajando \x0d\ //La instrucción que hace que el microcontrolador entre en modo de suspensión será la última instrucción ejecutada por el microcontrolador antes de dormir \x0d\ //Después de ingresar al modo de suspensión, los datos en la memoria de datos y los registros de funciones especiales. no involucrado en el programa en el chip mantendrá el valor original. \x0d\ //Se puede despertar mediante interrupciones externas, pero no se puede despertar durante la simulación de proteus\x0d\ #define EXT0_Init() EX0=1; EA=1 //Activa las interrupciones externas para facilitar el despertar. Después de despertarse, el programa continúa ejecutándose desde donde se detuvo originalmente\x0d\ //Programa de plantilla de administración de energía\x0d\ main()\x0d\{\x0d\ EXT0_Init();\x0d\ while(1) // \ x0d\ {\x0d \ if(time.sec==0){time.sec; PowerOFF();}\x0d\ //\x0d\ } \x0d\}\x0d\ void EX0ISR(void) interrupción 0\x0d \{\x0d\ //PCONamp;=0xfc; //Borrar el modo de apagado (inactivo) anterior\x0d\}