Documente Academic
Documente Profesional
Documente Cultură
Curso de Microcontroladores
PIC
Directivas
Son comandos insertados en el programa
que controlan el proceso de ensamblado
No tienen traducción al código máquina
También se les denomina
“pseudoinstrucciones”.
Suelen escribirse en la segunda columna y
en mayúsculas, aunque no es obligatorio.
1
END
End Program Block. Indica fin de
programa.
Es la única directiva obligatoria ya que el
ensamblador necesita saber donde
termina el proceso de ensamblado.
Se pone en la última línea del programa.
Todas las líneas posteriores a la línea en la
que se encuentra esta directiva son
ignoradas y no se ensamblan.
ORG
(Set Program Origin). Su sintaxis es:
[<label>] ORG <expr>
Indica al programa ensamblador a partir
de que posición de memoria de programa
tiene que ensamblar las instrucciones.
Ejemplo: ORG 0x04
Si las instrucciones de un programa
comienzan a escribirse sin indicar ORG, el
ensamblador toma por defecto ORG 0x00
Pueden escribirse varios ORG en el mismo
programa
IES Juan de la Cierva (Madrid). Desarrollo
de Productos Electrónicos
2
EQU
(Define an Assembler Constant). Su sintaxis
es:
<label> EQU <expr>
Es una etiqueta de asignación. El valor
<expr> es asignado a la etiqueta <label>.
Usualmente las asignaciones EQU se
ponen al principio del programa (antes
que las instrucciones)
Siempre que <label> aparece en el
programa es sustituido por el valor
numérico de la expresión que se le haya
asignado.
IES Juan de la Cierva (Madrid). Desarrollo
de Productos Electrónicos
_ _ CONFIG
Esta directiva indica la configuración elegida para
el proceso de grabación del microcontrolador.
Ejemplo:
__CONFIG _CP_OFF
_CP_OFF & _WDT_OFF
_WDT_OFF & PWRTE_ON & _XT_OSC
_XT_OSC
3
LIST P= <tipe>
Indica el tipo de procesador utilizado.
Ejemplo:
LIST P=16F84A
INCLUDE
Incluye ficheros fuente adiccionales
El archivo especificado se lee como
código fuente.
El efecto es igual que si el texto
entero del archivo INCLUDE se
pusiera aquí.
Ejemplo:
INCLUDE <P16F84A.INC>
IES Juan de la Cierva (Madrid). Desarrollo
de Productos Electrónicos
4
MESSG
Permite crear mensajes definidos por
el usuario que aparecen al finalizar el
proceso de ensamblado y en el
fichero listable *.lst
El mensaje puede tener hasta 80
caracteres.
Su sintaxis es:
MESSG “<message_text>”
IES Juan de la Cierva (Madrid). Desarrollo
de Productos Electrónicos
ERROR
Genera un mensaje de error idéntico a
cualquier error del ensamblador MPASM.
Si el proceso de ensamblado ejecuta esta
directiva, aparece una pantalla de error.
El texto del mensaje no puede tener mas
de 80 caracteres.
Su sintaxis es:
ERROR “<text string>”
5
(1)
ERRORLEVEL
Set Message Level: Situa el nivel de
Error. Define los tipos de mensajes
que se guardan en el fichero lst y de
errores.
Sintaxis:
Errorlavel 0|1|2|<+|-> <msgnum>
(2)
ERRORLEVEL
Errorlavel 0|1|2|<+|-
|1|2|<+|-> <msgnum
<msgnum>
>
Si se pone Afecta
2 Imprime errores
-<msgnum>
msgnum> Inhibe impresión del mensaje
<msgnum>
msgnum>
+<msgnum
+<msgnum>
> Habilita impresión del mensaje
<msgnum>
msgnum>
IES Juan de la Cierva (Madrid). Desarrollo
de Productos Electrónicos
6
(1)
IF y ENDIF
Estas directivas limitan el principio y el final de
un bloque condicional de ensamblado
Su sintaxis es:
IF <expr
<expr> >
...............
ENDIF
Si <expr
<expr> > es verdad, el código inmediato al IF se
ensamblará. En caso contrario las instrucciones
siguientes se saltan hasta encontrar un directiva
ELSE o una directiva ENDIF.
(2)
IF y ENDIF
Ejemplo:
..............................................
IF (Fin_Tabla
(Fin_Tabla>0xFF)
>0xFF)
ERROR “Cuidado!:La tabla ha superado el tamaño de la pagina de los”
los”
MESSG “primeros 256 bytes de memoria ROM. No funcionará correctamente”
correctamente”
MESSG “Para solucionarlo, procurad situar esta subrutina de manera
manera que”
MESSG “no supere est posición o leer nota de aplicación AN566”
ENDIF
7
ELSE
Usada junto la directiva IF para
proporcionar un camino alternativo
de ensamblado si al evaluar la
condición es falsa. ELSE puede
usarse dentro de un bloque de
programa o en una macro.
DE
Reserva palabras de memoria de 8 bits en
la memoria EEPROM de datos.
Sintaxis:
[<label
[<label>]
>] DE <expr>[,<
expr>[,<expr
expr>,
>, ...<expr
...<expr>]
>]
Cada expresión reserva un valor de 8 bits.
Cada carácter de una expresión se guarda
en una posición separada.
Ejemplo:
ORG 0x2100 ;Corresponde con la zona
;de memoria EEPROM
DE “Programa EEPROM_04 Versión 2.5 5 de Junio de 2004”, 0x00
8
DEFINE
Define un cadena de sustitución de texto.
Donde quiera que se encuentre <name>
en el ensamblador se sustituirá por
<string>
Sintaxis:
#DEFINE <name> [<string>]
Ejemplo:
#DEFINE LED PORTA,4 ;El led se conecta en la línea 4
..................
bsf LED ;Enciende el LED
IES Juan de la Cierva (Madrid). Desarrollo
de Productos Electrónicos
DT
Genera durante la fase de ensamblado tanta instrucciones
retlw como caracteres u octetos la acompañan.
Sintaxis
DT “mensaje”,0x10,.15
Esta directiva genera los códigos de operación de las
siguientes instrucciones:
retlw 0x06 ; (‘m’ en ASCII)
retlw 0x65 ; (‘e’ en ASCII)
retlw 0x6E ; (‘n’ en ASCII)
retlw 0x73 ; (‘a’ en ASCII)
retlw 0x61 ; (‘s’ en ASCII)
retlw 0x6A ; (‘j’ en ASCII)
retlw 0x65 ; (‘e’ en ASCII)
retlw 0x10
retlw 0x0F ; (15 en decimal)
IES Juan de la Cierva (Madrid). Desarrollo
de Productos Electrónicos
9
CBLOCK
Define una lista de constantes. A cada <label
<label>
> se le asigna un
valor inmediatamente superior que al anterior <label
<label>.
>.
El propósito de esta directiva es asignar direcciones a muchas
etiquetas.
La lista de etiquetas finaliza cuando se encuentra una directiva
ENDC
Sintaxis
CBLOCK <label>[:<
label>[:<increment
increment>][<
>][<label
label>][:<
>][:<increment
increment>]]
>]]
ENDC
Ejemplo:
CBLOCK 0x20 ;Las variables se posicionan a partir de la posición 0x20
Unidades ;La variable Unidades ocupa la posición 0x20 de RAM
Decenas ;La variable Unidades ocupa la posición 0x21 de RAM
Centenas ;La variable Unidades ocupa la posición 0x22 de RAM
ENDC
ENDC
Se escribe al final de una lista de
constantes CBLOCK.
Debe escribirse para indicar el fin de
la lista.
Mirar directiva CBLOCK
10
(1)
MACRO
Una macro define el conjunto de instrucciones a
las que se les asigna un nombre.
Si el programa fuente incluye el nombre de la
macro, todas las instrucciones que las componen
quedan insertadas en el momento de realizar el
ensamblado formado parte del programa.
Sintaxis
<label>
label> MACRO [<arg
[<arg>,<
>,<arg
arg>,....<
>,....<arg
arg>]
>]
............
............
ENDM
(2)
MACRO
;MACRO “INCREMENTA”-------------
“INCREMENTA”-------------
;Incrementa el valor (Registro). Pueden ocurrir dos cosas
;- Que (Registro) no supere el valor “Maximo”, entonces salta
; a la etiqueta apuntada por el argumento “Salto”. El flag
; Carry se pone a “1”.
;- Que (Registro) supere el valor “Máximo”, entonces se
; inicializa con el valor del argumento “Minimo”. El carry se
; pone a “0”.
Incrementa MACRO Registro, Minimo,Maximo,Salto
incf Registro,F
movf Registro,W
sublw Maximo
btfsc STATUS,C
goto Salto
movlw Minimo
movwf Registro
ENDM
IES Juan de la Cierva (Madrid). Desarrollo
de Productos Electrónicos
11
ENDM
Termina una definición del macro
comenzada por la directiva MACRO.
Sintaxis
ENDM
12