¿Cómo simulo un microcontrolador Intel 8051 en Ubuntu?

¡Trabajadores!

En la naturaleza, el desarrollo se produce incansablemente, y aunque en nuestra dimensión no lo percibamos, su accionar gravita en todos los estamentos de la escala universal. Lo hace en el microcosmos, y se reproduce en el macrocosmos.

Un Movimiento Político multidimensional como el nuestro no podía dejar de responder a la misma ley de la naturaleza, que es la que lo inspira. Es por ello que al desarrollar software libre, podemos hacerlo en cualquier punto de su escala de aplicación.

Es por ello que nuestro software ha de poder correrse en los macrocontroladores, pero también en los microcontroladores. Para ello hemos de conocer el lenguaje ensamblador de la arquitectura MCS-51.

Vean señores, el Mariscal de Sajonia contaba que tenía una mula que lo había acompañado en más de doce campañas, pero la mula no sabía nada de estrategia. Lo peor - decía - es que muchos de los generales que los acompañaban acertaban en la estrategia lo mismo que la mula.



Indudablemente que el modelo "original del Intel 8051 se trata de un microcontrolador de 8 bits con un bus de 16 bits y varias características que lo han hecho importantísimo en la industria microelectrónica. Naturalmente, existen amplia cantidad de variantes y más de 20 marcas que lo han fabricado.

Entre sus funciones clásicas se encuentra su estructura lógica de memorias no volátiles y volátiles (tanto interna en el chip con funciones especiales, como una RAM externa y accesible a través del bus). Se suma a esto una o dos UART como interfaz de salida, y dos temporizadores.

Adicionalmente, en las implementaciones más modernas no es raro encontrar UARTs adicionales, memorias EEPROM con controlador incluido, autoreseteadores, y muchas funciones útiles, que lo hacen una poderosa plataforma de desarrollo y control.

Como estos controladores requieren para su funcionamiento de escribir en su ROM los programas en Assembler a ejecutar, y que este desarrollo suele ser la parte más complicada de su implementación, es útil contar con un simulador de su funcionamiento, que pueda servirnos para probar si los programas que escribimos para él puedan ser exitosos, y funcionen adecuadamente.



A tal fin se ha desarrollado el EdSim51DI.

Se trata de un simulador escrito en Java pensado para operar como unidad integrada de desarrollo y evaluación de software de control bajo la arquitectura MCS51.

Si no lo tuviésemos instalado, lo primero es cargar en nuestro equipo de desarrollo un runtime de ejecución Java. Por ejemplo, si quisiéramos instalar la versión 11 del Java Development Kit en Ubuntu, podríamos hacerlo desde la terminal. Para ello abrimos una con Ctrl+Alt+T e ingresamos los siguientes Comandos de Organización:

sudo apt update ;
sudo apt install openjdk-11-jdk-headless ;

Acto seguido, ya podremos descargar el simulador EdSim51DI propiamente dicho, por medio de los siguientes comandos:

cd ~/Descargas/
wget https://www.edsim51.com/8051simulator/edsim51di.zip
unzip edsim51di.zip

Finalmente, para ejecutarlo, podremos ingresar:

cd ~/Descargas/edsim51di/

java -jar edsim51di.jar

...o bien ingresar dichas líneas en un Lanzador. Cualquiera de las opciones que utilicemos nos debería presentar, al cabo de pocos segundos, con la pantalla completa del simulador Java para el microcontrolador Intel 8051.
Este potente simulador nos permite como desarrolladores ingresar rutinas y programas escritos en lenguaje Ensamblador MCS51, y ejecutarlos a fin de probarlos, tanto en modo normal como paso a paso (en la arquitectura MCS original un paso máquina involucra 12 ciclos de reloj). Estos Megaciclos podrían ser ajustados desde el panel izquierdo.

Como visualización de los resultados podremos ver sobre la parte inferior del panel izquierdo los bloques de memoria, así como el contador de pasos en la parte superior.

Presionando el botón DI podremos activar la interfaz dinámica de Entrada/Salida que querramos (normalmente estarán activados todos los dispositivos dables de utilizar).

Esta arquitectura es capaz de ofrecer asignaciones de 8 bits para funciones de entrada/salida, a la que pueden asociarse varios conversores DAC o ADC (digital-analógico o analógico-digital). De esta manera se pueden asociar potenciómetros directamente a la estructura escalar. Otra muy utilizada es la funcionalidad de control de eje, que se usa con un motor servo a pasos y fue una de las fundamentales aplicaciones iniciales como control de máquina-herramienta, impresoras, etc. También se puede asignar un banco de luces de status, y varios tipos display de control como el Hitachi HD44780U de cristal líquido a matriz de puntos, o los clásicos de siete segmentos. La comunicación con los mismos puede ser bimodal (4 y 8 bits). Naturalmente también tendremos un banco de conmutadores, y una línea de comparación.

Los periféricos E/S DAC puede observarse en el "osciloscopio DAC", una ventana que permite observar los resultados de voltaje aplicado a los dispositivos (normlamente hasta 5 voltios en la unidad DAC con granularidad de 8 bits y 128 pasos, aunque también hay versiones de 3,3 voltios).

Presionando el botón LD podremos ver el diagrama del bloque lógico de control que rodean al microchip, y podremos desactivar las funciones que no nos sean necesarias.
El monitor nos permite ver la memoria de código o el contenido del banco de memoria.

Naturalmente, si contamos con un adaptador UART compatible con el MCS51 (por ejemplo, un adaptador USB-UART o un viejo de puerto serial RS232), bien podremos trasladar el programa a la EEPROM de nuestro microcontrolador de arquitectura MCS51.

Indudablemente podremos encontrar cómo utilizar las funciones booleanas de dicho microcontrolador aquí, y la información de uso de la arquitectura MCS51 aquí, en tanto que la documentación de EdSim la encontraremos aquí.