Lenguaje Ensamblador

January 17, 2007 at 4:22 pm | In Ensamblador, Tutorial | 34 Comments

El 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:

Primer programa

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

  1. rtyytytryrty

  2. EXCELENTE EL TUTORIAL MUCHAS GRACIAS

  3. muy bueno esta muy padre gracias

  4. 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 ! =)

  5. que significa el simbolo $ en tu programacion explicame por favor

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

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

  8. Ernesto, en los macros se pueden enviar argumentos.

  9. gracias me ayudo mucho, y ahora lo bueno viene ya que tendre que hacer un robot que siga una linea negra :)

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

  11. 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?

  12. 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á.

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

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

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

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

  17. that´s all dude

  18. QUE ES LE PUNTO MODEL Y PARA QUE SIRVE?

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

  20. 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……….

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

  22. hola un saludo quisiera ver si alguien me puede orientar para hacer un programa en ensamblador para encender un carro.
    gracias !!!!!!!!!!!!!!!!!!!!!

  23. hola!!

  24. q calidad los cuadritos de colores

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

  26. 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…

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

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

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

  30. quien me puede ayudar con el retardo de un pic 16f84a

  31. 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….

  32. hola que chebre tutor esta muy de tallado me interesaria que continue hasiendo mas tutores para de otras instrucciones

  33. muxas gracias…. es en el unico sitio que he podido encontrar buena informacion sobre ensamblador……………

  34. necesito un tutorial de mspam o un ejemplo de como programar rutinas….xfa…contesten a mi correo.


Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Blog at WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.