Red de conocimiento informático - Conocimiento sistemático - ¿Explicación del montaje de las luces de marcha?

¿Explicación del montaje de las luces de marcha?

ORG es una pseudoinstrucción que representa la dirección de esta línea en el medio de almacenamiento.

ORG0000H es la primera línea del medio de almacenamiento.

MOV R2, #08H no tiene un significado específico, es solo un número que mantiene encendida la luz de marcha. Se ejecutarán 8 grupos a la vez, pero los valores se reasignarán, por lo que seguirán fluyendo.

JB es solo un programa que detecta si la dirección es 1. Si es 1, saltará. De lo contrario, no saltará.

JB P0.0, LOOP1 Esta instrucción significa que si P0.0 es 1, el programa salta a la posición del programa de LOOP1.

Otras instrucciones son las mismas que las instrucciones anteriores. Si ninguna de ellas es 1, ejecute

AJMP MAIN. En otras palabras, el programa ha estado juzgando si los tres botones externos son. presionado, si se presiona, saltará a la subrutina correspondiente para su ejecución. Si no se presiona, el programa saltará a PRINCIPAL y reiniciará los tres JB. Si no se presiona el botón, seguirá consultando el botón. y se repetirá sin cesar.

Ahora asumiendo que se presiona el botón P0.0, el programa salta a la posición LOOP1.

Así que salta a la línea 7 y comienza a ejecutar MOV, R2, #08H. Esta instrucción es la misma que la primera y tiene poca importancia, por lo que no se repetirá.

Luego continúe ejecutando, MOV A, #0FEH, configure la memoria del acumulador ACC en hexadecimal FE, es decir, el bit más bajo es 0 y los otros bits son 1.

Luego AJMP BOTÓN1. Salta a la posición de BOTÓN1, que es la siguiente línea.

Luego MOV P1, A. Conecte el FE en el ACC del acumulador al puerto P1 y luego la luz del agua corriente comenzará a encenderse. Según el método de dibujo de su imagen, la luz P1.0 está encendida y las otras luces están apagadas.

Luego ejecute ACALL DELAY. Esta es una llamada de subrutina. Llame a la subrutina denominada DELAY. En este momento, el programa salta a la posición DELAY de la imagen más a la izquierda. Inicie el programa de retraso.

MOV R3, #14H es el número de veces para configurar el retraso. Una vez retrasado, el cronómetro se ejecuta 14 veces.

No entraré en las siguientes instrucciones una por una. Solo mire usted mismo la llamada del temporizador. Los símbolos son exactamente los mismos que los del lenguaje C. Configure el tipo de temporizador y configure la inicialización del temporizador. valor.

SETB TR1 La bandera de ejecución del temporizador 1, configurada en 1, el temporizador comienza a funcionar.

JBC TF1, LP2. Verifique el indicador TF1. Cuando el temporizador expire y el bit TF1 sea 1, salte a la posición LP2.

Luego reasigne el valor del temporizador. Luego, R3 disminuye en uno. Si R3 disminuye a 0, la llamada de subrutina finaliza, se ejecuta RET y se completa la llamada de subrutina. De lo contrario, salta a la posición de LP1 y continúa ejecutando el programa de retardo del temporizador.

Ahora supongamos que se ejecuta el programa de retardo, se ejecuta RET, se completa la llamada a la subrutina y se devuelve el programa principal.

Es decir, en la línea 11 del programa. Porque aquí es donde comenzamos a llamar a la función DELAY. El programa regresará automáticamente, pero aquellos que escriben en ensamblador por primera vez, es posible que no puedan determinar dónde está la ubicación a la que llamó cuando el programa es muy antiguo.

Luego ejecute la siguiente instrucción, RL A. Esta instrucción es muy simple. Mueve el valor en el acumulador ACC un bit hacia la izquierda. En el microcontrolador 51, mueve un bit al bit alto.

Luego determine si se han presionado los otros dos botones. Las dos instrucciones JB se mencionaron antes y no se repetirán aquí.

Si se pulsa salta a la posición correspondiente.

De lo contrario, ejecute DJNZ R2, BUTTON1 Debido a que no se presionan otros botones, continúe ejecutando el programa de luces en ejecución de BUTTON1. Si el valor de R2 no es 0, salte a la posición de BUTTON1 y reinicie la ejecución. MOV R2, #08H, reasigne el valor inicial a R2. Luego ejecute AJMP BUTTON1, lo que significa que no hay cambios.

Ahora suponemos que se pulsa el botón de P0.1 y salta a LOOP2. Esa es la línea 18.

Las instrucciones siguientes son las mismas. La función de R2 es la misma, así que no la explicaré. Luego explicaré directamente la siguiente instrucción.

MOV A, #7FH. Esta es una asignación al acumulador ACC. Esta vez se le asigna 7H, que es exactamente lo opuesto al BOTÓN1. El bit más alto es 0 y los otros bits son 1. El BOTÓN1 tiene el bit más bajo 0 y los otros bits son 1.

Luego salta al BOTÓN2 y ejecuta MOV P1, A. Dar el valor del acumulador al puerto P1.

RR A, mueve el valor del acumulador un bit hacia la derecha.

Luego hay dos instrucciones de JB, no las explicaré, lo olvidé, están escritas arriba. Luego llame a la función de retardo DELAY y el proceso de ejecución es el mismo que el anterior.

Las siguientes instrucciones son las mismas, incluido LOOP3, compruébalo tú mismo. Ha sido escrito con gran detalle. Espero que lo adopte. Si aún no lo comprende, vuelva a preguntar.