Microcontroladores: Lenguajes de Programación (Ensamblador)

in StemSocial14 days ago

Como siempre es un gusto poder saludarles. Por fin un poco de tiempo libre para seguir creando contenido en esta maravillosa comunidad.

Seguimos con nuestro estudio sobre microcontroladores recordando que la presentación la hemos dividido en cuatro partes: Composición Interna, Identificando los terminales de conexión.,Registros y Lenguajes de Programación que es la que veremos a continuación.

Pixabay

Un lenguaje de programación es un mecanismo que nos permite "comunicarnos" con una máquina o establecer un "código" mediante la cual dicha máquina debe operar. La finalidad es poder leer/escribir datos en la máquina usando un lenguaje que nos brinde una mejor forma de comunicación que si usaramos el "lenguaje máquina" que es el que entienden los chips (no cuanticos) de los cuales solo es posible evaluar dos condiciones lógicas por bits 0 y 1.

Si evaluamos nuestro lenguaje nativo está compuesto por letras números y símbolos. Nosotros combinamos todo esto para formar palabras y a la ves unimos estas palabras para formar oraciones que pueden tener sentido para otros y expresar nuestras ideas. El cerebro leerá las palabras y buscará el contexto para luego dar una interpretación.

Luego, como si fuesemos máquinas podemos recibir instrucciones mediante nuestro lenguaje nativo: haz esto, dime la hora, regalame agua y muchas otras instrucciones que podemos dar y recibir solo combinando palabras.

Ahora pensemos que queremos dar instrucciones a una máquina de forma natural, es pósible con la tecnología actual luego de muchos años de investigación y avances podemos decir por ejemplo: siri pon música, google activa una alarma a tal hora. En realidad para que se ejecute esa instrucción se necesita mucha programación y recursos en el dispositivo.

Ahora pensemos que tenemos un microcontrolador de baja capacidad, no será posible que obedezca a estás instrucciones, tendremos que escribirlas pero además no podemos hacerlo de forma natural porque eso también requeriría muchos recursos para poderse implementar, entonces ¿qué hacemos?.

En primer lugar debemos entender que a nivel de informática existen muchos lenguajes de programación, la mayoría sirven para hacer programas destinados a correr en un PC por lo que muchos ocupan una cantidad de memoria que los hace imposible de almacenar en un microcontrolador.

Dicho lo anterior podemos afirmar que un microcontrolador requiere una atención especial a la hora de evaluar el método de programación debido al aprovechamiento de recursos.

Pixabay

Para mayor facilidad de comprensión vamos por ahora a ver 2 lenguajes de programación; uno de bajo nivel y uno de alto nivel.

Nunca debemos olvidar que el lenguaje nativo de las máquinas es un lenguaje binario, por eso se puede hablar de una instrucción de nbits porque es la cantidad de bits y su combinatoria de estados lo que finalmente le da la instrucción al microcontrolador.

Así que, un lenguaje de programación lo que hará será convertir nuestras instrucciónes a código binario y transmitirselas al microcontrolador.

¿Cual es la diferencia entre los lenguajes de programación usados para microcontroladores?

La principal diferencia radica en la cantidad y forma de instrucciones que presenta el lenguaje al programador haciendo que algunos sean más fáciles de usar que otros, sin embargo la experiencia me ha enseñado que mientras más fácil sea el lenguaje más recursos exigirá para convertir el código escrito a lenguaje máquina, si hay suficientes recursos se puede usar el más fácil por lógica razonable pero si se desean aprovechar al máximo los recursos habrá que usar un lenguaje más simple.

En ese sentido vamos a conocer dos lenguajes, el primero es un lenguaje de bajo nivel llamado lenguaje "ensamblador".

Se dice que es un lenguaje de bajo nivel porque sus instrucciones están presentadas de forma tal que son las más fáciles que el microcontrolador puede interpretar. Estas instrucciones están en forma de nemónicos en los cuales se usan 3 o cuatro letras representativas de una palabra en inglés que describe la operación.

Las instrucciones sirven para leer o escribir datos en un registro, es importante recordar que existen registros cuyo valor determina el estádo eléctrico de uno o varios pines. Si por ejemplo quiero activar todos los pines del portA podemos escribir (solo con fines ilustrativos)

Mov 11111111b,portA

Estariamos moviendo el valor 11111111 al portA, la b indica que nuestro valor está expresado en numeros binarios, pudiese usarse 0xFF para una expresión en hexadecimal. La instrucción va primero, luego el valor segudo de una coma e inmediatamente el lugar donde queremos mover ese valor.

En la práctica esta isntrucción no ejecutaría nada porque no se puede escribir directamente en los registros específicos. Para hacerlo posible se facilita un registro de trabajo llamado W en el cual si se puede escribir un valor directamente, el sentido de esto es que una vez que W tenga el valor deseado podemos MOVerlo a cualquier otro registro que se pueda escribir.

