|
Microcontroladores
|
|
|
Detalles de las directivasEn las siguientes líneas nos dedicaremos a la descripción detallada del directivas utilizadas por MPASM. Cada definición mostrará: Ø Sintaxis Ø Descripción Ø Ejemplo _ _BADRAM .–Identifica las posiciones de RAM invalidasSintaxis _ _BADRAM <el expr>[-<expr>] [, <el expr>[-<expr>]] DescripciónLas directivas _ _MAXRAM y _ BADRAM juntas acceden a los flag de los registros no implementados. _ _BADRAM define las posiciones de las direcciones RAM inválidas. _ _ BADRAM está diseña para el uso con la directiva __MAXRAM. La directiva __ BADRAM debe ir precedida de una directiva __ MAXRAM. Cada < expr> debe ser al menos igualar al valor especificado por __MAXRAM. Una vez se utiliza la directiva _ _MAXRAM, se habilitan las direcciones de RAM y se inhabilitan posiciones de RAM utilizando la directiva _ _BADRAM.
Ejemplo ; definición DE RAM para el PIC16F84 __MAXRAM H’CF’ __ BADRAM H’07’,H50’-H’7F’,H87’
Mirar también en: _ _MAXRAM Volver
a la tabla de directivas BANKISEL –Genera el código que selecciona el banco de memoria RAM para el direccionamiento Indirecto.Sintaxisbankisel <etiqueta> Descripción Se usa para generar el archivo objeto. Esta directiva es una instrucción para el linkador para que seleccione el banco de memoria adecuado para acceder directamente a la <etiqueta> especificada. La <etiqueta> debe ser especificada sola. No puede realizarse ninguna operación delante de la <etiqueta>. La <etiqueta>debe estar definida previamente. El linkador generará el banco apropiado que selecciona el código. En esencia para los dispositivos de 14 bits, la instrucción genera el set/clear del bit apropiado en el IRP de registro de STATUS. Para los dispositivos de 16-bits, MOVLB o MOVLR son las que lo generan. Si el usuario puede especificar la dirección indirecta completamente sin estas instrucciones, no se genera ningún código. Para más información, refiérase a Capítulo 4, “Usando MPASM Create Relocatable Objects.” Ejemplo movlw
Var1 movwf FSR bankisel
Var1 ... movwf INDF Mirar también en PAGESEL
BANKSEL Volver
a la tabla de directivas BANKSEL.- Genera el código que selecciona el código de memoria RAMSintaxisbanksel <etiqueta> Descripción Se utiliza para generar un archivo objeto. Esta directiva da instrucción al linkador para que seleccione el banco de memoria adecuado para acceer directamente a la etiqueta. La etiqueta debe especificarse sola. Ninguna operación puede realizarse delante de la etiqueta. La etiqueta debe haberse definido previamente. El linkador genera el banco apropiado que selecciona el código . En esencia para los dispositivos de 12 bits, las instrucciones de set/clear se generan los bit apropiados en el FSR. Para los dispositivos de 14 bits, se generan las instrucciones de set/clear de los bit del registro de STATUS. Para los dispositivos de 16 bits, se generan instrucciones MOVLB o MOVLR . Para dispositivos de 16 bits reforzados se generan MOVLB. Si el dispositivo contiene sólo un banco RAM, no se genera ninguna instrucción. Para más información ver el Capítulo 6. Ejemplo: banksel Var1 movwf Var1 Mirar también en: BANKISEL
PAGESEL Volver
a la tabla de directivas CBLOCK
–
Define a Block of Constants
Sintaxis cblock [<expresión>] <etiqueta>[:<increment>][,<etiqueta>[:<increment>]] endc Descripción Defina una lista de constantes definidas (por un nombre). A cada < label > se le asigna un valor inmediatamente superior que al anterior < label >. El propósito de esta directiva es asignar direccines a muchas etiquetas. La lista finaliza cuando se encuentra la directiva ENDC. < expr> indica el valor de arranque para el primer nombre del bloque de etiquetas. Si no se asigna en la expresión, la primera variable recibirá un valor superior al de la variable final del CBLOCK anterior. Si el primer CBLOCK en el archivo fuente no tiene ningún <expresión>, los valores asignados empiezan con el cero. Si <increment> se especifica, entonces a la próxima <etiqueta> se le asigna el valor de < increment > superior a la anterior <etiqueta>. Pueden darse los nombres múltiples en una línea, separada por las comas. Ejemplo cblock 0x20
; a la primera variable se le asigna el valor 20 name_1,
name_2
; name_2, se le asigna el valor 21 name_3,
name_4
; name_4 se le asigna 23. endc cblock
0x30 TwoByteVar:
0, TwoByteHigh, TwoByteLow Queue:
QUEUE-SIZE QueueHeadm
QueueTail Double1:2,
Double2:2 endc Mirar también en Volver
a la tabla de directivas CODE –Empieza la sección de código de un Archivo ObjetoSintaxis[<etiqueta>] CODE [<dirección de ROM>] DescripciónSe usa para generar un archivo del objeto. Declara el principio de una sección de código del programa. Si < etiqueta> no se especifica, la sección se nombra .code. empezando en la dirección siguiente a la dirección especificada o se asignará al eslabón tiempo si ninguna dirección se especifica. EjemploRESET code H’01FF’ goto START Mirar también en: EXTERN
GLOBAL
IDATA
UDATA
UDATA_ACS UDATA_OVR
UDATA_SHR Nota: Dos secciones del mismo archivo fuente no pueden tener el mismo nombre. Volver
a la tabla de directivas _ _CONFIG – Configuración de los bit de configuración de procesadorSintaxis
_
_config <expr> OR _ _config <addr>, <expr> DescripciónFija los bit de configuración del procesador con el valor descrito por la expresión Para los dispositivos PIC18CXX, la dirección de la palabra de configuración también debe ser especificada por <addr>. Ver en el manual de referencia de los microcontroladores la descripción e los bit de la palabra de configuración para cada microcontrolador. Antes de utilizar esta directiva, debe declararse mediante la directiva LIST o la directiva PROCESSOR. Si esta directiva se usa en la familia de los PIC17CXX, el archivo Hexadecimal debe ponerse en formato INHX32 utilizando la directiva LIST. Ejemplo LIST P=12ce519 ,n=66 INCLUDE
<P12ce519.INC> _
CONFIG CP_OFF&WDT_ON
& MCLRE_ON & IntRC_OSC La primera línea de directivas indica que el número de líneas que se incluirá en el listado de una página. La segunda línea indica al compilador el fichero que deberá incluir en la compilación, en este caso es el archivo que incluye las declaraciones para el microcontrolador PIC12C519. En la tercera línea apararen los bit para la configuración del modo de funcionamiento. Al compilar el programa estos bits se configuran por defecto y se incluyen en el archivo hexadecimal que se genera, el cual se traslada al microcontrolador en la fase de grabación. Se puede deducir fácilmente que con esta línea la configuración queda de la siguiente manera: no se protege el código, se habilita el WDT, el MCR será externo y el tipo de oscilador será interno por RC. Mirar también en: Volver
a la tabla de directivas CONSTANT.- Declara los símbolos de las constantes
Sintaxisconstant <label>=<expr> [...,<label>=<expr>] DescripciónCrea los símbolos para el uso de las expresiones del MPASM. No pueden ponerse a cero las constantes una vez se ha inicializado, y la expresión deber ser totalmente admitida en el momento de la asignación. Esta es la diferencia principal entre las constantes (CONSTANT) y aquellas que se definen como variables (VARIABLE) o aquellas creadas por la directiva SET. Por otra parte pueden usarse constantes y variables intercambiables en las expresiones. Ejemplo variable RecLength=64 ; Poner por defecto ;
RecLength constant
BufLength=512
; Init BufLength .
; RecLength may .
; be reset later .
; in RecLength=128 .
; constant
MaxMem=RecLength+BufLength ;CalcMaxMem
Mirar también en:
SET
VARIABLE Volver
a la tabla de directivas DATA – Crea Datos numéricos y de TextoSintaxis[<etiqueta>]data <expr>,[,<expr>,...,<expr>] [<etiqueta>]data
“<text_string>”[,”<text_string>”,...] Descripción Esta directiva inicializa una o más palabras de memoria de programa con los datos de la expresión. Estos datos pueden ser en forma de constantes, reubicable o etiquetas externas, o expresiones formadas por cualquiera de las anteriores. Los datos también pueden ser un carácter ASCII, < text_string>, entre comillas simples para caracteres o entre dobles comillas para cadenas de caracteres. Ejemplo data reloc_label+10
; constante data 1,2,ext_label
; constante, esterna data “hola 1,2,3”
;cadena de caracteres data ‘N’
; carácter sencillo data
start_of_program ; etiqueta recolocable Mirar También en: Volver
a la tabla de directivas DB – Declara datos de un ByteSintaxis[<etiqueta>] db <expr>[,<expr>,...,<expr>] Descripción Reserva memoria de programa para palabras de tamaño 8 bits. Las expresiones múltiples continúan llenando los bytes de memoria de forma consecutiva hasta el final de las expresiones. Si el número de datos de las expresiones es impar, el último byte será el cero. Al generar un archivo del objeto, esta directiva también puede usarse para declarar los valores de los datos de inicialización. Para mas información mirar la directiva IDATA. Ejemplo
DB
´t´,0x0f, ‘e’, 0x0f, ‘s’ , 0x0f, ‘t’ , ‘\n’ Mirar También en: Volver
a la tabla de directivas DE – Define datos en la EPROMSintaxis[<etiqueta>] de <expr>[,<expr>,...,<expr>] Descripción Reservan palabras de memoria de 8 bits. Cada expresión reserva un valor de 8 bits. Los bits superiores de la palabra de programa son cero. Carda carácter de un string se guarda en un posición separada. Ejemploorg H’2100’ de “Mi Programa, v1.0” ,0 El resultado en la memoria EEPROM es el siguiente:
Mirar También en: DATA
DB
DT
DW
Volver
a la tabla de directivas #DEFINE –Defina una Etiqueta de Substitución de TextoSintaxis
#define
<name> [<string>] DescripciónEsta directiva define una cadena de substitución de texto. Dondequiera que <string> se encuentre en el ensamblador, se sustituirá por < string >. Usando la directiva sin < string > genera una definición de tipo <name> para ser utilizada internamente y puede ser utilizada por la directiva IFDEF. Esta directiva emula el ANSI 'C ' standard como #define. Define símbolos con este método no está disponible para ser usado por el MPLAB. Ejemplo 1 #define banco0 bcf status,5 #define banco1 bsf status,5 Siempre que a lo largo del programa se escriba banco0, se selecciona el banco 0 de memoria. De igual modo, siempre que se escriba banco1, se selecciona el banco 1 de memoria. Ejemplo 2#define longitud 20 #define control 0x19,7 #define posicion (X,Y,Z) (Y-(2 * Z +X)) . . . test_label
dw posición
(1, longitud, 512) bsf control ; set bit 7 de la posición 19 RAM Mirar También en: IFDEF
IFNDEF
#UNDEFINE
Volver
a la tabla de directivas DT
–
Define Tabla
Sintaxis[<etiqueta> dt >expr> [, <expre>, …., <expre>] DescripciónEsta genera, durante la fase de ensamblado, tantas instrucciones retlw como caracteres u octetos la acompañen.
Ejemplo dt “mensaje”,0x10,.15 Esta directiva genera las instrucciones: rtlw 0x6D (m en ASCII) rtlw 0x65 (e en ASCII) rtlw 0x6E (n en ASCII) rtlw 0x73 (s en ASCII) rtlw 0x61 (a en ASCII) rtlw 0x6A (j en ASCII) rtlw 0x65 (e en ASCII) rtlw 0x10 rtlw 0xf (15 en decimal) Mirar también en Volver
a la tabla de directivas DW – Define datos de un WordSintaxis[<etiqueta> dw <expr> [, <expre>, …., <expre>] DescripciónReserva memoria de programa para los datos, inicializando estas posiciones con valores específicos. Se guardan los valores en posiciones de memoria sucesivas y se incrementa en uno el contador. Las expresiones pueden ser literales y se guardan como se ha descrito en la directiva DATA. Al generar el archivo objeto, esta directiva también puede usarse para declarar los valores de los datos inicializados. Mirar la directiva IDATA para más información. Ejemplodw 39,
“diagnostic 39”, (d_list*2+d_offset) dw diagbase-1 Mirar también en Volver
a la tabla de directivas ELSE – Empieza el bloque alternativo de un IFSintaxiselse DescripciónUsada junto con la directiva IF para proporcionar un camino alternativo de ensamblado si al evaluar la condición es falso. Else puede usarse dentro de un bloque de programa o en una macro.
Ejemplo SPEED
macro rate if
rate < 50 dw
lento else dw
rapido endif endm Mirar también en: IF ENDIF Volver
a la tabla de directivas END – Fin de bloque de ProgramaSintaxisEnd DescripciónEsta directiva indica el final del programa y es obligatoria. Si se detecta el fin de fichero y no se ha encontrado la directiva END se produce error. Todas las líneas posteriores a la línea en la que se encuentra esta directiva, se ignoran y no se ensamblan.
Ejemplo Inicio bsf STATUS,RP0 ; Comienza el programa ejecutable
clrf
PORTB
bcf STATUS,RP0
movlw b’00000010’
movwf PORTB
end
Volver
a la tabla de directivas ENDC – Termina un bloque automático de constantesSintaxisendc DescripciónENDC se escribe al final de una lista de constantes CBLOCK. Debe escribirse para indicar el fin de la lista.
Ejemplo cblock 0x20
; a la primera variable se le asigna el valor 20 name_1,
name_2
; name_2, se le asigna el valor 21 name_3,
name_4
; name_4 se le asigna 23. endc Mirar también en: Volver
a la tabla de directivas Volver
a la tabla de directivas ENDIF – Fin de bloque de condiciones de ensambladoSintaxisendif DescripciónEsta directiva marca el extremo de un bloque condicional de ensamblado. ENDIF puede usarse dentro de un bloque de programa o en una macro. Mirar también en: IF ELSEVolver
a la tabla de directivas ENDM – Fin de la definición de una macroSintaxisendm DescripciónTermina una
definición del macro que comienza con la directiva MACRO.
EjemploLed1 macro ;Enciende el LED1 del conectado al PortB
bsf
STATUS,RP0
clrf PORTB
bcf STATUS,RP0
movlw b’00000010’ movwf PORTB
endm Mirar también en MACRO
EXITM Volver
a la tabla de directivas ENDW .- Fin de bucle de esperaSintaxisendw DescripciónENDW Finaliza un tiempo de espera. Cuando se cumple la condición especificada por la directiva WHILE , el código fuente entre la directiva WHILE y la directiva ENDW se extenderá repetidamente en la fuente del ensamblador y el código fuente. Esta directiva puede usarte dentro de un bloque de programa o en una macro. Ejemplo: Véase el ejemplo de WHILE Mirar también enWHILE Volver
a la tabla de directivas EQU – Define una constante para el ensambladorSintaxis<etiqueta> equ <espr> DescripciónEsta
directiva permite asignar el valor de <expr> a un identificador
<etiqueta>. El resultado puede ser el resultado de una expresión
compuesta por otros identificadores y tan compleja como se desee.
Generalmente,
el identificador es un nombre que describe el valor de manera más
significativa para el programador. Suele utilizarse para definir constantes y
direcciones de memoria. Así, es más fácil recordar SEG_POR_HORA que
recordar el valor 3600 o en el caso de una dirección de memoria TRISA que
0x05.
Ejemplocuatro EQU 4 ; asigna el valor del número 4 a la etiqueta 4 Mirar también en:
SET Volver
a la tabla de directivas ERROR – Emite un mensaje de ErrorSintaxiserror “<text_string>” Descripción< text_string> imprime en un formato idéntico a cualquier error de
MPASM el mensaje. < text_string> puede tener un total de ochenta
caracteres. Ejemploerror_checking macro arg1 if arg1 >= 55
; Si el argumento está fuera de rango error “error_checking-01 el argumento está fuera de rango” endif Mirar también en: MESSG Volver
a la tabla de directivas ERRORLEVEL .- Sitúa el nivel de errorSintaxiserrorlevel {0|1|2|+<msgnum>|-<msgnum>} [, ...] DescripciónTipos de mensajes que están impreso en el archivo listable y el archivo de errores.
Los valores para < msgnum> están en el Apéndice C. Los mensajes de Error no pueden ser desactivado. La opción de 0, 1, o 2 anula el mensaje individual que desactiva o habilitando. Ejemplo: errorlevel 1, -202 Mirar también en: Volver
a la tabla de directivas EXITM – Salida de una MacroSintaxisexitm DescripciónLa fuerza el retorno inmediato de la expansión de la macro durante el ensamblado. El efecto es igual que encontrar una directiva ENDM. Ejemplo
test
macro
filereg if
filereg == 1 ; check for valid file exitm else error
"bad file assignment" endif endm Mirar también en: Volver
a la tabla de directivas EXPAND – Expande una lista de MacroSintaxisexpand DescripciónExtienda todas las macros en el archivo de listado. Esta directiva es aproximadamente equivalente al comando de la opción de línea /m MPASM, pero puede desactivarse por la acción de un NOEXPAND. Mirar también en: MACRO
NOEXPAND Volver
a la tabla de directivas EXTERN
–Declare
una Etiqueta Definida como
Externa
Sintaxis
el extern <la etiqueta> [, <la etiqueta>...]
Descripción
Se utiliza
para generar un archivo del objeto. Declara nombres del símbolo que pueden
ser usado en el módulo actual
pero se define como global en un módulo diferente.
La declaración de EXTERN debe ser incluida antes de <etiqueta>.
Debe expecificarse al menos una etiqueta en la misma línea. Si
<etiqueta> se define en el el
módulo actual, MPASM generará un error de la etiqueta doble.
Ejemplo
extern
Function ... call
Function Volver
a la tabla de directivas FILL
.-
Llena la memoria
Sintaxis
[<label>] fill <expr>,<count> Descripción
Genera <count> de sucesos
de palabras de programa o byte (en los dispositivos PIC18CXX ), <expr>.
Se limita por paréntesis, <expr>
puede ser una instrucción en ensamblador. Ejemplo: fill 0x1009, 5 ; Llenar con una constante fill
(GOTO RESET_VECTOR), NEXT_BLOCK-$ Mirar También en: Volver
a la tabla de directivas GLOBAL
–Exportación
una Etiqueta
Sintaxis
global < etiqueta> [, <etiqueta>...]
Descripción
Para el uso al generar un archivo del objeto. Declara nombres del símbolo
que son definido en el módulo actual y debe estar disponible en otros módulos.
La declaración GLOBAL debe
anteceder a una <etiqueta> . Por lo menos una etiqueta
debe especificarse en la línea. udata Var1 res 1 Var2 res 1 global Var1, Var2 code AddThree global
AddThree addlw 3 return Volver
a la tabla de directivas IDATA – Comienza una sección de identificadores en el archivo objetoSintaxis
[<label>]
idata [<RAM address>] DescripciónPara generar
un archivo objeto. Declara el inicio de una sección de inicicaliazción de
datos. Si <label> no se especifica, la sección se nombra .idata. La
primera dirección es la que se especifica, sino se indica, se asignará en el
momento de linkar. Ningún código puede generarse en este segmento del
programa. El montador
generará una entrada de la tabla parecer-despierta para cada byte
especificado en la sección idata . El usuario debe linkar entonces o debe
incluir el código de la inicialización apropiado.
Ver en el Capítulo
9 los ejemplos de códigos de la inicialización para las varias familias de
PICmicro. Note que esta directiva no está disponible para los dispositivos de
12-bits. Pueden usarse
las directivas RES, DB y DW para reservar el
espacio para las variables. RES
generará un valor inicial de cero. DB
inicializará los bytes sucesivos de RAM. DW
inicializará bytes sucesivos de RAM, con el siguiente orden, en el byte-bajo
/ byte-alto. Para más información, refiérase a Capítulo 6. Ejemplo: idata LimitL dw 0 LimitH
dw D’300’ Gain
dw D’5’ Flags
db 0 String
db ‘Hi there!’ Mirar También en: EXTERN
GLOBAL
TEXT UDATA
UDATA_ACS UDATA_OVR
UDATA_SHR Volver
a la tabla de directivas __IDLOCS
-
El Procesador fija las posiciones de ID
Sintaxis
_
_idlocs <expr> or _ _idlocs <expr1>, <expr2> DescripciónPara los
PIC12CXX, PIC14000, y PIC16CXX, _ _idlocs pone los cuatro localizadores ID en
hexadecimal valorando la <expr>. Para
los dispositivos PIC18CXX, _ idlocs pone dos bytes en el dispositivo
ID < expr1> el valor del hexadecimal de <expr2>. Esta
directiva no es válido para la familia de PIC17CXX. Por ejemplo,
si <expr> evalúa 1AF, primero
(la dirección más baja) del localizador ID
es el cero, el segundo es el uno, el tercero es el diez, y el cuarto es
quince. Antes de usar esta directiva, debe declararse el procesador a través de
la línea de comandos con la directiva LIST, o la directiva PROCESSOR. Ejemplo_ _idlocs H’1234’ Mirar también en: LIST
PROCESSOR
_
_CONFIG
Volver
a la tabla de directivas IF – Comienza un bloque de código condicionalSintaxis
if
<expr> DescripciónEmpiece ejecución de un bloque condicional de ensamblado. Si < expr> es verdadera, el código inmediato al IF se ensamblara. En caso contrario, las instrucciones siguiente se saltan hata encontrar una directiva ELSE o una directiva ENDIF. La evaluación de una expresión que sea cero se considera desde el punto de vista de la lógica FALSA. La evaluación de una expresión que de cualquier valor distinto de dero se considera como VERDADERA. las directivas IF (SI) y WHILE (MIENTRAS) operan con el valor lógico de una expresión. Un expresión verdadera (TRUE) garantiza devolver un valor distinto de cero, y falsa (FALSE) el valor cero. Ejemplo
if
version == 100
; check current version movlw
0x0a movwf
io_1 else movlw
0x01a movwf
io_2 endif Mirar
también en ELSE ENDIFVolver
a la tabla de directivas IFDEF – Ejecuta si el símbolo ha sido definidoSintaxis
ifdef
“<label>” DescripciónSi <label> se ha definido previamente, normalmente utilizando la
directiva #DEFINE o poniendo el
valor en el comando de línea del MPLAB, se toma el camino condicional. El
ensamblado continuará hasta encontrar un ELSE emparejado o una directiva
ENDIF. Ejemplo; ******************************* ; doble microcontrolador ;********************************
#DEFINE PIC674
ifdef
PIC674 LIST
p = 12ce674
INCLUDE
<P12ce674.INC>
else
LIST p=12ce519
INCLUDE
<P12ce519.INC>
endif ifdef PIC674 ;Si está declarada PIC674, el reloj será externo __CONFIG
CP_OFF & WDT_OFF & MCLRE_OFF & EXTER_COSC_NOCLKOUT &
HSOSC else __CONFIG
CP_OFF & WDT_OFF & MCLRE_OFF & IntRC_OSC endif Si se pine un “;” delante de #DEFINE PIC674, se compila para el
microcontrolador PIC12CE519, si se quita el “;” lo hace para el PIC674. Si
el microcontrolador que se usa es el 674, el oscilador que se utiliza es el
externo y sin habilitar la salida de reloj (CLKOUT) mientras que si se utiliza
el 519, el oscilador será interno por RC. En la fase de ensamblado se
comprobará si está declarada la variable. Si es cierta, se ejecutará la
primera línea de configuración y si no lo es, se ejecutará la que hay después
de ELSE. Mirar también en: #DEFINE
ELSE
ENDIF
IFNDEF
#UNDEFINE Volver
a la tabla de directivas IFNDEF – Ejecuta si el símbolo no ha sido definidoSintaxis
ifndef
“<label>” DescripciónSi <label> no se ha
definido previamente, o se ha utilizando la directiva #UNDEFINE , entonces el
código que hay a continuación de la directiva será ensamblado. Se seguirá
ensamblando hasta encontrar una directiva ELSE emparejada o encontrar una
directiva ENDIF Ejemplo; ******************************* ; doble microcontrolador ;********************************
#DEFINE PIC674
ifdef PIC674 LIST
p = 12ce674
INCLUDE
<P12ce674.INC>
else
LIST p=12ce519
INCLUDE
<P12ce519.INC> endif ifdef PIC674 ;Si está declarada PIC674, el reloj será externo __CONFIG
CP_OFF & WDT_OFF & MCLRE_OFF & EXTER_COSC_NOCLKOUT &
HSOSC else __CONFIG
CP_OFF & WDT_OFF & MCLRE_OFF & IntRC_OSC endif Si se pine un
“;” delante de #DEFINE PIC674, se compila para el microcontrolador
PIC12CE519, si se quita el “;” lo hace para el PIC674. Si el
microcontrolador que se usa es el 674, el oscilador que se utiliza es el
externo y sin habilitar la salida de reloj (CLKOUT) mientras que si se utiliza
el 519, el oscilador será interno por RC. En la fase de ensamblado se
comprobará si está declarada la variable. Si es cierta, se ejecutará la
primera línea de configuración y si no lo es, se ejecutará la que hay después
de ELSE. Mirar también en: #DEFINE
ELSE
ENDIF
IFNDEF
#UNDEFINE Volver
a la tabla de directivas INCLUDE – Incluye Fichero fuentes adicionalesSintaxis
include
<<include_file>> include
“<include_file>” DescripciónEl archivo
especificado se lee en como código fuente. El efecto es igual que si el
texto entero
del archivo include se pusiera aquí. Al final-del-archivo, el código
fuente al ensambla reasumirá del archivo de la fuente original. Se permiten
seis niveles de anidamiento. El
< include_file> puede escribirse entre comillas o entre los símbolos de mayor que y menor que (< >). Si se especifica
totalmente el camino del fichero include, sólo ese camino se investigará. Si
no se indica camino, el orden de la búsqueda es: el directorio activo actual,
el directorio de archivo de fuente, el
directorio ejecutable de MPASM.
Ejemploinclude <p16F84.inc>
;define el archivo donde están definidos todos los ; registros del PIC16F84 include “p16F84.inc”
; también se puede definir de esta forma include
“c:\sys\sysdefs.inc”
; define system con su camino include
<regs.h>
; define regs.h Volver
a la tabla de directivas LIST – Opciones de ListadoSintaxis:
list
[<list_option>, ..., <list_option>] Descripción Se admite solo en una línea , la directiva LIST tiene el efecto sobre el listado de salida. Por otra parte, uno de lo siguiente opciones pueden proporcionarse controlando la estructura del proceso de ensamblado o el archivo listando:
Nota: Todas las opciones LIST están definidas como número decimales Ejemplo: list p=17c42, f=INHX32, r=DEC Mirar también en: NOTLIS
PROCESSOR
RADIX
ERRORLAVEL Volver
a la tabla de directivas LOCAL
–
Declara la variable de la Macro como Local
SintaxisLocal <label>, <label> Descripción
Declara que
el elemento de datos especificado se considera en el contexto local de la
macro. <label> puede ser idéntico a otra etiqueta declarada fuera de la
definición de la macro; no habrá ningún conflicto entre las dos. Si la
macro es llamada recursivamente, cada llamada tendrá su propia copia local. Ejemplo <main code segment> : : len equ
10
; versión global size equ
20
; Comprobar que una variable local ;
puede crearse ahora y modificarse test
macro size
; local
len, label
; local len y label len
set
size
; modifica local len label res
len
; reserva buffer len set
len-20
; endm
; fin de la macro Mirar
también en Volver
a la tabla de directivas MACRO
-
Declara la definición de Macro
Sintaxis<label> macro [<arg>, ..., <arg>] DescripciónUna macro define un conjunto de instrucciones alas que se asigna un nombre. Posteriormente, el programa fuente del usuario puede incluir el nombre de una macro y todas las instrucciones que la componen quedan insertadas en el momento de realizar el ensamblado, formando parte del programa. Ejemplo: La estructura de la macro es la siguiente: Nombre_macro MACRO
Instrucción_1
Instrucción_2
……………..
……………..
Instrucción_n ENDM Donde: Nombre_macro : indica el nombre de la macro que posteriormente se empleará en el programa fuente para incluir todas las instrucciones que estén definidas bajo este nombre. Las directivas MACRO y ENDMACRO forman el cuerpo dentro del cual están incluidas todas las instrucciones deseadas. Cada vez que se emplea Nombre_macro en el programa fuente, implica insertar todas las instrucciones que conlleve dicho nombre en el programa Mirar también en ENDM
LOCAL
IF
ELSE
ENDIF
EXITM Volver
a la tabla de directivas _ _MAXRAM
–
Define la Posición de RAM mayor
Sintaxis_ _MAXRAM <expr> Descripción Las
directivas _ _MAXRAM y _ _BADRAM dan
juntas accesos a los flag de registro no implementado. _ _MAXRAM define el valor máximo
absoluto válido de la memoria RAM e inicializa las direcciones del mapa de
memoria a utilizar, el valor debe ser siempre superior a la máxima dirección
del banco 0 y menor de 1000h. Este directiva esta diseñada
para usarla junto con la directiva_ _ BADRAM para proteger ciertas direcciones
de memoria. _ _MAXRAM puede usarse más de una vez en un archivo de la fuente. Cada
uso redefine la dirección de memoria, se debe de tener en cuenta que cada vez
que esto ocurre, se borra el contenido de la memoria. Ejemplo ; definición DE RAM para el PIC16F84 __MAXRAM H’CF’ __ BADRAM H’07’,H50’-H’7F’,H87’ movwf H’07’
; Genera un warning de dirección de RAM no valida movwf H’87’
; Genera un warning de dirección de RAM no valida
Mirar también en Volver
a la tabla de directivas MESSG
–
Crea mensajes definidos por el usuario
Sintaxis
Messg
“<message_text>” DescripciónGenera un mensaje informativo a ser imprimido el archivo listable. El texto del mensaje puede tener hasta 80 carácteres. Emitiendo una directiva MESSG no pone el código de retorno de error. Ejemplomssg_macro macro messg
" mssg_macro-001 llamada sin el argumento " endm Mirar
también en Volver
a la tabla de directivas NOEXPAND – Termina la expansión de la MacroSintaxisnoexpand Descripción Desactiva
la expansión de la macro en el archivo de listado. Mirar también en
Volver
a la tabla de directivas NOLIST – Desactiva el Listado de salidaSintaxisnolist DescripciónDesactiva el archivo del listado de salida Mirar
también en Volver
a la tabla de directivas ORG –Origen de las Instrucciones del programaSintaxis[<label>] org <expr> DescripciónEl origen del programa comienza la dirección indicada en la <expr> de la directiva. Si se especifica una <etiqueta> se le da el valor de la <expr>. Si no hay ningún ORG especificado, la generación del código comienza en la dirección cero. Ejemploint_1 org 0x20 ;
Vector 20 va aquí int_2 org int_1+0x10 ;
Vector 20 va aquí Mirar también en RES FILL Volver
a la tabla de directivas PAGE – Inserta el número de Página en el listadoSintaxis:page Descripción Inserta el número de página
en el listado del programa Mirar también en: LIST TITLE SUBTITLE Volver
a la tabla de directivas PAGESEL - Genera Página que Selecciona el CódigoSintaxis:Pagesel
<label> Descripción Para el uso general de un archivo objeto. Al linkar una instrucción para generar la página que selecciona el código para poner los bits de la página en la página que contiene las etiquetas designadas .Una única <etiqueta> debe especificarse. Ninguna operadión puede realizarse delante de la < etiqueta>. La <etiqueta> debe haberse definido previamente. El linkador generará la página apropiada que selecciona el código. Para los micros de 12-bits, las instrucciones set/clear de pedazo apropiadas en el ESTADO registran el estado generado. Para los dispositivos de 14-bits y los de 16-bits, MOVLW y MOVWF generarán las instrucciones para modificar el PCLATH. Si el dispositivo contiene sólo una página de memoria del programa, ningún código se generará. Para
los dispositivos de PIC18CXX, este orden no hará nada.Para más información,
refiérase a Capítulo 6. Ejemplo
Pagesel
GotoDest goto
GotoDest .... pagesel
CallDest call CallDest Mirar también en BANKSEL BANKISELVolver
a la tabla de directivas PROCESSOR – Fija el tipo de procesadorSintaxis:
processor
<processor_type> Descripción Fija el tipo de microcontrolador utilizado <processor_type>. Ejemploprocessor 16F84 Mirar también en:
Volver
a la tabla de directivas RADIX – Especifica el rango (RADIX) por defectoSintaxis:
radix
<default_radix> Descripción Define el
rango para las expresiones de los
datos. El radix predefinido por defecto es el hexadecimal. Los valores del radix son: el hexadecimal (hex), decimal (dec), u octal
(oct). Mirar también en: radix dec Mirar también en: LIST Volver
a la tabla de directivas RES – Reserva memoriaSintaxis:[<lavel>]
res <mem_units> Descripción Al indicador
de la posición de memoria se le incrementa desde la posición actual las
unidades que especifica < mem_units>. En el código no reubicable,
<la etiqueta>puede ser una dirección de memoria de programa. En el código
reubicable (usando MPLINK), también pueden usarse RES para reservar el
almacenamiento de los datos. Ejemplo: Buffer RES 64 ;reserva 64 palabras para almacenar Mirar también en: ORG
FILL
Volver
a la tabla de directivas SET – Define Variable en EnsambladorSintaxis:<etiqueta> set
<expresión> Descripción <etiqueta> asume el valor de la expresión de MPASM válida
especificada por <expresión>.La directiva SET es funcionalmente equivalente a la
directiva EQU sólo que los valores SET puede ser alterado como por otra directiva SET. Ejemplo: area
set
0 ancho
set
0x12 largo
set
0x14 area
set
largo * ancho Volver
a la tabla de directivas SUBTITLE – Especifica el subtítulo del programaSintaxis:
subtitle
“<sub_text>” Descripción <sub_text>
es una cadena de caracteres ASCII imprimibles que se indica entre dobles
comillas. Debe tener 60 caracteres o menos. Esta directiva establece el texto
a ser usado en la segunda línea
de cada página en el archivo de impresión. Ejemplo: subtitle “sección de diagnostico” Mirar también en: Volver
a la tabla de directivas SPACE – Inserta líneas en blancoSintaxis:space <expr>
Descripción Inserción el número de líneas en blanco en el archivo de listado indicadas en <expr>. Ejemplospace 3 ;Inserta tres líneas en blanco Mirar también en: Volver
a la tabla de directivas TITLE – Especifica el título del programaSintaxis:
title
“<title_text>” Descripción <title_text>
es una cadena de caracteres ASCII imprimibles que se indica entre dobles
comillas. Debe tener 60 caracteres o menos. Esta directiva establece el texto
a ser usado en la línea inicial de cada página en el archivo de impresión. Ejemplo: title “código de operación, rev 5.0” Mirar también en: Volver
a la tabla de directivas UDATA – Empieza la sección de datos no inicializados en el archivo objetoSintaxis
[<label>]
udata [<RAM
address>] Descripción
Para el uso al generar del archivo objeto. Declara el inicio de una sección de datos a inicializar . Si <label> no se especifica, la sección se nombra .udata. La primera dirección se indica con a la dirección especificada o se asignará a continuación de la dirección especifica. No se puede generar ningún código en este segmento. La directiva RES debe utilizarse para reservar espacio para los datos. Nota.- Dos secciones en el mismo archivo fuente no pueden tener el mismo nombre. Para más información, ver el Capítulo 6. Ejemplo: udata Var1 res 1 Double res 2 Mirar también en: TEXT
IDATA
UDATA_OVR UDATA_SHR
EXTERN
GLOBAL Volver
a la tabla de directivas UDATA_OVR – Comienza la sección de datos no inicializados superpuestosSintaxis
[<label>]
udata_ovr
[<RAM address>] Descripción
Para el uso al generar un archivo del objeto. Declara el principio de una sección de los datos de inicialización superpuestos. Si no se especifica <label> , la sección es nombrada .udata_ovr . La dirección de arranque se indica al principio o se asignará en momento de linkar si no se especifica ninguna dirección. El espacio declarado por esta sección es overlayed para todas las otras secciones del udata_ovr del mismo nombre. Es una manera ideal de declarar las variables temporales ya que permite que las variables múltiples sean declaradas en la misma posición de de memoria. Ningún código puede genere en este segmento. La directiva RES debe usarse para reservar el espacio para los datos. Ejemplo Temps udata_ovr Temp1
res 1 Temp2
res 1 Temp3
res 1 Temps udata_ovr LongTemp1 res 2
; ésta será una variable en la ;misma posición que Temp1 y
Temp2 LongTemp2 res 2
; ésta será una variable en la posición ;que
Temp3 Mirar
también en: TEXT
IDATA
UDATA
EXTERN
GLOBAL
UDATA_SHR Volver
a la tabla de directivas UDATA_SHR – Empieza la sección de datos no inicializados compartidosSintaxis
[<label>]
udata_shr
[<RAM address>] Descripción
Para el uso al generar un archivo del objeto. Declara el inicio de una sección de los datos de uninitialized compartido. Si <la etiqueta> no se especifica, la sección es nombrada .udata_shr. La dirección de arranque se inicializa la dirección si no se asignará en momento del linkado cuando no se indique ninguna dirección. Esta directiva se usa para declarar variables que se asignan en RAM que es compartido por todos los bancos del RAM (es decir los unbanked RAM). Ningún código puede generarse en este segmento. La directiva RES debe usarse para reservar el espacio para los datos. Ejemplo
Temps udata_shr Temp1 res 1 Temp2 res 1 Temp3 res 1 Mirar también en
EXTERN
GLOBAL
IDATA
UDATA
UDATA_ACS UDATA_OVR
TEXT Volver
a la tabla de directivas #UNDEFINE – Anula etiqueta de sustituciónSintaxis
#undefine
<label> Descripción<la etiqueta> es previamente un identificador definido con la directiva #DEFINE . Esta debe ser una etiqueta valida para el MPASM. El identificador indicado es borrado de la tabla de símbolos. Ejemplo
#define length 20 : : #undefine length Mirar también en
Volver
a la tabla de directivas VARIABLE - Declara un símbolo como variableSintaxis
variable <label>[=<expr>][,<label>[=<expr>]...] DescripciónCrea los símbolos para el uso en las expresiones de MPASM. Las variables y constantes puede intercambiarse en las expresiones. La directiva VARIABLE crea un símbolo que es funcionalmente equivalente a los creados por la Ddirectiva SET. La diferencia es que la directiva VARIABLE no requiere que los símbolos se inicialicen cuando se declaran. Note que no se pueden actualizar los valores de las variables dentro de un operando. Se debe utilizar líneas separadas para asignar variables, incrementos y decrementos. Ejemplo
Por favor mirar el ejemplo de la directiva CONSTANT Mirar también en Volver
a la tabla de directivas WHILE – Realiza el bucle mientras la condición es verdaderaSintaxis
while <expr> : : endw DescripciónLas líneas de comandos comprendidas entre WHILE y los ENDW se ensamblan mientras el valor de la <expr> sea TRUE (verdadera). Una expresión que al ser valuada da cero, se considera como FALSE (falsa). Una expresión que al evaluarla es distinta de cero, se considera como TRUE (verdadera). Una expresión se garantiza como TRUE (verdadera) cuando devuelve un valor distinto de cero, y FALSE (falsa) cuando el valor es cero, Un bucle WHILE puede contener un máximo de 100 líneas y repetirlo un máximo de 256 veces.Ejemplo
test_mac
macro count variable
i i = 0 while
i < count movlw
i i += 1 endw endm start test_mac
5 end Mirar también en
ENDW
IF
Volver
a la tabla de directivas
Operadores Aritméticos
y de Procedencia
Volver
a la tabla de directivas
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||