Aprenda ASM Desde Cero

download Aprenda ASM Desde Cero

of 30

Transcript of Aprenda ASM Desde Cero

  • 5/21/2018 Aprenda ASM Desde Cero

    1/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    uControl

    Articulos, circuitos, tutoriales y Revista uControl => Tutoriales, guias y cursos en uControl=> Mensaje iniciado por: Leon Pic en Octubre 30, 2008, 09:23:22

    Ttulo: Aprenda ASM desde ceroPublicado por: Leon Picen Octubre 30, 2008, 09:23:22

    Lo primero que hay que saber para este lenguaje, es que cada lnea de cdigo,es una instruccin que realiza el CP o un paso que realiza el CP. A diferencia deotros lenguajes, como por ejemplo el C, una lnea de instruccin, puede llevaruno o mas pasos que el CP debe realizar. Ms adelante entendern el porqu.

    A esto ltimo dicho, nos explica el porqu de un programa escrito en ASM(assembler) lleva menos lnea de instruccin que el mismo programa realizado enotro lenguaje. Esto se traduce que, cuanto menos lneas de cdigo, menorconsumo de la memoria de programa.

    Nota:Entendemos por el mismo cdigo, al realizar un software para realizar unadicha tarea. Una tarea que debe realizar nuestro microcontrolador, puede serescrito en diferentes lenguajes, y es el programa que se utiliz quien lo traducea formato hex (1 y 0).

    Ahora, Qu es el CP?

    El CP o PC es el Contador de Programa. Es el encargado de leer cada instrucciny realizar la accin solicitada por el software.

    Para dar un ejemplo un poco ms claro, digamos que el CP, es una persona. Estapersona se le da un papel que tiene diferentes tareas a realizar. Estas tareas,estn una debajo de la otra y lee lnea por lnea y hace lo que le dice esa lnea.Cada lnea, posee una instruccin que se debe hacer. Cuando termin de haceresa instruccin, continua con la lnea de abajo.

    Supongamos que tenemos un papel que dice:

    Levantar la mano izquierda.Bajar la mano izquierda.Saltar tres veces en el mismo lugar.Levantar la mano derecha.Saltar una vez en el mismo lugar.Bajar la mano derecha.

    El CP, har esas tareas sin negarce y lo har fielmente a lo que est escrito. Porlo que, si hace una tarea mal, es porque le pusimos una o ms instrucciones mal.

    Si bien, el CP har lo que nosotros le pidamos, el CP nos pide que respetemosalgunas cosas. Estas cosas, dependern de cada microcontrolador y quedebemos saber para poder programar en forma correcta al PIC.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Octubre 30, 2008, 09:53:46

    Cmo es la extructura del lenguaje ASM?

  • 5/21/2018 Aprenda ASM Desde Cero

    2/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Es muy fcil, posee 4 columnas bien diferenciadas y que no es problemaacordarce.

    * La primer columna se llama ETIQUETAy sirve para darle el nombre a unapocicin de la memoria del programa al que se necesita apuntar. Los que no seden cuenta, ya lo haran.

    * La segunda columna, se llama INSTRUCCINy lo que justamente hace, es

    una instruccin a realizar por el CP.

    * La tercera columna, se llama OPERANDOy es el operando de una instruccin,o sea, de la segunda columna. Hay instrucciones que no tienen operando y lasveremos ms adelante.

    * Y la cuarta columna, se llama OBSERVACIONESy sirve solo para elprogramador, o sea, el usuario que est programando el PIC. En otras palabras,a nosotros. Siempre comienza con ; (punto y coma)

    Si no sirve para el PIC, Para qu complicarla ms? Todo lo contrario, es paraalludar al programador de que no se olvide que intent hacer.

    Todos los lenguajes, desde los ms bsicos, hasta los ms avanzados, tienenesta caractersticas ya que en el, pondremos que es lo que queremos hacer oexplicar el programa.

    Si bien, estas observaciones se utilizan en la cuarta columna, no es obligacincolocarla en esta columna, si no que puede ir al margen de la planilla en dndeestamos programando. Y es aqu dnde explicaremos la porcin de una rutinapara entenderlo ms adelante.

    Bien, veremos a continuacin, como se escriben las columnas:

    ETIQUETAS INSTRUCCIN OPERANDO ;OBSERVACIONES

    O, podemos verlo as:

    ;OBSERVACIONES;OBSERVACIONES;OBSERVACIONES (y la cantidad que necesitemos)

    ETIQUETAS INSTRUCCIN OPERANDO ;OBSERVACIONES

    Ttulo: Re: Aprenda ASM desde cero

    Publicado por: Leon Picen Octubre 30, 2008, 04:39:42

    Antes de empezar a ver las intrucciones, debemos concentrarnos en losregistros.

    Qu son los registros?

    Los registros, son pociciones de memoria el cual se utilizan para ir configurandoel pic mientras se corre el programa, cambiar de bancos para acceder a otraspartes de memorias, son banderas que nos van diciendo que est pasando condistintas operaciones, son habilitaciones o desabilitaciones para mdulos quetrae el PIC. Por ejemplo, conversor Analgico/Digital, PWM.

  • 5/21/2018 Aprenda ASM Desde Cero

    3/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Estos registros, tienen una ancho de bit de acuerdo al PIC, que hay de 8 bit, 16bit y 32 bit. Excepto la palabra configuracin y que la veremos mas adelante. Eltamao de los registro depende del tipo de microcontrolador.

    Cada registro, posee un nombre, y cada bit o un grupo de bit, se puede utilizarpara lo descripto anteriormente (habilitar/desabilitar, etc).

    A continuacin, veremos una pocicin de la RAM y sus 4 bancos. Este, es del

    PIC16F877

    (http://www.ucontrol.com.ar/forosmf/index.php?action=dlattach;topic=137.0;attach=130;image)

    Como notarn, en las cuatro columnas, hay nombres. Estos nombres son todoslos registros que posee este PIC. Vern que hay registros que se repiten. Noquiere decir que estan duplicados, triplicados o cuatriplicados, si no que sepuede acceder a ellos no importa en que banco estemos trabajando. (Ya loentendern, no se preocupen).

    Cada vez que se programe el PIC y se necesite trabajar con uno de estos

    registros, se debe acceder al banco que est dicho nombre. Es por eso, queesta tabla es muy importante a la hora de trabajar.

    Aprovechando que sub esta tabla del pic, cuando dea ejemplo de programacin,ser sobre este pic.

    Microchip provee en forma gratuita estos datasheet. Y hay uno por cada PIC.Por lo que si no tienen este datasheet, descargenlo de la pgina de Microchip(http://www.microchip.com). Cuando empezemos a programar, lo necesitarn.

    Ttulo: Re: Aprenda ASM desde cero

    Publicado por: Leon Picen Octubre 31, 2008, 10:23:31

    Uno de los registros muy utilizado, es el registro de trabajo W, el cual, se utilizapara mover un dato/valor de un registro a otro, cargar valores en un registro, ycon la ayuda de la ALU puede hacer operaciones matemticas.

    Observen con atencin el diagrama de bloque dnde se encuentra W

    (http://www.ucontrol.com.ar/forosmf/index.php?action=dlattach;topic=137.0;attach=133;image)

    Ahora bien, si W es un registro, dnde est ubicado, ya que en el mapa de

    memoria no lo encuentro?

    El registro W no est implementado en la memoria ram, ni en la posicin 0x00 nien otra posicin. W es un registro independiente que tiene un bus directo con laALU (un camino privado). La ALU es la nica entidad que puede leer o escribireste registro de trabajo.

    El direccionamiento indirecto hace uso de los registros FSR e INDF. INDF escompletamente ajeno a W. Un direccionamiento indirecto usa el registro FSRcomo apuntador al contenido de otros registros. Cualquier instruccin que haceuso de INDF (0x00) como direccin invoca un direccionamiento indirecto.

  • 5/21/2018 Aprenda ASM Desde Cero

    4/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Los microcontroladores PIC, poseen tres tipos de memorias.

    * Memoria de Programa Es la ubicacin fsica dnde se guarda el firmware que hemos creado,o sea, nuestro programa. Y tiene un ciclo de 100.000 de lectura y/o escriturasantes de estropearce y es del tipo FLASH (pero este es f laco ;D Es un chiste).

    * Memoria de datos de uso general Es la memoria RAM del PIC. Recordemos, que los registros estn

    sobre la memoria RAM y la memoria de uso general, comienza despus de losregistros.

    * Memoria de datos EEPROM Es la memoria EEPROM que puede almacenar datos mas de 40 aossin energa y 1.000.000 de ciclos de escritura y lectura

    El PIC 16F877, tiene una memoria de programa de 8Kb por un ancho de 14 Byte,o sea que cada pocicin de memoria tiene 14 bytes (B'11111111111111', oH'3FFF') Cada lnea de instruccin ocupa una pocicin en la memoria deprograma, asi que, podemos poner hasta 8.192 instrucciones.

    La RAM de uso general (mas los registros) trae 368 bytes con un ancho de 8bytes (B'11111111', o H'FF'). Esto quiere decir, que tenemos 368 pociciones paranuestro uso.

    La EEPROM trae 256 bytes con un ancho de 8 bytes. Tenemos 256 pocicionespara nuestro uso.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Noviembre 01, 2008, 10:28:54

    Ahora, vamos a estudiar el registro STATUSy luego continuaremos con las

    instrucciones.

    Registro STATUS

    Si entendieron hasta ac, se acordar que los registros poseen un ancho de 8bytes. Cada byte, puede contener un 1 o 0.

    Vemos ahora en detalle el registro STATUS:

    (http://www.ucontrol.com.ar/forosmf/index.php?action=dlattach;topic=137.0;attach=135;image)

    Este registro, tiene 3 Bytes dedicado para las operaciones matemticas, 3 bytesdedicado al cambio de banco de memoria y 2 bytes dedicado para saber que oquin produjo un Power Up (despertar del micro). Y se puede leer y escribrir enl (cambiar datos).

    Los analizamos desde el ms significativo (MSB) hasta el menos significativo(LSB).

    BIT 7:

    Se llamaIRPy sirve para el direccionamiento indirecto para cambiar el banco de

  • 5/21/2018 Aprenda ASM Desde Cero

    5/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    memoria.

    1 = Banco 2 y 30 = Banco 0 y 1

    BIT 6 y BIT 5

    Se llaman RP1 y RP0respectivamente. Sirve para el direccionamiento directopara cambiar de banco de memoria.

    00 = Banco 001 = Banco 110 = Banco 211 = banco 3

    BIT 4

    Se llama TO (neg).Este bit se utiliza para saber quin despert al PIC.

    1 = Despus que despierta (power up) o por las instrucciones CLRWDT o SLEEP,se pone a 1 este bit.

    0 = Se pone a 0 cuando el wachtdog o en castellano perro guardan (WDT)despierta al PIC.

    BIT 3

    Se llama PD (neg).Este bit se utiliza para saber si el pic estaba durmiendo.

    1 = Despus de que despierta (power up) o por la instruccin CLRWDT, se ponea 10 = Se pone a 0 cuando se ejecuta la instruccin SLEEP

    BIT 2

    Se llamaZy al igual que los dos bytes anteriores, es una bandera. Nos indica elresultado de una operacin aritmtica y lgica.

    1 = La operacin aritmtica o lgica di como resultado 00 = La operacin aritmtica o lgica no di como resultado 0

    BIT 1

    Se llama DC.Digit carry/borrow (dgito llevar/prestar). Es afectado por lasinstrucc iones ADDWF; ADDLW; SUBLW; SUBWF (Para la resta, la polaridad esinversa).

    1 = Hubo un acarreo del 4to bit menos significativo al 5to bit.0 = No hubo un acarreo del 4to bit menos significativo al 5to bit.

    BIT 0

    Se llama Ccarry/borrow. Es afectado por las mismas instrucciones que afectanal bit DC.

    1 = Hubo un accareo del bit ms significativo (Bit 7) o sea cuando se exede deH'FF'0 = No hubo accareo del bit ms significativo

  • 5/21/2018 Aprenda ASM Desde Cero

    6/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Noviembre 04, 2008, 09:47:14

    Breve instroduccin de las INSTRUCCIONES

    Cada instruccin tiene una ancho de 14 Bits, es por eso que la memoria deprograma tiene el mismo ancho. Justamente para poder alojar cada instruccin.

    Las instrucciones, estn divididas en tres grupos. Los cuales son:

    Byte-Orientedoperation (Byte-Orientando a la operacin)Bit-Orientedoperation (Bit-Orientando a la operacin)Literal and Controloperation (Control y Literal de la operacin)

    Primer grupo Byte-Oriented operation

    Cada instruccin de este grupo est compuesta por:

    OPCODE (Cdigo)

    DESTINATION (Destino)FILE REGISTER ADDRESS (Direccin del archivo de registro)

    El OPCODE o cdigo, es el cdigo de cada instruccin y que es nica para cadainstruccin. Est formada por los bit del 13 al 8.

    El DESTINATION o el destino, indica en dnde se va a guardar el dato.Porejemplo, si hacemos una suma, tenemos dos opciones dnde guardarlo, unapuede ser el registro W y la otra opcin puede ser otro registro cualquiera o unapocicin de la RAM. Est formada por el bit 7.

    La constante que nos indica esto es la letra d. Si esta letra es 0, la operacin se

    guardar en el registro W. EN cambio si vale 1, la operacin se guardar en elregistro o pocicin de memoria que estemos trabajando al momento de usar unainstruccin.

    Hay instrucciones, como veremos ms adelante, que no es necesario indicardnde queremos guardar la operacin, ya que se hace en forma automtica. Yhay otras instrucciones que si no se indica el destino, nos puede dar un error alcompilar o el compilador lo eligir el y por ende, nos puede ejecutar mal elprograma.

    Y por ltimo, tenemos el FILE REGISTER ADDRESS que se carga con la direccindel registro a ser guardado. Est formada por los bit 6 al 0. La constante que

    nos indica esto, es la letra f

    Segundo grupo Bit-Oriented operation

    Cada instruccin de este grupo est compuesta por:

    OPCODE (Cdigo)BIT ADDRESS (Bit de direccin)FILE REGISTER ADDRESS (Direccin del archivo de registro)

    OPCODE es igual al primer grupo. Est formado por los bits 13 al 10.

  • 5/21/2018 Aprenda ASM Desde Cero

    7/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    El BIT ADDRESS, se utiliza para direccionar la operacin. Est formado por losbits 9 al 7. Como pueden observar, se sacrific bit del opcode para drcelo al bitaddress. La constante que nos indica esto es la letra b

    Y por ltimo tenemos FILE REGISTER ADDRESS, que es igual al primer grupo. Estformado por los bit 6 al 0. Igual que en el primer grupo. la constante que nosindica esto es la letra f.

    Tercer grupo Literal and Control

    Cada instruccin de este grupo, est compuesta por:

    OPCODELITERAL

    OPCODE es igual que en el primer grupo. Est compuesta por los bits 13 al 8.Exepto para las instrucciones CALL y GOTO que est compuesta por los bit 13 al11 (prestar mucha atencin a esto, cuando veamos estas dos instruccionesentendern la importancia).

    Y el LITERAL que puede ser un valor, por ejemplo para sumar, para restar, para

    cargar al registro W, en fin, un nmero decimal, binario o hexadecimal. O puedeser una valor de direccin a dnde apuntar para las instrucciones CALL y GOTO.

    Est compuesta por los bits 7 al 0. Exepto para las instrucciones CALL y GOTOque est compuesta por los bit 10 al 0 (prestar mucha atencin a esto, cuandoveamos estas dos instrucciones entendern la importancia).

    A continuacin, vemos las 35 instrucciones agrupadas por los tres grupos:

    (http://www.ucontrol.com.ar/forosmf/index.php?action=dlattach;topic=137.0;attach=150;image)

    Si alcanzan a ver en la imagen, vern que algunas instrucciones afectan alregistro STATUS y otras no.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Noviembre 07, 2008, 02:32:35

    Las instrucciones

    Les voy a arruinar el momento de alegra. Las instrucciones hay que estudiarlasde memoria. Si, leyeron bien, de memoria.Lo que tienen que saber sobre lasinstrucciones, es como se escriben, que hace cada instruccin y lo ms

    importante que bit del REGISTROafecta.

    Vamos a ir vindolo por orden alfabtico. Y otra cosita ms, como es deesperarce, estn en INGLES o son abreviaturas pero en INGLES.

    Recordemos que: .123 o D'123' es en decimal; 0x7B o 7Bh o H'7B' es enHexadecimal; B'01111011' es en binario.

    ADDLW

    Suma un valor designado por el programador al registro W

  • 5/21/2018 Aprenda ASM Desde Cero

    8/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Ejemplo

    Cdigo: ADDLW .128

    Si W tena cargado un valor = .5, despus de la instruccin W tiene cargado elvalor .133

    Para recordar, ADDes sumar, Les Literal y Wes el registro W

    Afecta a:

    ZSe pone a 1 si la operacin es 0DCSe pone a 1 si hubo un acarreo del bti 3 al 4CSe pone a 1 si hubo desbordamiento, o sea, cuando se supera H'FF'

    ADDWF

    Suma el valor del registro W con el valor de un registro cualquiera. El destino deesta suma, lo elige el programador.

    Ejemplo:

    Cdigo: ADDWF TEMP,W

    Si W tena guardado .133 y la pocicin de la RAM llamada TEMP tena el valorcargado con .2, W vale .135 y TEMP contina valiendo .2

    Ahora si hubiera puesto as:

    Cdigo: ADDWF TEMP,F

    TEMP valdra .135 y W valdra .133

    Para recordar, F, es File Register Address.

    NOTA:Para indicar la direccin de dnde se guarda, tambin se puede poner 0 o1 en vez de W o F. 0, corresponder guardarlo en el registro W y 1 en el registroTEMP (para este caso).

    Afecta a:

    ZSe pone a 1 si la operacin es 0

    DCSe pone a 1 si hubo un acarreo del bti 3 al 4CSe pone a 1 si hubo desbordamiento, o sea, cuando se supera H'FF'

    ANDWF

    Realiza la operacin AND entre W y un registro designado por el programador. Eldestino de esta operac in lo elije el programador.

    Ejemplo:

    Cdigo: ANDWF TEMP,F

  • 5/21/2018 Aprenda ASM Desde Cero

    9/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Si antes de la instruccin W vale B'11100011' y TEMP vale B'00111010' Despusde la instruccin TEMP vale B'00100010' y W vale B'11100011'

    Afecta a:

    ZSe pone a 1 si la operacin es 0

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Noviembre 09, 2008, 05:28:40

    BCF

    Pone a 0 el bit de un registro. El bit debe ser indicado por el programador.

    Ejemplo:

    Cdigo: BCF TEMP,2

    Antes de la instruccin TEMP vale B'11111111'. Despus de la instruccin TEMPvale B'11111011'

    Para recordar, Bit Clear es borrar File es archivo o registro

    No afecta ningn bit del registro Status.

    BSF

    Pone a 1 el bit de un registro. El bit debe ser indicado por el programador.

    Ejemplo:

    Cdigo: BSF TEMP,0

    Antes de la instruccin TEMP vale B'01110110'. Despus de la instruccin TEMPvale B'01110111'

    Para recordar, Bit Set es poner a 1 File Archivo o registro

    No afecta a ningn Bit del registro Status.

    BTFSC

    Salta un lnea si el bit de un registro es cero. El bit debe ser indicado por elprogramador.

    Ejemplo:

    Cdigo: BTFSC TEMP,5 BCF PORTA,0 BSF PORTB,0

    Caso 1:

  • 5/21/2018 Aprenda ASM Desde Cero

    10/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    TEMP vale B'00011110'. El CP analizar solo el Bit 5 del registro TEMP, como es0, salta la instruccin BCF PORTA,0 y ejecuta la siguiente lnea que es BSFPORTB,0 y continua haciendo la instruccin.

    Caso 2:

    TEMP vale B'00111000'. El CP analizar solo el Bit 5 del registro TEMP, como es 1no salta la instruccin y har la instruccin BCF PORTA,0 y luego continua conla instrucc in BSF PORTB,0

    Para recordar Bit Test es chequear File Skip es salto Clear

    No afecta a ningn Bit del registro Status.

    BTFSS

    Salta una lnea si el bit de un registro es 1. EL bit debe ser indicado por elprogramador.

    Ejemplo:

    Cdigo: BTFSS TEMP,3 ADDWF PORTC ANDWF NODO

    Caso 1:

    TEMP vale B'01101100'. El CP analizar solo el Bit 3 del registro TEMP, como es1, salta la instrucc in ADD PORTC y ejecuta la siguiente lnea que es ANDWFNODO y continua haciendo la instruccin.

    Caso 2:

    TEMP vale B'11110000'. El CP analizar solo el Bit 3 del registro TEMP, como es 0no salta la instruccin y har la instrucc in ADD PORTC y luego continua con lainstrucc in AND NODO.

    Para recordar Bit Test es chequear File Skip es salto Set

    No afecta a ningn Bit del registro Status.

    Normalmente, continuando las instrucciones BTFSS y/o BTFSC va un GOTO oCALL pero no la he puesto porque an no se explicaron estas instrucciones.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Noviembre 15, 2008, 09:35:13

    CALL

    Se digire a una direccin de la memoria de programa designado por elprogramador. En otras palabras, se utiliza para dirigirce a una rutina o tarea. Suprincipal ventaja es que una vez que finaliz la tarea, vuelve al punto siguientedesde dnde se llamo.

    Ejemplo :

  • 5/21/2018 Aprenda ASM Desde Cero

    11/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Cdigo: CALL ESC_PORTB

    Para recordar, CALLes llamada.

    No afecta ningn bit del registro Status.

    -----------------------------------------------------------------------------

    ----------------------------------------------------------------Hacemos una exepcin con respecto a ver las instrucciones por orden alfabticoy veremos la instruccin GOTO.---------------------------------------------------------------------------------------------------------------------------------------------

    GOTO

    Se digire a una direccin de la memoria de programa designado por elprogramador. En otras palabras, se utiliza para saltar instrucciones que noqueremos que se ejecuten. A diferencia de la instruccin CALL, no hay forma devolver cuando se ejecuta la instrucc in.

    Ejemplo:

    Cdigo: GOTO INICIO

    Para recordar GOTOes ir a.

    No afecta a ningn bit del registro Status.

    Extendiendo la explicac in.

    Vamos a hablar del PC para entender bien sobre estas instrucciones. La exelenteexplicacin que continua, por desgracia no es ma (ojal fuera mi explicacin),son de las personas Maunix y BrunoF (del foro todopic(http://www.todopic.com.ar/foros))

    En la siguiente imagen, vemos el diagrama de bloques del PC o CP.

    (http://www.ucontrol.com.ar/forosmf/index.php?action=dlattach;topic=137.0;attach=213;image)

    El PC es de 13 bits en este caso(8kwords). 14 son los bits de cada "word" oinstruccin que se graban en cada posicin de la FLASH (memeria de programa).

    El PC se reparte en: sus 8 bits de menor peso en el registro PCL, y los 5restantes en el registro PCLATH.

    Los pics al tener un set de instrucciones reducido no puede en una solainstruccin meter todos los bits necesarios para direccionar toda su memoria.

    EL program counter son 2 registros, el PChigh y PCLow . Cuando haces un CALLo un GOTO, solo se rellenan 11 bits (los 8 del PClow y 3 del PChigh) y losrestantes 2 los rellenas con el PCLATH (para completar los 13bits).

    El STACK (pila) tiene toda la direcc in, no solo parcial. Si haces un call desdela pagina 0 a la pgina 3 y luego un return el cdigo SI volver a la pgina 0,

  • 5/21/2018 Aprenda ASM Desde Cero

    12/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    pero el PCLATH sigue apuntando a la pgina 3, entonces si usas otro goto o call,debes tener en cuenta de modificar el PCLATH.

    Entnces, dijimos que:

    El PC = ProgramCounter o CP = Contador de Programa, tiene 13 bits; del 0 al 12.

    Al ejecutar un call o un goto, se copian del 0 al 10, y los otros 2 bits se copiandel registro PCLATH. El pclath solo estar all para esa situacion.

    En un return o retfie la microelectronica del PIC, pega la direccin del PC queestaba guardada.

    Lo vemos con un ejemplo

    1. STACK = vac o PC = 0x00A0

    PCLATH = 0b000011000 Ejecutas un CALL 0x230

    2. El STACK tiene en su posicin 0 la direccin 0x00A0. PC = 1110001100003. Se ejecuta la subrutina y en ese punto el PC ya qued en

    PC = 111000110111

    4. Viene un RETURN. La microelectrnica del PIC copiar el stack tal cual en el program counter + 1 Valor STACK 0x00A0 + 1 --> PC = 0x00A15. EL cdigo sigue ejecutandose en la pgina 0 pero hay que tener en cuenta

    que el PCLATH apunta a la pgina 3 por ello si hars otro CALL o GOTO, deberscambiar de nuevo el PCLATH si la subrutina no est en la pgina 3.

    Para cerrar el tema

    Vamos a entrar a todo detalle en el Program Counter(PC) para que se vayantodas las dudas ya que es muy importante. Vayamos al tema tema del PC,computed goto(lo que algunos llaman "tabla"), call, returns y goto.

    El Program Counter(PC) est conformado en esta familia de uC(y refiriendonos ala familia 16F, las otras poseen ms o menos bits implementados) por 13 bitsrepartidos entre dos registros: PCH y PCL.

    El PCL es legible/escribible directamente a traves del registro fsico PCL(valga laredundancia). En cambio, el PCH no es directamente accesible. No puede serledo, y slo puede se grabado mediante un buffer que contiene el valortemporalmente(oh! aqu aparece nuestro famoso PCLATH). Entonces, recordar:El PCLATH es slo un buffer temporal que almacena los 5 bits de mayor peso delPC para ser escritos cuando se ejecute una instruccin que lo requiera.

    Ahora, hay dos situaciones posibles en las que el PC debe ser cargado demanera distnta: una es cuando queremos trabajar con tablas y otra cuandorealizamos un call o un goto que no est en el msmo banco.

    1era situacin: Tabla(Comuted Goto)

  • 5/21/2018 Aprenda ASM Desde Cero

    13/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    La tabla es una situacin de uso del PC en la que se afec ta directamente alregistro PCL. Cuando se afecte directamente al PCL mediante una instruccin, esnecesario que el usuario asegure que PCLATH tenga sus 5 bits pre-cargadosadecuadamente.

    Hago un ejemplo:

    Mal:

    org 0x000 movlw 0x01 call tabla

    org 0x300tabla

    addwf PCL,F retlw 0x03 retlw 0x01 retlw 0x0F

    .....

    Bien: org 0x000 movlw 0x03 movwf PCLATH movlw 0x01 call tabla

    org 0x300tabla

    addwf PCL,F retlw 0x03 retlw 0x01 retlw 0x0F .....

    Mejor: org 0x000 pageselw tabla

    movlw 0x01 call tabla

    org 0x300tabla

    addwf PCL,F retlw 0x03 retlw 0x01 retlw 0x0F .....

    Pageselw es una instruccin del MPASM que genera dos instrucciones: un movlwliteral y un movwf PCLATH. El valor del literal es automticamente seleccionadopor el ensamblador segn la etiqueta(o posicin de memoria) que se le

  • 5/21/2018 Aprenda ASM Desde Cero

    14/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    espec ifique. En el caso anterior pageselw tabla generara estas dosinstrucciones:

    movlw 0x03movwf PCLATH

    Si no aseguramos que los 5 bits del PCLATH estn correctamente seteados almomento de afectar al PCL mediante alguna instruccin(generalmente es laaddwf, pero puede usarse subwf y muchas otras) entonces el programa saltar

    a una posicin indeseada.

    2da situacin: CALL y GOTO

    En esta familia de uC, cada instruccin es codificada en 14 bits. En el caso delas instrucciones CALL y GOTO, su estructura es la siguiente:

    F2 F1 F0 K10 K9 K8 K7 K6 K5 K4 K3 K2 K1 K0

    Donde las F indican cul instruccin es la que debe ejecutarse(100 para la CALL101 para la GOTO), y las k corresponden a la direccin a la cual queremos

    llamar(con un CALL) o saltar(con un GOTO).

    Aqu se ve claramente un problema. Podemos ver que un CALL o un GOTO sloalmacena 11 bits de la direccin a la cual debe ir. 11 bits es un mximo 2048posiciones. Qu pasa cuando un uC posee ms de 2k de memoria Flashentonces? Por ejemplo, un 16F877A posee 8k de memoria Flash. Cmo harapara llamar a una subrutina que est ms all de la posicin 2047 de la flash?La solucin nuevamente se encuentra en el PCLATH(y es nuevamente el usuarioel que tiene el deber de pre-cargar el valor adecuado).

    Entonces, dijimos que el PC contiene 13 bits de longitud. 13 bits son hasta8kwords(una word es en esta familia un conjunto de 14 bits que conforman una

    instruccin la cual se aloja en la memoria FLASH del uC). Un CALL o un GOTOslo contienen los 11 bits de menor peso de la direccin a la cual ir, por lo quelos 2 bits restantes debern ser pre-cargados en los bits 4 y 3 del registroPCLATH por el usuario programador.

    Cuando se ejecuta una instruccin CALL o GOTO, es imprescindible que elregistro PCLATH est correctamente precargado. La instruccin a la que el uCir estar conformada por 13 bits y ellos sern:

    PCLATH,4 PCLATH,3 K10 K9 K8 K7 K6 K5 K4 K3 K2 K1 K0

    Cabe mencionar que el uC carga a PC con el valor pasado por los 11 bits

    de K, y a PC con el valor de los bits PCLATH. El registro PCLATHno es modificado de ninguna manera. Slo se leen esos dos bits.

    Por ejemplo, en un uC de 8kWords hay 4 pginas. Una pgina cada 2048 words.Si se est en una pgina y se quiere ir a otro es necesario precargar antesdichos bits del PCLATH para poder hacerlo.

    El usuario no debe preocuparse por precargar el PCLATH en dos sitaciones:Si el uC no posee ms de 2kWords de memoria Flash;O si en el cdigo creado por el usuario, no se utiliza la memoria FLASH ms allde la posicin 2047(0x7FF).

  • 5/21/2018 Aprenda ASM Desde Cero

    15/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Si ocurre al menos uno de esos dos casos, es suficiente con asegurar que losbits PCLATH se encuentren ambos en cero.

    Vamos con un par de ejemplos:

    Mal:

    org 0x000 ;Esto es pgina0 call cruzo

    org 0x800 ;Esto ya es el pgina1cruzo retlw 0xFF .....

    Bien:

    org 0x000 ;Esto es pgina0 movlw 0x08

    movwf PCLATH call cruzo

    org 0x800 ;Esto ya es el pgina1cruzo retlw 0xFF .....

    Mejor:

    org 0x000 ;Esto es pgina0 pagesel cruzo ;automaticamente seleccionar banco call cruzo

    org 0x800 ;Esto ya es el pgina1cruzo retlw 0xFF .....

    Pagesel es una instruccin del MPASM que genera dos instrucciones: un bcf/bsfPCLATH,3 y un bcf/bsf PCLATH,4. El software ensamblador seleccionaautomticamente la instruccin bcf o bsf segn el banco en el cual se encuentrala etiqueta(o posicin de memoria) que se le especifique. En el caso anteriorpagesel cruzo generara estas dos instrucc iones:

    bsf PCLATH,3bcf PCLATH,4

    Ya que la subrutina cruzo se encuentra en la pgina1.

    Finalmente, cuando se ejecuta una instruccin CALL, se carga en el STACK el

  • 5/21/2018 Aprenda ASM Desde Cero

    16/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    valor de la posicin actual ms 1(es decir, se guarda en el STACK el valor PC+1).Se guardan los 13 bits, por lo que durante las instrucciones RETURN,RETLW yRETFIE no es necesario precargar al PCLATH.

    Para ms informacin, ver el esquema seccin 2.3 del datasheet de losPIC16F87XA que habla de cmo cargar al PC segn cada situacin.

    Ttulo: Re: Aprenda ASM desde cero

    Publicado por: Leon Picen Noviembre 21, 2008, 09:09:44CLRF

    Borra el contenido de un registro seleccionado por el programador. La forma enque lo hace, pone en 0 los 8 bit del registro. Este registro, puede ser cualquierade la pocicin de la RAM.

    Ejemplo:

    Cdigo: CLRF PORTB

    Antes de la instruccin PORTB vale B'11000111'. Despus de la instruccinPORTB vale B'00000000'

    Para recordar CLeaRes limpio File es archivo o registro.

    Afecta a:

    ZSe pone a 1

    CLRW

    Borra al registro W. La forma en que lo hace, pone en 0 los 8 bit del registro.Ejemplo:

    Cdigo: CLRW

    Antes de la instruccin W vale B'00000111'. Despus de la instruccin W valeB'00000000'.

    Para recordar CLeaRes limpiar Work es trabajo.

    Afecta a:ZSe pone a 1

    CLRWDT

    Borra al WDT. La forma en que lo hace, pone en 0 al mismo.

    Ejemplo:

    Cdigo: CLRWDT

  • 5/21/2018 Aprenda ASM Desde Cero

    17/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Antes de la instruccin WDT vale B'11111110'. Despus de la instruccin valeB'0000000'.

    Para recordar CLeaRes limpiar Watch Dog es perro guardian Timer es contador.

    Afecta a:

    TO (neg)Se pone a 1

    PD (neg)Se pone a 1

    NOTA:El WDT o el contador perro guardian, sirve para destrabar al PIC. Cadavez que se desborda, o sea, cada vez que pasa de H'FF' a H'00', produce unreset, y como es un reset, se dirige a la pocicin 0h de la memoria de programa.La forma de trabajar con el, es ir poniendo en lugares estratgicos la instruccinya explicada, de esta manera evitamos el desborde del contador. Si el CP setraba en algn bucle o algo similar, al no limpiar el contador, el WDT desbordary llevar al CP a la pocicin 0h de la memoria de programa.

    Muchas veces se evita de usar esta herramienta por no tener que calcular por

    todo el programa dnde y cuando limpiar al WDT. Es recomendable su uso.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Diciembre 03, 2008, 10:06:28

    COMF

    Realiza el complemento de un registro.

    Cdigo: COMF TEMP,F

    Si TEMP tena guardado B'00111101' luego de ejecutar la instruccin TEMP valeB'11000010'. Notese, que aqu tambin podemos elegir el destino y esto nos dejaguardarlo en el registro W si as lo requerimos.

    Para recordar COMlement es complemento File es registro.

    Afecta a:

    ZSe pone a 1 si la operacin da 0

    DECF

    Decrementa en una unidad, o lo que es lo mismo, resta 1 el contenido de unregistro

    Cdigo: DECF DECENA,W

    Si antes de la instruccin DECENA vale .255, despus de la instruccin W vale.254 y DECENA vale .255 Si por el contrario, hubieramos elegido el destino F,despus de la instruccin DECENA vale .254

    Para recordar DECrement es decremento File es registro.

  • 5/21/2018 Aprenda ASM Desde Cero

    18/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Afecta a:

    Zse pone a 1 si la operacin es 0

    DECFSZ

    Decrementa en uno, o lo que es lo mismo, resta en 1 el contenido de un registroy cuando este vale 0, el CP salta una instruccin

    Cdigo:LOOP DECFSZ TEMP GOTO LOOP BCF PORTB,0

    El CP descontar en 1 el registro TEMP y evala el valor, si no es cero, ejecutalnea siguiente que es GOTO LOOP, el cual se dirige de nuevo a la lnea LOOPDECFSZ TEMP el cual volver a descontar en 1 y evalua el valor, si es cero

    salta la lnea GOTO LOOP y ejecuta la instruccin BCF PORTB. Esta ltima lnea,el programador pondr la instruccin que necesite ejecutar.Este pequeo programa que acabamos de ver, es un temporizador o un retardoque tardar en salir del bucle dependiendo de la frecuencia de reloj y el valorcargado en TEMP.

    NOTA: Esta instruccin, tambin hay que elegirle el destino. En el caso que nose exprese, como en este caso, el MPLAB dar por sentado que el resultado seguardar en el registro F y no en W.

    Para recordar DECrement es decremento File es registro Skip es salto Zero quees cero.

    No afecta ningn bit del registro STATUS.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Diciembre 05, 2008, 09:52:23

    INCF

    Incrementa en 1, o suma 1, el contenido de un registro elegido por elprogramador.

    Cdigo: INCF INDF,F

    Si antes de la instruccin INDF vale H'29', despus de la instruccin INDF vale

    H'2A'. Notese que tambin podemos elgeir el destino. Si hubieramos elegido W,despus de la instruccin W vale H'2A' y INDF vale H'29'.

    Para recordar INCrement es incremento File es registro.

    Afecta a:

    Zse pone a 1 si el resultado es 0

    INCFSZ

    Incrementa en 1, o suma en 1, el contenido de un registro elegido por el

  • 5/21/2018 Aprenda ASM Desde Cero

    19/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    programador y cuando este es 0, el CP salta una instruccin.

    Cdigo:VOLVER INCFSZ CONTADOR GOTO VOLVER INCF PORTA

    El CP incrementar en 1 el registro CONTADOR y evala el valor, si no es cero,ejecuta lnea siguiente que es GOTO VOLVER, el cual se dirige de nuevo a lalnea VOLVER INCFSZ CONTADOR el cual volver a incrementar en 1 y evalua

    el valor, si es cero salta la lnea GOTO VOLVER y ejecuta la instruccin INCFPORTA. Esta ltima lnea, el programador pondr la instruccin que necesiteejecutar.Este pequeo programa que acabamos de ver, es un temporizador o un retardoque tardar en salir del bucle dependiendo de la frecuencia de reloj y el valorcargado en CONTADOR. Normalmente, se ut iliza el retardo con DECFSZ pero estetambin es vlido.

    NOTA: Esta instruccin, tambin hay que elegirle el destino. En el caso que nose exprese, como en este caso, el MPLAB dar por sentado que el resultado seguardar en el registro F y no en W.

    Para recordar INCrement es incremento File es registro Skip es salto Zero escero.

    No afecta ningn bit del registro STATUS.

    IORLW

    Realiza la operacin OR entre W y un literal elegido por el programador. Elresultado se guarda en W. La operacin es W OR L.

    Si antes de la instuccin W vale B'01110100' y el literal elegido es B'00011111',despus de la instrucc in W vale B'01111111'.

    Para recordar Inclusive es inclusivo ORes la operacin binaria OR Literal esliteral Wes el registro trabajo.

    Afecta a:

    Zse pone a 1 si la operacin da 0

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Diciembre 06, 2008, 10:39:20

    IORWF

    Realiza la operacin lgica OR entre el registro W y un registro elegido por elprogramador. La operacin es W OR F.

    Cdigo: IORWF PORTC,F

    Si antes de la instruccin W vale B'01111111' y PORC vale B'00001111' despusde la instruccin PORTC vale B'01111111' y W vale B'01111111'. Notese quepodemos elegir el destino y la otra opcin, como ya se dieron cuenta por lasinstrucciones pasadas, puede ser W.

  • 5/21/2018 Aprenda ASM Desde Cero

    20/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Para recordar Inclusive es inclusivo ORes la operacin binaria OR Wes elregistro trabajo y File es registro.

    Afecta a:

    Zse pone a 1 si el resultado es 0

    MOVLW

    Carga al registro W con un literal elegido por el programador para luego haceruna operacin matemtica o moverlo a otro registro como veremos msadelante. Sin duda alguna, una de las instrucciones ms usadas en laprogramacin ASM.

    Cdigo: MOVLW .255

    Si antes de la instruccin W vale .15, despus de la instruccin W vale .255.

    Para recordar MOVe es mover Literal es literal Wes el registro trabajo.

    Como es de esperar, no afecta ningn bit del registro STATUS.

    MOVF

    Mueve el contenido de un registro a otro registro elegido por el usuario.

    Cdigo: MOVF RETARDO,W

    Si antes de la instruccin W vale H'2A' y RETARDO vale H'FF', despus de lainstruccin W vale H'FF'. Notese que aqu podemos elegir el destino, y tenemos

    la posivilidad de elegir el destino al propio registro RETARDO. Al principio pareceinnecesario, pero se puede tomar como una verificacin, ya que se ve afec tadoel registro STATUS bit Z.

    Para recordar MOVe es mover y File es registro.

    Afecta a:

    ZSe pone a 1 si la operacin es 0

    Anteriormente, habamos dicho que esta instruccin se la puede tomar comovereficacin, para saber si se guard con el mismo valor que tena, el bit Z se

    pone a 1 si el valor es igual al que tena cargado.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Diciembre 08, 2008, 06:37:16

    MOVWF

    Mueve el contenido del registro W a un registro cualquiera elegido por elprogramador. Sin duda alguna, esta instruccin, es otra muy usada en laprogramacin ASM

    Cdigo:

  • 5/21/2018 Aprenda ASM Desde Cero

    21/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    MOVWF ADCON0

    Si antes de la intruccin W vale B'10000001' y ADCON0 vale 0x0, despus de lainstruccin ADCON0 vale 0x81.

    Para recordar MOVe es mover Wes el registro W y File es registro.

    No afecta ningn bit del registro STATUS.

    NOP

    No realiza ninguna operacin. Solo consume un ciclo de instruccin.

    Cdigo: NOP

    Para recordar No es no y OPeration es operacin.

    No afecta ningn bit del registro STATUS.

    RETFIE

    Carga al CP con el valor de la parte alta de la pila para volver al lugar dnde seencontraba el CP antes de atender la interrupcin. Al mismo tiempo, pone a 1 elbit GIE para activar de nuevo las interrupciones.

    Cdigo: RETFIE

    Para recordar REturn es retornar From es de la IntErrupt es interrupcin.

    No afecta ningn bit del registro STATUS.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Diciembre 17, 2008, 01:52:04

    RETLW

    Carga al CP con el valor de la parte alta de la pila para volver al lugar dnde seencontraba el CP desde dnde se llam a la subrutina y al retornar, lo hace conun literal cargado en W especificado por el programador. Esta instruccin, seutilizan en las tablas (para ms detalle, ver la explicacin del GOTO y CALL).

    Ejemplo:

    Cdigo: RETLW 'L'

    En este ejemplo, el MPLAB, carga en W el cdigo ASCII correspondiente a laletra L

    Extendiendo el ejemplo:

    Cdigo: PAGESELW TABLA ;CONFIGURA AL PCLATH PARA VOLVER AL LUGARCORRECTO

  • 5/21/2018 Aprenda ASM Desde Cero

    22/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    MOVFW contador ;CARGA A W LA POCICIN A LEER EN LA TABLAPOR EJEMPLO 3 CALL TABLA ;LLAMA A LA RUTINA TABLA CALL LCD_DATO ;LLAMA A LA RUTINA PARA MOSTRA AL LCD NOP;;TABLA ADDWF PCL,F ;SUMA AL PCL CON EL CONTENIDO DE W POREJEMPLO 3 RETLW '1' ;RETORNA CON 1 ASCII RETLW '2' ;RETORNA CON 2 ASCII RETLW '3' ;RETORNA CON 3 ASCII

    RETLW 'T' ;RETORNA CON 4 ASCII

    Este es un ejemplo sencillo de como utilizar RETLW. Para interpretar este cdigoempezamos desde PAGESELW, supongamos que el CP est en esta instruccin(que est explicado que hace) luego pasa a la instrucc in MOVFW contadory suponemos que tiene cargado 3 en decimal, por lo que W pasar a tener 3 en

    decimal. El CP continua con CALL TABLA, el CP saltar por encima a todas lasdems instrucciones y se dirige a la etiqueta TABLA y ejecuta la instruccinADDWF PCL,F En el cdigo hablamos que le suma 3 al PCL, por lo que saltaral RETLW '3' cargando a W con el cdigo ASCII 3. Retorna justo debajo del CALL TABLA, o sea retorna a CALL LCD_DATO y ejecuta la rutina correspondiente,cuando termina, regresa al NOP (que puede ser cualquier instruccin que

    necesite el programador.Si en cambio, contador hubiera tenido cargado 4 en decimal cuando llegue a latabla y le sume al PCL este apuntar a RETLW 'T' cargando en W el cdigocorrespondiente ASCII.

    Para recordar RETurn es retornar Literal es literal Wes el registro de trabajo W

    No afecta ningn bit del registro STATUS.

    RETURN

    Carga al CP con el valor de la parte alta de la pila para volver al lugar dnde se

    encontraba el CP cuando se llam a la rutina o subrutina.

    La diferencia con RETLW es que RETURN regresa sin cambiar a W. Este se utilizapara terminar una rutina y no se necesite ningn dato. Por ejemplo en la rutinaCALL LCD_DATO no nos sirve que vuelva con ningn valor ya que es una rutinapara enviar datos a un LCD, asi que esta rutina tendr implementada RETURN

    Por ejemplo:

    Cdigo: RETURN

    No afecta ningn bit del registro STATUS

    Para recordar RETURNes retornar.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Diciembre 21, 2008, 11:31:29

    RLF

    Rota hacia la izquierda los bit de un registro seleccionado por el programador. Eldestino de la operacin se puede elegir. Cada rotacin equivale a multiplicar por

  • 5/21/2018 Aprenda ASM Desde Cero

    23/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    2 si el bit C del registro STATUS es 0.

    Ejemplo:

    Cdigo: RLF PORTC,F

    Si antes de la instruccin PORTC vale B'00001000', despus de la instruccinvale B'00010000'. Si se hubiera elegido como destino W, PORTC despus de la

    instruccin continua valiendo B'00001000' y W vale B'00010000'

    Para recordar Rotate es rotar Left es izquierda File es el registro.

    Afecta a:

    Cse pone a 1 si hubo acarreo

    RRF

    Rota hacia la derecha los bits de un registro seleccionado por el programador. Eldestino de la operacin se puede elegir. Cada rotacin equivale a dividir por 2 si

    el bit C del registro STATUS es 0.

    Ejemplo

    Cdigo: RRF PORTB,F

    Si antes de la instruccin PORTB vale B'10000000' despus de la instruccinPORTB vale B'0100000'. Si se hubiera elegido como destino W, PORTB despusde la instruccin continua valiendo B'10000000' y W vale B'01000000'

    Para recordar Rotate es rotar Right es derecha File es el registro.

    Afecta a:

    Cse pone a 1 si hubo acarreo

    Extendiendo la explicacin de las instrucciones RRF y RLF

    A la hora de utilizar estas dos instrucciones, hay que prestarle atencin al bit Cdel registro STATUS. La razn de esto, es porque la rotacin se hace atravzdel bit C.

    Supongamos que tenemos lo siguiente:

    BIT C = 0TEMP = B'00010000'

    Ejecutamos la instruccin RRF y TEMP vale B'00001000'. O si ejecutamos lainstruccin RLF TEMP vale B'00100000'

    Pero si ahora tenemos:

    BIT C = 1TEMP = B'00010000'

  • 5/21/2018 Aprenda ASM Desde Cero

    24/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Ejecutamos la instruccin RRF y TEMP vale B'10001000'. O si ejecutamos lainstruccin RLF TEMP vale B'00100001'

    Vemos como rota los bit dependiendo del valor del bit C. Pero anteriormente,avamos dicho que estas dos instrucc iones afec tan al bit C. La ac tualizacin delbit C, lo hace despus de la rotacin. Lo vemos con un ejemplo:

    Cdigo: MOVLW B'10001001' MOVWF temp

    BCF STATUS,C ;PONEMOS A 0 AL BIT C RLF temp,F ;ROTAMOS A LA IZQUIERDA

    Al ejecutar este programa, nos dar lo siguientes resultados:

    TEMP = B'00010010'BIT C = 1

    Y para ver la diferencia vemos lo siguiente:

    Cdigo:

    MOVLW B'00000001' MOVWF temp BCF STATUS,C ;PONEMOS A 0 AL BIT C RLF temp,F ;ROTAMOS A LA IZQUIERDA

    Al ejecutar este programa, nos dar lo siguientes resultados:

    TEMP = B'00000010'BIT C = 0

    Algo que me haba olvidado de mencionar pero que MIGSANTIAGO del foro deTODOPIC (http://www.todopic.com.ar/foros) estuvo atento es que ests dos

    instrucciones, nos sirve para enviar datos en forma serial utilizando el bit C quelo veremos ms adelante.

    Recordemos que, para utilizar estas instrucc iones para multiplicar o dividir,debemos asegurarnos de que el bit C, est en 0.

    SLEEP

    Pone al microcontrolador en bajo consumo.

    Cdigo: SLEEP

    Para recordar SLEEPes dormir.

    Afecta a:

    TDse pone a 1PDse pone a 1

    SUBLW

    Resta el contenido de W con un literal de hasta 8 bit (.255). El resultado seguarda en W.

  • 5/21/2018 Aprenda ASM Desde Cero

    25/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Cdigo: SUBLW .20

    Si antes de la instruccin W vale .23 despus de la instruccin W vale .3 Parasaber si el resultado es negativo o positivo, hay que chequear el bit C delregistro Status. Si hay acarreo, el resultado es negativo, y por el contrario, si nohay acarreo es positivo.

    Para recordar SUBtraction es restar Literal es literal y Wes el registro W.

    Afecta a:

    Zse pone a 1 si el resultado es 0DCse pone a 0 si hay acarreo del bit del 4 al 5 bit del registro(recordemos que en la resta, es distinto a la suma, por eso, se pone a 0 sihubo acarreo).Cse pone a 0 si hubo acarreo (recordemos que en la resta, es distinto ala suma, por eso, se pone a 0 si hubo acarreo).

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Enero 09, 2009, 11:21:11

    SUBWF

    Resta el contenido de un registro seleccionado por el programador con elcontenido del registro W. La frmula es F - W = d. d es la direccin elegida porel programador en dnde se guardar el resultado que puede ser el registro W oel registro elegido por el programador.

    Ejemplo:

    Cdigo: SUBWF MINUENDO,W

    Si antes de la instruccin W vale .55 y MINUENDO vale .56, despus de lainstruccin, MINUENDO vale .56 y W vale .1

    Para recordar SUBtraction es resta Wes el registro W y File es el registroelegido.

    Afecta a:

    Zse pone a 1 si el resultado es 0

    DCse pone a 0 si hubo un acarreo del 4 bit al 5 bit (recordemos que en laresta, es distinto a la suma, por eso, se pone a 0 si hubo acarreo).Cse pone a 0 si hubo acarreo del 7 bit. (recordemos que en la resta, esdistinto a la suma, por eso, se pone a 0 si hubo acarreo).

    SWAPF

    Intercambia los bits de un mismo registro elegido por el programador. Los 4 bitde menor peso, pasan a ser lo 4 bits de mayor peso, y los 4 bits de mayor peso,pasan a ser los 4 bits de menor peso. El destino puede ser seleccionado.

    Cabe pensar que puede ser una instruccin de muy poco uso, pero todo lo

  • 5/21/2018 Aprenda ASM Desde Cero

    26/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    contrario si se utilizan con las interrupciones. Microchips recomienda suutilizacin a la hora de salvar el contexto y restaurarlo en una interrupcin yaque no modifica el registro STATUS. Cuando trabajemos con la interrupciones, sever que es muy recomendable salvar el registro STATUS y W en la RAM paraluego restaurarlos. Si utilizamos la instruccin MOVF, es afectado el bit Z,perdiendo su estado original en el momento de la interrupcin. Esto se soluciona,utilizando la instruccin SWAPF. No se preocupen si no lo entiende por ahora. Loentenderan cuando veamos ejemplo de interrupciones.

    Ejemplo:

    Citar SWAPF STATUS,W

    Si antes de la instruccin W bale H'55' y el registro STATUS vale B'00100100',despus de la instruccin el registro STATUS vale H'24' y el registro W valeB'01000010'

    Para recordar SWAPes intercambiar NIBBLE es porcin File es el registro.

    No afecta ningn bit del registro STATUS.

    XORLW

    Realiza la operacin lgica XOR entre un literal o valor y el registro W. Elresultado queda guardado en el registro W.

    Ejemplo:

    Cdigo: XORLW B'11000101'

    Si antes de la instruccin W vale B'11111000', despus de la instruccin W vale

    B'00111101'.

    Para recordar XORes la operacin lgica XOR Literal es un valor Wes el registroW.

    Afecta a:

    Zse pone a 1 si la operacin es 0

    XORWF

    Realiza la operacin XOR entre un registro elegido por el programador y el

    registro W. La operacin es F XOR W = d. El resultado se puede elegir dndeser guardado.

    Ejemplo:

    Cdigo: XORWF PORTB,F

    Si antes de la instruccin PORTB vale B11111110' y W vale B'00000001', despusde la instruccin W vale .1 y PORTB vale B'11111111'.

    Para recordar XORes la operacin lgica XOR Wes el registro W y File es el

  • 5/21/2018 Aprenda ASM Desde Cero

    27/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    registro elegido.

    Afecta a:

    Zse pone a 1 si la operacin es 0

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Febrero 08, 2009, 11:14:27

    Una vez que vimos todas las instrucciones y asumiendo que ya se la saben dememoria (tiempo tuvieron de sobra) y si no lo han echo, es hora de hacerlo,empezemos a escribir programas muy sencillos. Pero cmo?. Si se estn asiendoesta pregunta, es hora de leer desde el primer mensaje. Tienen que acordarcelas pociciones de las cuatro columnas.

    Recuerden que vamos a escribir los programas en el MPLAB, por lo que si an nolo tienen, es hora de descargarlo de la pgina de Microchip(http://www.microchip.com) en forma gratuita e instalarlo en la PC.Lamentablemente, este programa trabaja solo bajo windows, por los que tienenmac o Linux, no lo prodrn hacer si no es por un emulador de windows y an as,

    no se si funcione correctamente.

    Empezaremos bien desde el principio y para ello, voy a explicar cosas nuevas.Todo programa tiene un encabezado que se repite en cada programa nuevo yque vara segn el PIC a utilizar y las prestaciones del programa a escribir.Muchas de las personas crean plantillas nuevas para ahorrarce el trabajo. Yo soyuna de ellas y aqu les doy una plantilla que pueden utilizar sin problemas ymodificarlas segn su necesidad.

    He aqu la plantilla que tambin est adjuntado.

    LIST P=16F877A

    INCLUDE __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC;;---------------------------------------------------------------;VARIABLES.;---------------------------------------------------------------; CBLOCK H'20'

    ENDC;RESET ORG H'00' GOTO INICIO

    ORG H'04' ;VECTOR INTERRUPCININTERRUP;INICIO; END

    Primera lnea:

    LIST P=16F877A

    Esta lnea, sive solo para el MPLAB y le indica que el PIC a utilizar es el 16F877A.

  • 5/21/2018 Aprenda ASM Desde Cero

    28/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Se debe actualizar segn sea necesario.

    Segunda lnea:

    INCLUDE

    Esta lnea sirve a la hora de compilar ya que dentro de este archivo que vieneincluido dentro del MPLAB, le indica al ensamblador dnde estn ubicados cadaregistro y el nombre de cada bits del PIC a utilizar as, nos ahorra de hacerlo

    nosotros mismos. Si desean abrir el archivo, lo pueden hacer con el notepad ocualquier editor de texto. Se debe actualizar segn sea necesario.

    Tercera lnea:

    __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

    Linea muy importante pero se puede omitir. Aqu se configura la palabra deconfiguracin del PIC y que est en el datasheet del pic correspondiente.En mi caso, yo la omito y luego lo configuro desde el ICPROG(http://www.icprog.com) a la hora de pasar el archivo .hex al pic. Es por esoque esta lnea est incompleta para el pic a utilizar pero completa para el PIC

    16F84.

    Vemos en ms detalle esta lnea: __CONFIG Directiva para el ensamblador deque debe generar la palabra de configuracin correspondiente de acuerdo a:

    _CP_OFF la proteccin de lectura del PIC desabilitado._PWRTE_ON Reset de encendido habilitado_WDT_OFF Perro guardin desabilitado._XT_OSC Oscilador a c ristal.

    El caracter & sirve para unir una directiva con otra.

    Ttulo: Re: Aprenda ASM desde ceroPublicado por: Leon Picen Febrero 08, 2009, 01:30:36

    Cuarta lnea:

    ;;---------------------------------------------------------------;VARIABLES.;---------------------------------------------------------------;

    Este no es ms que un pequeo encabezado. El ensamblador omitir estas lneasy solo porque empieza con ";". Recuerden que, toda lnea que empieze con ";" escomentario y el ensamblador la omitir.

    Justo por debajo de este encabezado, penemos las variables. a que le llamovariables? a pociciones de memorias o nombre de bit que yo quiera darlepersonalmente.Por ejemplo, dentro del archivo P16F877A.INC a la pocicin de memoria 0x05 lellama PORTA pero si yo quero llamarlo PUERTO_A, es qu dnde le indico alensamblador.

    Cmo se hace?

  • 5/21/2018 Aprenda ASM Desde Cero

    29/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    Es muy fcil y con la instruccin "EQU"

    PUERTO_A EQU H'05'

    Si al Bit RA6 lo quero llamar LED6 lo hacemos as:

    LED6 EQU 6

    Supongamos que quiero encender el LED 6 que est en el Puerto a bit 6, y estese activa con un 1 lgico, ponemos esta instruccin:

    BSF PUERTO_A,LED6

    Y el ensamblador lo traducir as: BSF 0X05,0X06

    Quinta lnea:

    CBLOCK H'20'

    ENDC

    A estas dos lneas las unifique porque van juntas. Entre ellas van los nombres decada pocicin de la RAM que nosotros querramos nombrar, o cada Registro quequerramos renombrar.Recuerden que los registros estn implementados en la RAM y que la pocicin dela RAM que puede utilizar el usuario para guardar cosas, empieza desde unapocicin que est indicada en el datasheet. Para el caso de 16F877 empiezadesde la pocicin 0x20 como lo ven en la figura siguiente.

    (http://www.ucontrol.com.ar/forosmf/index.php?action=dlattach;topic=137.0;attach=130;image)

    La directiva CBLOCK H'20' indica que empezamos a nombrar pociciones dememoria desde la ubicacin 0x20. Por ejemplo

    CBLOCK H'20'temperaturademora1demora2ENDC

    La pocicin 0x20 se llama temperatura, la pocicin 0x21 se llama demora1 y assucesivamente. Tambien existe otra forma de nombrar o renombrar pociciones dememoria o registro, y ya lo vimos que es con la directiva EQU. por ejemplo:

    temperatura EQU H'20'demora1 EQU H'21'demora2 EQU H'22'

    Sexta lnea:

    RESET ORG H'00' GOTO INICIO ORG H'04' ;VECTOR INTERRUPCININTERRUP

  • 5/21/2018 Aprenda ASM Desde Cero

    30/30

    8/7/2014 Imprimir Pgina - Aprenda ASM desde cero

    http://www.ucontrol.com.ar/forosmf/tutoriales-guias-y-cursos-en-ucontrol/asm-desde-cero/?action=printpage;PHPSESSID=0c9bedc3444ff30390a6d310c59c0f06

    He unificado estas lneas porque por lo general as se escribe en la mayora denuestros programas. Vemos con ms detalles estas lneas.

    RESET ORG H'00'

    Aqu es en dnde empieza el CP cuando se enciende al PIC. Y estos se debe,porque cuando hay un reset por el pin MCLR o un reset interno producido por,encendido del PIC o, por ejemplo, del perro guarda, el vector reset se ubica enla pocicin 0x00 de la memoria de programa.

    Como pueden apreciar, hemos llamado a la pocicin 0x00 con el nombre deRESET, ya que la primer columna es una etiqueta. Las etiquetas sirven paranombrar pociciones de memoria de programa.

    ORG H'00' indica que se empieza a esc ribir desde la pocicin 0x00 por lo que lasiguiente instrucin, quedar alojada en la pocicin 0x00. ORG es una directiva,y solo sirve para el ensamblador. Esta lnea, SIEMPREdebe estar y no se puedemodificar, salvo la etiqueta.

    Siguiente lnea es GOTO INICIO, esta instrucc in queda alojada en la pocicin0x00 y es un salto a la etiqueta INICIO. Este salto tiene que estar, porque enlas siguientes pociciones de memoria de programa, est la interrupcin, externa

    e interna del PIC. Por eso es necesario hacer el salto.

    Siguiente lnea nos encontramos con ORG H'04', como se dieron cuenta, es unadirectiva. Esta pocicin de memoria, indica el vector de interrupcin. Cuandoestn habilitadas las interrupciones y una de ella se activa, el CP apuntar aqu,a la pocicin 0x04.

    Siguiente lnea nos encontramos con la etiqueta INTERRUP. Si trabajamos conlas interrupciones, aqu es donde escribiremos lo que necesitamos hacer conellas.

    Sptima lnea:

    ;INICIO;

    Vemos la etiqueta INICIO. Aqu vendr el CP cuando alla un reset gracias alGOTO INICIO ubicado en la pocicin 0x00 de la memoria de programa. De estamanera, saltamos un montn de instrucciones que no debemos ejecutar antes.Como por ejemplo las interrupciones si hubiese.Por ende, a partir de esta etiqueta, estar nuestro programa principal.Configuraremos los puertos, las insterrupciones y empezaremos a darle trabajo alCP.

    Octava lnea:

    END

    Esta es una directiva y solo sirve para el ensamblador indicando que despus deesta directiva, se termin el programa. Instruciones que estn por debajo deesta lnea, no sern tenido encuenta. Y esta directiva es obligatoria colocarla.

    Powered by SMF 1.1.19 | SMF 2011, Simple Ma chines

    http://www.simplemachines.org/about/copyright.phphttp://www.simplemachines.org/