Ahora seamos más realistas y supongamos que deseamos activar una salida por el pin PORTB,1 si usamos binarios el registro debe quedar con el valor 00000001b ya que el último bit es el menos significativo y por lo tanto representa el PORTB,1 los 0 en los demás bit indican que los demás pines asociados estaran "apagados"

Lo primero es añadir el valor al registro W con la instrucción MOVLW que nos permite escribir cualquier valor en W

MOVLW 00000001b

Una vez que está cargado el valor deseado en el registro W movemos el valor de este registro al PORTB

MOVWF PORTB


El lenguaje ensamblador por ser un lenguaje de bajo nivel exige un mayor conocimiento del microcontrolador, para hacer algo útil se deben conocer los registros especiales y cada uno de sus bits, donde leer para conocer que están ocurriendo los eventos y donde escribir para hacer que sucedan.

Otro factor importante a tener en cuenta es el direccionamiento, es importante conocer la dirección de cada registro ya que no se accede a ellos por sus nombres sino por sus direcciones.

Sin embargo podemos asignarles nombres a los registros al principio del programa con el nemónico EQU, para el ejemplo pueden notar que a la dirección 06h que corresponde al PORTB le asigné el nombre PORTB, a partir de ahí durante todo el programa cada vez que se escriba PORTB el programa entiende que se trata de la dirección 06h. En general EQU se utiliza para asignar nombres a los registros y facilitarnos el trabajo durante la programación.

El set completo de instrucciones y los bancos de registros siempre se encuentran disponibles en el datasheet del componente.

El siguiente es un set completo de instrucciones para los microcontroladores PIC16F87xA que puede encontrarse en el datasheet del PIC16F877 facilitado por el fabricante.

Como mencioné en algun parrafo más arriba, el lenguaje ensamblador requiere de muchos conocimientos en microcontroladores y es el primer lenguaje que debe aprender un profesional, en otras palabras, si queremos aprender a programar con este lenguaje necesitamos un curso avanzado sobre registros y nemónicos usados en este lenguaje.

Dado que existen formás de programar más fáciles de comprender el lenguaje ensamblador solo se ha presentado a manera de conocimiento informativo, lo usaré en programas futuros pero como lenguaje alterno suponiendo que algún profesional en la materia esté leyendo mis artículos, pero si no eres profesional no gastes esfuerzos intentando comprenderlo pues hay caminos más fáciles.

Artículos relacionados.

Lecturas recomendadas

  • MICROCHIP, Datasheet PIC16F8X: 18-pin Flash/EEPROM 8-Bit Microcontrollers
  • José M. Angulo Usategui, Ignacio Angulo Martínez, Microcontroladores PIC: Diseño práctico de aplicaciones (primera parte)
  • Ronald J. Tocci, Neal S. Widmer, Sistemas digitales: principios y aplicaciones
  • Albert Paul Malvino, Principios de electrónica, Sexta edición.
  • Robert L. Boylestad, Electrónica: Teoría de Circuitos.
  • Timothy J. Maloney, Electrónica Industrial, dispositivos y sistemas.
Sort:  

¡Enhorabuena!


Has recibido el voto de PROYECTO CHESS BROTHERS

✅ Has hecho un buen trabajo, por lo cual tu publicación ha sido valorada y ha recibido el apoyo de parte de CHESS BROTHERS ♔ 💪


♟ Te invitamos a usar nuestra etiqueta #chessbrothers y a que aprendas más sobre nosotros.

♟♟ También puedes contactarnos en nuestro servidor de Discord y promocionar allí tus publicaciones.

♟♟♟ Considera unirte a nuestro trail de curación para que trabajemos en equipo y recibas recompensas automáticamente.

♞♟ Echa un vistazo a nuestra cuenta @chessbrotherspro para que te informes sobre el proceso de curación llevado a diario por nuestro equipo.


Cordialmente

El equipo de CHESS BROTHERS

Thanks for your contribution to the STEMsocial community. Feel free to join us on discord to get to know the rest of us!

Please consider delegating to the @stemsocial account (85% of the curation rewards are returned).

Thanks for including @stemsocial as a beneficiary, which gives you stronger support. 
 

Yay! 🤗
Your content has been boosted with Ecency Points, by @electronico.
Use Ecency daily to boost your growth on platform!

Support Ecency
Vote for new Proposal
Delegate HP and earn more

Interesting i have never used programming for that purpose
!1UP


1UP-PIZZA.png

You have received a 1UP from @gwajnberg!

The @oneup-cartel will soon upvote you with:
@stem-curator
And they will bring !PIZZA 🍕.

Learn more about our delegation service to earn daily rewards. Join the Cartel on Discord.

🍕 PIZZA !

I gifted $PIZZA slices here:
@curation-cartel(18/20) tipped @electronico (x1)

Learn more at https://hive.pizza!