Estructura Del Lenguaje Assembler
Estructura Del Lenguaje Assembler
Unidad 3. Programacin
El lenguaje ensamblador maneja una instrucciones y directivas necesarias para la programacin del microcontrolador.
Estructura de lenguaje Assembly Etiquetas Es una designacin de texto fcil de leer en una lnea de un programa, o una seccin de un programa donde el micro puede saltar a... - o el comienzo de un conjunto de lneas de un programa. La etiqueta empieza con una letra del alfabeto o con un subrayado "_". La longitud de la etiqueta puede ser de hasta 32 caracteres. Tambin es importante que la etiqueta se inicie en la primera columna.
Start _end P123 Is it bigger?
Comentarios
Son una serie de palabras que escribe un programador para hacer el programa ms claro y legible. Se coloca despus de una instruccin, y debe comenzar con un punto y coma ";". Los comentarios no hacen parte del programa y no son reconocidos por el compilador.
#define test . Ifdef test ; como la prueba fue definida ......; las instrucciones de estas lneas ejecutaran endif
Directivas Es similar a una instruccin, pero esta es independiente en el modelo de microcontrolador, y representa una caracterstica de la lengua propia ASM. En las Directivas se dan generalmente significados o propsitos a travs de variables o registros.
Directiva usada frecuentemente: PROCESSOR 16F84 #include "p16f84.inc" _CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
Directivas de control
Intercambios de una parte de texto por otra Sintaxis: # define <text> [<another texto>]
#DEFINE
Descripcin: Cada vez que <text> aparece en el programa, ser cambiado por el texto <another>. Ejemplo: # define turned_on 1 # define turned_off 0 Incluir un archivo adicional en un programa Sintaxis: # include # include <nombre_de_archivo> "file_name" Descripcin: esta directiva tiene el efecto como si todo el archivo se copi en un lugar donde la "incluyan". Si el nombre del archivo se encuentra en
#INCLUDE
los corchetes, se trata de un archivo de sistema y si est dentro de las comillas se trata de un archivo de usuario. La directiva "include" contribuye a una mejor distribucin del programa. Ejemplo: #include<regs.h> #include "subprog.asm" Da un valor numrico constante a la designacin
CONSTANT
Sintaxis: Constante <nombre> = <valor> Descripcin: Cada vez que <nombre> aparece en el programa, ser
sustituido por <valor>. Ejemplo: constant MAXIMUM=100 constant Lenght=30 Da un valor numrico variable a la designacin Sintaxis: Variable <nombre> = <valor> Descripcin: Mediante el uso de esta directiva, las designaciones textuales cambian con un Valor particular. Difiere de la directiva CONSTANT en que despus de la aplicacin, el valor de la designacin de texto se puede cambiar. Ejemplo: variable level=20 variable time=13 Define el sintaxis de variables del ASM Sintaxis: <name_variable> set <value> Descripcin: Para la variable <name_variable> se aade la expresin <valor>. La directiva SET es similar a la EQU, pero con el nombre de directiva SET, la variable puede ser redefinida seguida de una definicin. Ejemplo: level set 0 length set 12 level set 45 Define la constante del ASM Sintaxis: <nombre_constante>equ<valor> Descripcin: a el nombre de una constante <name_constant> se aade
VARIABLE
SET
EQU
un valor <value> Ejemplo: five equ 5 six equ 6 seven equ 7 Define la direccin en la memoria del microcontrolador en la cual el programa est siendo grabado. Sintaxis: <label>org<value>
ORG
Descripcin: Esta es la directiva ms utilizada. Con la ayuda de esta directiva definimos que parte del programa ser iniciada en la memoria del programa. Ejemplo: Start org 000
movlw 0xFF movwf PORTB Termina el programa Sintaxis: end Descripcin: al final de cada programa es necesario escribir 'end' para que
END
el traductor de ASM sepa que no hay ms instrucciones. Ejemplo: movlw 0xFF movwf PORTB end
Directivas de configuracin
Ajuste de los bits de configuracin. Sintaxis: _config<term> or _config<address>,<term> Descripcin: Oscilador, la aplicacin de temporizador de vigilancia (Watchdog) y circuito de reinicio interno se definen. Antes de utilizar esta directiva, el procesador debe ser definido usando la directiva PROCESSOR. Ejemplo: _CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC Define el modelo del microcontrolador. Sintaxis: Processor <microcontroller_type>
_CONFIG
PROCESSOR
Directivas de datos
Define un bloque para las constantes nombradas. Sintaxis: Cblock [<term>] <label>[:<increment>],<label>[:<increment>] endc Descripcin: da valor a las constantes nombradas. Cada trmino siguiente recibe un valor mayor por 1 que su persecutor. Si el parmetro <increment> tambin es dado, entonces el valor dado en el parmetro <increment> es aadido a las siguientes constantes. Valor del parmetro <term> es el valor inicial. Si no es dado, es considerado cero. Ejemplo: Cblock 0x02 first, second, third ;first=0x02, second=0x03, third=0x04 Endc cblock 0x02 first : 4, second : 2, third ;first=0x06, second=0x08, third=0x09 endc Finaliza el bloque de definicin constante. Sintaxis: endc Descripcin: la directiva es usada al final de la definicin de un bloque de constantes para que el traductor de ASM pueda saber que no hay ms constantes. Ejemplo: cblock 0x02 first : 4, second : 2, third ;first=0x06, second=0x08, third=0x09 endc Define un byte de datos. Sintaxis: [<label>]db <term> [, <term>,.....,<term>] Descripcin: reserva un byte en la memoria del programa. Cuando hay ms de un trmino los cuales necesitan asignrseles un byte para cada uno, se asignaran uno tras otro. Ejemplo:
db 't', 00f, 'e', 's', 012
CBLOCK
ENDC
DB
DE
Sintaxis: [<term>] de <term> [, <term>,....., <term>] Descripcin: esta directiva es usada para definir el byte de la memoria EEPROM. Aunque se puede utilizar para cualquier locacin en cualquier memoria. Ejemplo: org H'2100' de "Version 1.0" , 0 Definir la tabla de dato. Sintaxis: [<label>] dt <term> [, <term>,........., <term>]
DT
Descripcin: Esta directiva genera series de instruccin RETLW, una instruccin por cada trmino. Ejemplo: dt "Message", 0 dt first, second, third
Ejemplo
Mayor que Menor que Menor que, o igual Igual No igual Operacin AND en los bits Exclusivo OR en los bits Lgica OR sobre bits Lgica OR sobre bits Lgica OR Igual Aadir y asignar Restar y asignar Multiplicar y asignar Dividir y asignar Divide el mdulo y asignar Mueve a la izquierda y asigna Mueve a la derecha y asigna Lgica AND y asigna Lgica OR y asigna Exclusivo OR en los bits y asigna Incrementa por uno Reduce por uno
if entry_idx > num_entries if entry_idx < num_entries if entry_idx < = num_entries if entry_idx = = num_entries if entry_idx ! = num_entries flags = flags & ERROR_BIT flags = flags ERROR_BIT flags = flags | ERROR_BIT if (len ==512) && (b ==c) if (len ==512) || (b ==c) entry_index = 0 entry_index +=1 entry_index -=1 entry_index *= entry_length entry_index /= entry_length entry_index %=1 flags << = 3 flags >> = 3 flags & = ERROR_FLAG flags | = ERROR_FLAG flags = ERROR_FLAG 1++ 1-
++ -
Instrucciones
Estn ya definidas por el uso de un microcontrolador especfico, por lo que slo nos queda seguir las instrucciones para su uso en lenguaje ASM. La forma en que escribimos una instruccin tambin se denomina "sintaxis".
movlw H`01FF` goto Start
Para comprender las instrucciones se utilizan algunos trminos y abreviaturas que deben ser conocidos para leer adecuadamente las instrucciones.
Trminos utilizados Nemotecnicos: Es la abreviatura de la instruccin. Es la manera como es conocida en el programa. Operandos: Es la abreviatura de la instruccin. Es la manera como es conocida en el programa. Descripcin: Describe la accin de la operacin. Ciclos: Hace referencia al tiempo que tarda la instruccin en ejecutarse. Flags: Hace referencia a los bits especiales que indican el resultado de una operacin ejecutada con la instruccin.
Abreviaturas utilizadas Z: Es un bit espacial el cual indica que una operacin dio como resultado un cero (0). DC: Es un bit espacial el cual indica que ocurri un acarreo decimal como resultado de una operacin. C: Es un bit espacial el cual indica que como resultado de una operacin ocurri un acarreo. W: Se refiere al registro de trabajo. El registro de trabajo es un registro especial del microcontrolador encargado del transporte de datos entre registros. d: Es la abreviaturas de destino y se refiere al registro donde ser arrojado una operacin. f: Se refiere a un registro de propsito general tambin llamado de usuario.
Las instrucciones pueden clasificarse segn las acciones en: Instrucciones que manejan registros. Instrucciones que manejan bits Instrucciones de control y de operandos inmediatos
Descripcin
Suma W y f AND W con f
Ciclo
1 1
Flags
C, DC, Z Z
10
CLRF CLRW COMF DECF DECFSZ INCF INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF
f --f,d f,d f,d f,d f,d f,d f,d f --f,d f,d f,d f,d f,d
Borra f Borra W Complementa f Decrementa f Decrementa f, si es 0 salta Incrementa f Incrementa f, si es 0 salta OR entre W y f Mueve f Mueve W a f No opera Rota f a la izqda. a travs del carry Rota f a la dcha. a travs del carry Resta a f el reg. W Intercambia f XOR de W con f
1 1 1 1 1 (2) 1 1 1 1 1 1 1 1 1 1 1
Descripcin
Borra bit de f Pone a 1 el bit de f Comprueba un bit de f y salta si es 0
Ciclo
1 1 1 (2)
Flags
Ninguno Ninguno Ninguno
11
Comprueba un bit de f
BTFSS
f,b
y salta si es 1
1 (2)
Ninguno
ANDLW CALL CLRWDT GOTO IORLW MOVLW OPTION RETLW SLEEP TRIS XORLW
k k k k k k k k --f k
AND inmediato con W Llamada a subrutina Borra Watchdog Salto incondicional OR inmediato con W Mueve a W un valor inmediato Carga el registro OPTION Retorno y carga de W Pasa a estado de reposo Carga el registro OR exclusiva a W
1 2 1 2 1 1 1 2 1 1 1
12
Instrucciones de condicin
Programa de salto condicional Sintaxis: If <conditional_term> Descripcin: Si la condicin se cumple en <conditional_term>, parte del programa que sigue sera ejecutado. Y si no se cumple, entonces la siguiente parte ELSE o ENDIF de la directiva sera ejecutado. Ejemplo: If level=100 goto FILL else goto DISCHARGE endif Es la alternativa de `IF` programa en bloque con trminos de condicin. Sintaxis: else Descripcin: Se utiliza con la Directiva IF como una alternativa si el trmino condicional no se cumple. Ejemplo: If time< 50 goto SPEED UP else goto SLOW DOWN endif Finaliza la seccin condicional del programa. Sintaxis: endif Descripcin: esta directiva se escribe para informar al traductor de ASM que es el final del bloque de condiciones.
IF
ELSE
ENDIF
13
endif Ejecucin de la seccin del programa siempre y cuando se cumpla la condicin. Sintaxis: while<condition>Endw Descripcin: las lneas de programa entre While y ENDW se ejecutan mientras se cumpla la condicin. Si una condicin dej de ser vlida, el programa continuara ejecutando las instrucciones hasta la lnea ENDW. El nmero mximo de instrucciones entre While y ENDW puede ser de 100. Ejemplo: While i<10 i=i+1 endw Finaliza la parte de condicin del programa. Sintaxis: endw Descripcin: la instruccin es escrita al final de la condicin del bloque WHILE, para que el traductor de ASM sepa que es el final
WHILE
ENDW
del bloque de condiciones. Ejemplo: while i<10 i=i+1 endw Ejecucin de una parte del programa si el smbolo fue definido. Sintaxis: ifdef<designation> Descripcin: Si la designacin <designation> es previamente descrita, muy comnmente por la instruccin #define, las instrucciones que le siguen sern ejecutadas hasta que las
IFDEF
directivas ELSE o ENDIF no sean alcanzadas. Ejemplo: #define test . Ifdef test ; como fue definida la prueba ......; las instrucciones de esta lnea ejecutaran endif
14
Ejecucin de parte del programa si el smbolo fue definido. Sintaxis: ifndef<designation> Descripcin: si la designacin <designation> no fue previamente definida, o si su definicin fue borrada con directiva #undefine, las instrucciones que siguen sern ejecutadas hasta que las directivas ELSE o ENDIF sean alcanzadas.
IFNDEF
Ejemplo: #define test .......... #undefine test .......... ifndef test; como fue definida la prueba ......; las instrucciones de esta lnea ejecutaran endif
15
Enlaces externos
http://pic-linux.foroactivo.net/gpsim-f8/ejemplo-simulacion-de-circuitoen-gpsim-t67.htm
16