Lenguaje Ensamblador
January 17, 2007 at 4:22 pm | In Ensamblador, Tutorial | 34 CommentsEl ensamblador que utiliza MPLAB por defecto y el que utilizaremos para programar los PIC es MPASM. Los elementos básicos del lenguaje ensamblador son:
- Etiquetas
- Instrucciones
- Operandos
- Directivas
- Comentarios
Para la programación se utiliza una cierta tabulación que se debe respetar, además utilizar una tabulación adecuada hace los programas más claros y legibles. Las etiquetas se escriben en la primer columna de cualquier línea, las instrucciones y directivas en la segunda y por último, en la tercer columna, los operandos. Los comentarios se pueden escribir en cualquier parte del programa.
Etiquetas
Una etiqueta es una palabra utilizada para designar alguna línea o sección del programa, se pueden utilizar para saltar de una parte hacia esa etiqueta. Es importante que las etiquetas empiecen con una letra o con un guión bajo “_”. La longitud de una etiqueta puede ser de hasta 32 caracteres y como ya se dijo se deben escribir en la primer colúmna.
Instrucciones
Las instrucciones son las operaciones que realiza el microcontrolador, así que estas ya estan definidas para cada familia de PIC. El 16F628a así como todos los PICs de gama media utiliza un conjunto de 35 instrucciones que están definidas en la hoja de datos del PIC.
Operandos
Son los elementos que emplea la instrucción que se está ejecutando. Usualmente los operandos son los registros, las variables o las constantes.
Directivas
Las directivas son similares a las instrucciones, pero a diferencia de estas las directivas son propias del lenguaje ensamblador e independientes del microcontrolador que se utilice. Las directivas representan algunas características del lenguaje ensamblador, se utilizan para especificar el procesador empleado así como la configuración de este, también para asignar locaciones de memoria, entre otras cosas.
Comentarios
Los comentarios son las palabras, frases y oraciones que se pueden escribir en el código para hacer el programa más claro y legible, o solo para recordar el momento =P. Los comentarios se pueden escribir en cualquier parte del código pero siempre deben empezar con punto y coma ”;”.
Un programa de prueba
El siguiente ejemplo es un programa simple escrito en ensamblador donde se muestran los elementos básicos del lenguaje:

