create account

Microcontroladores: Lenguajes de Programación (Ensamblador) by electronico

View this thread on: hive.blogpeakd.comecency.com
· @electronico ·
$6.38
Microcontroladores: Lenguajes de Programación (Ensamblador)
 <div class=text-justify> 

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](https://ecency.com/hive-196387/@electronico/microcontroladores-composicion-interna), [Identificando los terminales de conexión.](Ihttps://ecency.com/hive-196387/@electronico/microcontroladores-identificando-los-terminales-de),[Registros](https://ecency.com/hive-196387/@electronico/microcontroladores-registros) y Lenguajes de Programación que es la que veremos a continuación.

 <center> https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg [Pixabay](https://pixabay.com/es/photos/c%c3%b3digo-codificaci%c3%b3n-computadora-1839406/) </center>

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.

<center> https://cdn.pixabay.com/photo/2014/12/30/05/42/source-code-583537_960_720.jpg [Pixabay](https://pixabay.com/es/photos/c%c3%b3digo-fuente-c%c3%b3digo-programaci%c3%b3n-c-583537/) </center>

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

 <center> ![](https://images.ecency.com/DQmUAdJ8M3aUo4bzggGTNGxw3GEo5p1apCNgFDzSPawLZHL/image.png)
</center>

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.

![](https://images.ecency.com/DQmSLMEFD5Ce4xJ1eVEtMGtoqksiQvHFcoYHcWoChbtf3MK/image.png)

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.

* [Microcontroladores: Registros](https://ecency.com/hive-196387/@electronico/microcontroladores-registros)
* [Microcontroladores: Identificando los terminales de conexión.](https://ecency.com/@electronico/microcontroladores-identificando-los-terminales-de)
* [Microcontroladores: Composición interna.](https://ecency.com/hive-196387/@electronico/microcontroladores-composicion-interna)
* [Lógica Combinacional - Operaciones lógicas básicas](https://ecency.com/hive-196387/@electronico/logica-combinacional-operaciones-logicas-basicas)
* [Hoja de datos (DATASHEET) de Componentes](https://ecency.com/hive-196387/@electronico/hoja-de-datos-datasheet-de)

### 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.

</div>
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 359 others
👎  
properties (23)
authorelectronico
permlinkmicrocontroladores-lenguajes-de-programacion-ensamblador
categoryhive-196387
json_metadata{"links":["https://ecency.com/hive-196387/@electronico/microcontroladores-composicion-interna","https://ecency.com/hive-196387/@electronico/microcontroladores-registros","https://pixabay.com/es/photos/c%c3%b3digo-codificaci%c3%b3n-computadora-1839406/","https://pixabay.com/es/photos/c%c3%b3digo-fuente-c%c3%b3digo-programaci%c3%b3n-c-583537/","https://ecency.com/hive-196387/@electronico/microcontroladores-registros","https://ecency.com/@electronico/microcontroladores-identificando-los-terminales-de","https://ecency.com/hive-196387/@electronico/microcontroladores-composicion-interna","https://ecency.com/hive-196387/@electronico/logica-combinacional-operaciones-logicas-basicas","https://ecency.com/hive-196387/@electronico/hoja-de-datos-datasheet-de"],"image":["https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg","https://cdn.pixabay.com/photo/2014/12/30/05/42/source-code-583537_960_720.jpg","https://images.ecency.com/DQmUAdJ8M3aUo4bzggGTNGxw3GEo5p1apCNgFDzSPawLZHL/image.png","https://images.ecency.com/DQmSLMEFD5Ce4xJ1eVEtMGtoqksiQvHFcoYHcWoChbtf3MK/image.png"],"thumbnails":["https://cdn.pixabay.com/photo/2016/11/19/14/00/code-1839406_960_720.jpg","https://cdn.pixabay.com/photo/2014/12/30/05/42/source-code-583537_960_720.jpg","https://images.ecency.com/DQmUAdJ8M3aUo4bzggGTNGxw3GEo5p1apCNgFDzSPawLZHL/image.png","https://images.ecency.com/DQmSLMEFD5Ce4xJ1eVEtMGtoqksiQvHFcoYHcWoChbtf3MK/image.png"],"tags":["hive-196387","ocd","gems","stem","stem-espanol","ecency","waivio","chessbrothers","electronica-ie"],"description":"","app":"ecency/3.0.28-vision","format":"markdown+html"}
created2022-11-20 01:15:27
last_update2022-11-20 01:15:27
depth0
children6
last_payout2022-11-27 01:15:27
cashout_time1969-12-31 23:59:59
total_payout_value2.150 HBD
curator_payout_value4.226 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length9,610
author_reputation42,487,987,357,643
root_title"Microcontroladores: Lenguajes de Programación (Ensamblador)"
beneficiaries
0.
accountstemsocial
weight500
1.
accountthetradr
weight4,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,469,025
net_rshares17,769,200,056,431
author_curate_reward""
vote details (424)
@chessbrotherspro ·
<h3>¡Enhorabuena!</h3><hr /><div class="pull-right"><img src="https://files.peakd.com/file/peakd-hive/chessbrotherspro/AJoJKGVARKHFCTHG7ee3GNkn5RMN7wixeJ52ipAgzDZ4QmeTcBdsk8hpi4pgj4e.png" alt="Has recibido el voto de PROYECTO CHESS BROTHERS"/></div><div class="text-justify"><h3>✅ Has hecho un buen trabajo, por lo cual tu publicación ha sido valorada y ha recibido el apoyo de parte de <a href="https://hive.blog/@chessbrotherspro"><b>CHESS BROTHERS</b></a> ♔ 💪</h3><p><br>♟   Te invitamos a usar nuestra etiqueta <b>#chessbrothers</b> y a que aprendas más <a href="https://hive.blog/chessbrothers/@chessbrotherspro/presentando-al-proyecto-chess-brothers-la-comunidad-mas-innovadora-que-combina-el-ajedrez-el-acondicionamiento-fisico-y-mas"><b>sobre nosotros</b></a>.</p><p>♟♟  También puedes contactarnos en nuestro <a href="https://discord.gg/73sK9ZTGqJ" rel="noopener" title="Esto lleva al servidor en Discord de Chess Brothers"><b>servidor de Discord</b></a> y promocionar allí tus publicaciones.</p><p>♟♟♟ Considera <a href="https://hive.blog/chessbrothers/@chessbrotherspro/el-trabajo-en-equipo-vale-la-pena-unete-al-trail-de-curacion-de-chess-brothers-apoyando-la-labora-realizada-y-obteniendo"><b>unirte a nuestro trail de curación</b></a> para que trabajemos en equipo y recibas recompensas automáticamente.</p><p>♞♟  Echa un vistazo a nuestra cuenta <a href="https://hive.blog/@chessbrotherspro"><b>@chessbrotherspro</b></a> para que te informes sobre el proceso de curación llevado a diario por nuestro equipo.</p></div><div class="text-center"><p><br>Cordialmente</p><p><strong><em>El equipo de CHESS BROTHERS</em></strong></p></div>
👍  
properties (23)
authorchessbrotherspro
permlinkre-microcontroladores-lenguajes-de-programacion-ensamblador-20221120t044651z
categoryhive-196387
json_metadata"{"app": "beem/0.24.26"}"
created2022-11-20 04:46:51
last_update2022-11-20 04:46:51
depth1
children0
last_payout2022-11-27 04:46:51
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,646
author_reputation56,154,105,801,894
root_title"Microcontroladores: Lenguajes de Programación (Ensamblador)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,471,993
net_rshares2,676,099,938
author_curate_reward""
vote details (1)
@curation-cartel ·
![1UP-PIZZA.png](https://files.peakd.com/file/peakd-hive/curation-cartel/23xediR4hotaNsS5pUJrmYVg3YGeTLpui41uCij2jhUDZ4uFT84zoGJf8a8VnfELXLJgt.png) |  <div class="phishy"><u><h4>You have received a __1UP__ from @gwajnberg!</h4></u></div> The @oneup-cartel will soon upvote you with:<hr> __@stem-curator__ <hr>_And they will bring !PIZZA 🍕._
-|-

<sup>[Learn more](https://peakd.com/hive-102223/@flauwy/the-curation-cartel-1up-trigger-smart-voting-mana-and-high-delegation-returns-for-14-different-tribes) about our delegation service to earn daily rewards. Join the Cartel on [Discord](https://discord.gg/mvtAneE3Ca).</sup>
properties (22)
authorcuration-cartel
permlinkre-microcontroladores-lenguajes-de-programacion-ensamblador-20221120t162821z
categoryhive-196387
json_metadata"{"app": "beem/0.24.26"}"
created2022-11-20 16:28:21
last_update2022-11-20 16:28:21
depth1
children0
last_payout2022-11-27 16:28:21
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length623
author_reputation1,123,281,846,602
root_title"Microcontroladores: Lenguajes de Programación (Ensamblador)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,482,926
net_rshares0
@ecency ·
**Yay!** 🤗<br>Your content has been **boosted with Ecency Points**, by @electronico. <br>Use Ecency daily to boost your growth on platform! <br><br><b>Support Ecency</b><br>[Vote for new Proposal](https://hivesigner.com/sign/update-proposal-votes?proposal_ids=%5B197%5D&approve=true)<br>[Delegate HP and earn more](https://ecency.com/hive-125125/@ecency/daily-100-curation-rewards)
👍  
properties (23)
authorecency
permlinkre-20221120t125213833z
categoryhive-196387
json_metadata{"tags":["ecency"],"app":"ecency/3.0.20-welcome","format":"markdown+html"}
created2022-11-20 12:52:15
last_update2022-11-20 12:52:15
depth1
children0
last_payout2022-11-27 12:52:15
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length381
author_reputation549,971,524,037,747
root_title"Microcontroladores: Lenguajes de Programación (Ensamblador)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,478,967
net_rshares2,594,250,119
author_curate_reward""
vote details (1)
@gwajnberg ·
Interesting i have never used programming for that purpose
!1UP

<a href="https://discord.gg/zQrvxAu7mu">
<img src="https://files.peakd.com/file/peakd-hive/thecuriousfool/23wCNFDyCLJu1v77TTg2MYKkd7XWkgF9fhiLujTDAaLaUz7H4AaQkDentB5UMVS8FcrVs.png"></a>
properties (22)
authorgwajnberg
permlinkre-electronico-20221120t92548558z
categoryhive-196387
json_metadata{"tags":["hive-196387","ocd","gems","stem","stem-espanol","ecency","waivio","chessbrothers","electronica-ie"],"app":"ecency/3.0.34-mobile","format":"markdown+html"}
created2022-11-20 16:25:48
last_update2022-11-20 16:25:48
depth1
children0
last_payout2022-11-27 16:25:48
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length250
author_reputation150,337,174,816,163
root_title"Microcontroladores: Lenguajes de Programación (Ensamblador)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,482,884
net_rshares0
@pizzabot ·
<center>🍕 PIZZA !


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


<sub>Learn more at https://hive.pizza!</sub></center>
properties (22)
authorpizzabot
permlinkre-microcontroladores-lenguajes-de-programacion-ensamblador-20221120t162945z
categoryhive-196387
json_metadata"{"app": "beem/0.24.19"}"
created2022-11-20 16:29:45
last_update2022-11-20 16:29:45
depth1
children0
last_payout2022-11-27 16:29:45
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length181
author_reputation6,163,265,054,706
root_title"Microcontroladores: Lenguajes de Programación (Ensamblador)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,482,964
net_rshares0
@stemsocial ·
re-electronico-microcontroladores-lenguajes-de-programacion-ensamblador-20221120t114826149z
<div class='text-justify'> <div class='pull-left'>
 <img src='https://stem.openhive.network/images/stemsocialsupport7.png'> </div>

Thanks for your contribution to the <a href='/trending/hive-196387'>STEMsocial community</a>. Feel free to join us on <a href='https://discord.gg/9c7pKVD'>discord</a> 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.&nbsp;<br />&nbsp;<br />
</div>
👍  
properties (23)
authorstemsocial
permlinkre-electronico-microcontroladores-lenguajes-de-programacion-ensamblador-20221120t114826149z
categoryhive-196387
json_metadata{"app":"STEMsocial"}
created2022-11-20 11:48:24
last_update2022-11-20 11:48:24
depth1
children0
last_payout2022-11-27 11:48:24
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length545
author_reputation22,460,334,324,555
root_title"Microcontroladores: Lenguajes de Programación (Ensamblador)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id118,477,821
net_rshares2,621,638,413
author_curate_reward""
vote details (1)