cómo terminar un código de ensamblaje

1

Estoy intentando escribir un código para pic16f877 mediante la traducción de un algoritmo simple a código de ensamblaje.

El conjunto de instrucciones no tiene tal instrucción.

Estoesloqueescribí:

MOVF0X40,WMOVWF0X50SUBWF0X41,WBTFSSStatus,CGOTOlabelMOVF0X41,WMOVWF0X50labelEND

Mipreguntaes:¿hayunamanerade"terminar" un algoritmo cuando se programa un microcontrolador usando un código de ensamblaje?

    
pregunta A.Bukhari

3 respuestas

5

Detente y en realidad piensa al respecto.

¿Qué desea que haga el microcontrolador después de que se haga con la poca lógica que muestra? Seguramente hay algo . ¿Debe realizarse la operación nuevamente? ¿Debería volver a una tarea más grande? ¿Debería esperar a que suceda algo externo y volver a hacerlo? Incluso si se supone que no debe hacer "nada" hasta que se elimine el poder, eso es algo que tienes que decirle que haga.

El punto es que no hay "final". No tiene sentido Todo requiere un poco de acción. Incluso apagarse a través de algún interruptor externo requiere activar ese interruptor.

En un tema aparte, los diagramas de flujo deberían indicar realmente el siguiente nivel hasta la lógica, no los detalles de cómo el procesador ejecutará esa lógica. Está especificando detalles sobre cosas como el registro W en su diagrama de flujo. En su lugar, debería mostrar algo así como un bloque de comparación entre A y B (o lo que sea), luego dos o más opciones a tomar dependiendo del resultado. Cuando codifique esto en ensamblaje, luego descubrirá las instrucciones reales para realizar la lógica de nivel superior descrita por el diagrama de flujo.

También es malo referirse a las variables por sus direcciones. Refiérase a la variable simbólicamente, luego deje que el enlazador decida dónde guardarlos en la memoria. En realidad, no es de su incumbencia, aparte del banco en el que deberían estar. Su diagrama de flujo se refiere a tres variables diferentes a las 40h, 41h y 50h. Dales nombres y usa los nombres en el diagrama de flujo. Los buenos nombres también ayudan a iluminar la lógica. Incluso cuando codifica esto en el ensamblador, aún le da nombres a las variables y se refiere a ellos por nombres en el código.

    
respondido por el Olin Lathrop
6

Solo para que quede claro: en el código de ensamblaje del microcontrolador no suele haber un final. Ciertamente no hay una instrucción final. No hay un sistema operativo al que devolver el control, y no hay forma de simplemente "detener".

El código del microcontrolador casi siempre contiene un bucle infinito.

    
respondido por el pjc50
5

Cuando trabajas con un µC, debes hacer un bucle infinito al final de tu código. De lo contrario, no controlarás lo que hará el µC. Si olvida dicho bucle, el µC lo activará y bloqueará la ejecución del programa. (llamado ISR_TRAP en MSP430 de TI)

En C, básicamente terminarás tu código con algo como while(1) o for(;;) . Al hacerlo, el procesador realizará una tarea inactiva para que permanezca activo y aún esté consciente de la interrupción.

Lo mismo para el ensamblaje, debe hacer su bucle de código para que permanezca activo.

loop:
     jmp loop
    
respondido por el M.Ferru

Lea otras preguntas en las etiquetas