Este ejemplo se escribió usando MPLAB, se puede ver que MPLAB reconoce la sintaxis del lenguaje ensamblador y utiliza diferentes colores para los diferentes elementos del código. Las directivas se muestran en azul, las instrucciones en azul y en negritas, los comentarios son mostrados en verde y por ultimo las etiquetas y los operandos se muestran en color lila.
La primer directiva ”list“ sirve para especificar el PIC seleccionado, en este caso fue el 16F628a. La directiva “include” se utiliza para incluir un archivo externo en el programa. Con la directiva “__config” se establece la configuración del PIC, el tipo de reloj usado, la configuración del watchdog, el reset interno, etc. ”org“ define la dirección de memoria a partir de la cual el programa se guarda y ”end“ es la directiva que marca el final del programa, esta directiva es muy importante y nunca debe faltar en el código, además todo lo que se escriba después de esa directiva directamente será ignorado.
Este es un programa muy simple, comienza con la directiva “org” , después la instrucción goto dirige el flujo del programa hacia la etiqueta “Inicio“. El siguiente paso es seleccionar el banco de memoria 1 (bsf STATUS,RPO) para poder configurar el puerto B como salida (clrf PORTB), después volvemos al banco de memoria 0 (bcf STATUS,RPO) y por último ponemos todos los pines del puerto B a “1″(movlw 0xFF, movwf PORTB) y con eso el programa prácticamente está finalizado. Se incluye la etiqueta ”Ciclo“ y la última instruccion goto para que el programa se quede ciclado en ese punto (goto Ciclo). Al final se incluye la directiva ”end“ que es necesaria para que el programa ensamblador sepa que no hay más instrucciones que interpretar.
Este programa puede servir de toma de contacto en esto de la programación en ensamblador, más adelante se verán las instrucciones y directivas con mayor detalle.
34 Comments »
RSS feed for comments on this post. TrackBack URI
Leave a comment
Blog at WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.
rtyytytryrty
Comment by Edgefewar — January 30, 2007 #
EXCELENTE EL TUTORIAL MUCHAS GRACIAS
Comment by JAIRO RODRIGUEZ — March 17, 2007 #
muy bueno esta muy padre gracias
Comment by Rafa Stringel — March 27, 2007 #
Como que te sacas de la manga eso de las configuraciones >_>
Seria mejor que las definieras de la forma estándar, porque así esta confuso.
BUEN TUTORIAL ! =)
Comment by Chencho — June 11, 2007 #
que significa el simbolo $ en tu programacion explicame por favor
Comment by daniel — June 18, 2007 #
El símbolo $ hace referencia a la misma línea del programa en la que dicho símbolo aparece. Por ejemplo un “goto $” haría que el programa siempre estuviera realizando un salto hacia esa misma línea.
Comment by micropic — June 19, 2007 #
alguien me podria ayudar o decirme si lo que quiero hacer no se puede…
quiero hacer librerias en ensamblador pero quisiera saber como hacer funciones que lleven argumentos (1 o mas), ya se hacer macros, funciones pero no llevan argumentos y quisiera hacer algunas con argumentos… me prodrian ayudar… gracias
p.d. Tips o alguna duda que tengan con los pics pueden preguntar
Comment by Ernesto — August 14, 2007 #
Ernesto, en los macros se pueden enviar argumentos.
Comment by yesidh — October 3, 2007 #
gracias me ayudo mucho, y ahora lo bueno viene ya que tendre que hacer un robot que siga una linea negra
Comment by isabel — October 22, 2007 #
La lógica para hacer un robot que siga una línea no es difícil así que no debes tener mucho problema con la programación ya que tus sensores los puedes leer como si fueran interruptores, lo complicado es armar el hardware del carrito.
Comment by micropic — October 22, 2007 #
excelente muy bien explicado, te la comiste… pero me gustaria que colocaras ejemplos en los cuales se evite el salto de bancos, tengo entendido que puedo declarar al principio:
trisA equ 05H
trisB equ 06H
portA equ 85H
portB equ 86H
esto lo hago para evitar el salto de bancos de memoria….. es esto cierto?
Comment by ajr2 — November 2, 2007 #
ajr2, siempre que quieras acceder a un registro que se encuentra en otro banco debes realizar ese cambio (o salto) de bancos, de lo contrario tu programa tendrá errores y no funcionará.
Comment by micropic — November 2, 2007 #
che, me sirvio de mucho, gracias, es la 1ra vez q escribo y tengo una duda, kiero poner LOS 5 BITS del puerto A como salida, pero no se si el puerto A tiene 5 bits o mas, o es necesario especificar algo para q solo sean 5 bits
gracias
ah, soy de bolivia
Comment by MARCIA — November 15, 2007 #
Hola MARCIA, gracias por tu comentario, y sobre tu duda vamos a ver si te la puedo aclarar:
Dices que quieres poner los 5 bits del puerto A como salida, no especifícas que 5 bits, el pic 16f628a tiene 7 pines en el puerto A que pueden ser salida, esos son los bits 0,1,2,3,4,6,7, el pin RA5 (es decir el bit 5) solo funciona como salida.
Muy bien, aclarado eso te digo como configurar un bit como entrada o como salida, eso se configura con los registros TRISx que se encuentran en el banco 1, es decir que para configurar el puerto A como entrada o salida debes configurar el registro TRISA, escribiendo un 1 en un bit del registro TRISA ese bit del puerto A se configura como entrada, escribiendo un 0 se configura como salida.
Si quieres configurar los primeros 5 bits del puerto A lo puedes hacer de varias formas, por ejemplo:
-Forma 1
bsf STATUS,RP0 ; Cambio al banco 1
bcf TRISA,0 ; Bit 0 del puerto A como salida
bcf TRISA,1 ; Bit 1 del puerto A como salida
bcf TRISA,2 ; Bit 2 del puerto A como salida
bcf TRISA,3 ; Bit 3 del puerto A como salida
bcf TRISA,4 ; Bit 4 del puerto A como salida
bcf STATUS,RP0 ; Cambio al banco 0
- Forma 2
bsf STATUS,RP0 ; Cambio al banco 1
movlw b’00011111′
movwf TRISA
bcf STATUS,RP0 ; Cambio al banco 0
- Forma 3
bsf STATUS,RP0 ; Cambio al banco 1
clrf TRISA ; Todo el puerto A como salida
bcf STATUS,RP0
—-
Asi puedes configurar el puerto A, las primeras dos formas funcionan igual, configuran los primeros 5 bits (del 0 al 4) del puerto como salida mientras que la tercera configura el puerto completo como salida, espero que haya quedado claro.
Comment by micropic — November 15, 2007 #
Hermano usted tiene el don de esplicar ASSEMBLER mas completo que he visto, tiene mucho talento lo felicito no es facil enseñar un programa de cero y que sea entendible por personas que no conocen los comandos y sus usos….
ahora requiero de su experiencia estoy trabajando con el PIC 16F877 y quiero aprender a utilizar esas directivas que son super simplificadas tanto las que son orientadas a Bits como las mas complejas
como BNZ, BNC, ADDCF, ADDDCF, B, SKPX, SKPXX
se que muchas son orientadas a registros de flag y habilitadores y bit test por lo que pude investigar pero si posees mas informacion te lo agradeceria…
JAREDGOMEZ@HOTMAIL.COM
Comment by JARED GOMEZ — December 6, 2007 #
hola q tal espero q me puedas ayudar en mi uni tenemos los peores profesores por eso tenemos q hacer todo nosotros necesito un programa que mediante dos datos A y B dispuestos en las direcciones 0×10 y 0×11 del banco 2, respectivamente realice las siguientes operaciones. Según la comparación de estos datos se obtiene un resultado que se cargará en la posición 0×12. Si A = B el resultado será 0. Si A > B el resultado será es A – B y si B > A el resultado A + B.
Comment by victor — December 12, 2007 #
that´s all dude
Comment by Abraham — February 12, 2008 #
QUE ES LE PUNTO MODEL Y PARA QUE SIRVE?
Comment by ALEJANDRA — February 26, 2008 #
hola!
saludos a todos, me gustaria me apoyaran en este lenguaje pues me intereza, pero aun no comprendo ciertas cosas, pueden mandarme alguna pagina para aprender desde cero? nose como se usan los interruptores…. les agradeceré su ayuda.
atte. ice.
Comment by ICELA — March 2, 2008 #
Buenas tardes,bueno mi pregunta es donde puedo conseguir informacion buena sobre como programar pic en lenguaje assembler y como funciona exactamante un microcontrolador(((funcionamiento interno,estructura interna)))
bueno gracias espero me puedan ayudar ya que apenas me inicio en esto y quiero aprender a programar pic……….
Comment by GONGU — March 3, 2008 #
hola esta buena esta paguina y el tutorial me ayudo a entenderle mucho mejor pero me gustaria saber si me podrias echar la mano de como se puede usar un pic para utilizarlo en una funcion de transferencia con retroalimentacion, tengo entendido que se necesita utilizar un combertidosr A/D pero no se bien como utilizarlos ambos espero me puedas ayudar gracias
Comment by AGUSTIN — May 7, 2008 #
hola un saludo quisiera ver si alguien me puede orientar para hacer un programa en ensamblador para encender un carro.
gracias !!!!!!!!!!!!!!!!!!!!!
Comment by miki — May 19, 2008 #
hola!!
Comment by leon — June 25, 2008 #
q calidad los cuadritos de colores
Comment by leon — June 25, 2008 #
Buenas tardes quiero decirle que esta muy buena la explicacion del procedimiento de programacion para pic en este lenguaje y me gustaria saber si posee algun “manual” o algo similar que pueda enviarme al correo que este completo para poder seguir estudiando este apacionante mundo de los pics.
muchas gracias.
Atte.Ruben
Comment by Ruben — July 8, 2008 #
muy chida tu pagina me ayudo a resolver una de dudas que tenia con lo de la programacion en ensamblador,,, felicidades… saludes desde chiapas mexico…
Comment by chanto — November 25, 2008 #
que tal.. saludos..
Estoy a qui por el motivo que estoy empezando en el mundo del elnguaje ensamblador… estoy realizando apenas unos programas pero necesito probarlos para sabe r is estoy en lo correcto de acuerdo a MPLAB, como funciona se instala o como.. espero alguien me pueda deccir como empezar con esto.. y resivir informacion por part de todos… gracias por la atencion…
mi correo es.
skifree@live.com.mx
Comment by freeman — December 2, 2008 #
El tutorial es muy bueno, pero es muy basico o no supe interpretarlo, ya que necesito realizar un circuito con el pic 16f628 que permita contar de
o a F en forma ascendente, donde pulsadores independientes, con visualización en display de siete segmentos y que cuando detecte un numero par, lo indique por medio de una señal auditiva(sumbador) y una señal visual (led verde) de lo contrario led rojo.
Ejemplos como este son los que necesitamos los que apenas iniciamos programacion MPLAB con estos pic, por que los ejemplos que nos dan algunas paginas son muy basicos y no enseñan a combinar comandos o instrucciones.
Espero me pudedan responder este comentario.
Comment by ANDRES — March 24, 2009 #
mi correo es ing.andres10@hotmail.com espero me escriba alguien que conozca como cuadrar los tiempos para las visualizaciones antes mencionadas.
UNIVERSIDAD COOPERATIVA DE COLOMBIA.
Comment by ANDRES — March 24, 2009 #
quien me puede ayudar con el retardo de un pic 16f84a
Comment by yoyo — April 6, 2009 #
me pareció muy claro y didáctico esta esplicación, me interesa saber mas pero necesito empezar de los mas basico. y hasta como usar los programas ejemplo MPLAB. donde puedo informarme. Ayudaaaaa….
Comment by Cristian José Lera — May 17, 2009 #
hola que chebre tutor esta muy de tallado me interesaria que continue hasiendo mas tutores para de otras instrucciones
Comment by victor64_934 — August 9, 2009 #
muxas gracias…. es en el unico sitio que he podido encontrar buena informacion sobre ensamblador……………
Comment by MARLON — September 1, 2009 #
necesito un tutorial de mspam o un ejemplo de como programar rutinas….xfa…contesten a mi correo.
Comment by nestor morales — October 28, 2009 #