Asuntos que requieren atención en el desarrollo y escritura de programas de interrupción para microcomputadoras de un solo chip

2020-09-04 19:42:29 admin

Asuntos que requieren atención en el desarrollo y escritura de programas de interrupción para microcomputadoras de un solo chip en Chengdu


Hay muchos recursos de interrupción en el microcontrolador, como interrupciones externas, interrupciones de temporizador, interrupciones de puerto serie, etc. Estos recursos de interrupción deben usarse para manejar los eventos de emergencia correspondientes, en lugar de eventos regulares que se ejecutan secuencialmente, por lo que debe prestar atención al escribir subrutinas de interrupción .


Las declaraciones de procesamiento de transacciones específicas no deben colocarse en la función de interrupción, las declaraciones en la subrutina de interrupción deben ser concisas y claras, y no debe haber demasiadas declaraciones. Si escribe una serie grande de instrucciones para tratar con transacciones específicas como en la función principal al escribir una subrutina de interrupción, tomará demasiado tiempo en esta interrupción, si hay otras señales de interrupción de baja prioridad. Puede hacer que se pierda la interrupción y se produzca el error lógico del programa. Por lo tanto, la instrucción de la subrutina de interrupción debe ser la más corta.


Las instrucciones en la subrutina de interrupción no deben usar la función de retardo y no deben usar las instrucciones con la función de retardo de espera como while, do-while, do-until. El uso de while, do-while, do-until y otras instrucciones en la subrutina de interrupción también hará que el microcontrolador se demore o espere demasiado en esta posición durante el proceso de ejecución, y también puede hacer que la interrupción se pierda cuando lleguen otras señales de interrupción. .


¿Entonces qué debería ser hecho?


Al escribir la subrutina de interrupción, debe usar inteligentemente la variable de estado global. En la subrutina de interrupción, solo se cambia el valor de la variable de estado. En la función principal, el valor de la variable de estado se juzga dentro del segmento de programa while (1) y luego se basa en el valor de la variable de estado. Ejecute las correspondientes declaraciones de procesamiento de transacciones respectivamente. Es como si recibieras una llamada pidiéndote que hagas algo y no puedes seguir llamando para terminarlo. Necesitas escribir el asunto, colgar el teléfono y concertar un tiempo para resolverlo.


Por ejemplo, una pantalla táctil de puerto serie necesita realizar las operaciones correspondientes de acuerdo con las teclas de la pantalla táctil, y necesita utilizar la interrupción del puerto serie. Suponiendo que la pantalla táctil enviará los datos A cuando se toca el botón 1 y los datos B cuando se toca el botón 2, entonces podemos definir un comando de variable de estado global:


comando char sin firmar;


En la subrutina de interrupción del puerto serie, cambie el valor del comando de acuerdo con los diferentes datos recibidos del puerto serie:


anular la función de interrupción del puerto serie 1 ()


{


conmutador (datos recibidos del puerto serie)


{caso A: // Si se recibe la acción del botón 1, se asigna el comando x1


{comando = x1;


descanso;


}


caso B: // Si se recibe la acción del botón 2, se asigna el comando x2


{comando = x2;

descanso;}

...


predeterminado: descanso;}}


En la subrutina de interrupción anterior del puerto serie 1, el interruptor es un comando de selección condicional.Cuando el puerto serie recibe datos A, entonces el comando se asigna x1, y cuando el puerto serie recibe datos B, entonces el comando se asigna x2. Por supuesto, el segmento de programa anterior es solo una ilustración, no se puede copiar y compilar directamente para ejecutar en el microordenador de un solo chip. En el proyecto real, es necesario desarrollar de acuerdo con las reglas de escritura de diferentes programas de microordenador de un solo chip.


Luego, ejecute diferentes declaraciones de procesamiento de transacciones de acuerdo con el valor del comando en la función principal:


función principal()

{

...

mientras (1)


{

Cambiar (comando)

{casex1: // Si recibe la acción del botón 1, ejecute el programa de la transacción 1

{Procesamiento de transacciones 1;

descanso;}

casex2: // Si se recibe la acción del botón 2, ejecutar el programa de la transacción 2

{Transacción 2;

descanso;}

       predeterminado: descanso;

}}}


Según un programa de este tipo, cuando el microcontrolador recibe los datos del puerto serie que representan diferentes teclas desde la pantalla táctil, cambia el valor del comando de variable de estado global en la subrutina de interrupción del puerto serie. Esta declaración es poca y el tiempo de ejecución es corto. En la función principal, el programa de procesamiento de transacciones específicas que consume mucho tiempo se ejecuta de acuerdo con los diferentes valores del comando. Este tipo de distribución de programas hará que la MCU funcione de manera eficiente y razonable.