Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MICROPROGRAMABLES
8.2
Introduccin
El juego de instrucciones de un microprocesdor o
microcontrolador es el conjunto de entradas binarias
que producen acciones definidas durante un ciclo de
instruccin. Un juego de instrucciones es para el
microcontrolador lo mismo que una tabla de verdad es
para una puerta lgica, un registro de desplazamiento
o un sumador. Por supuesto, las acciones que realiza
un microcontrolador con cada instruccin, son ms
complejas que las que realizan los dispositivos y
puertas antes mencionados.
Una instruccin es un patrn de dgitos binarios el
cual debe estar a disposicin del microcontrolador en el
tiempo y forma que ste lo requiera.
Por
ejemplo,
cuando
el
procesador
de
un
microcontrolador PIC16F84A recibe el patrn binario
de 12 bits '0000 0100 0000' en el momento adecuado,
significa: Clear (borrar o poner a cero) el registro W, y
corresponde a la instruccin CLRW.
En instrucciones del PIC16F84A se muestra el juego de
instrucciones completo del PIC16F84A
Para los PIC se han creado unas instrucciones y una
estructura de programa que los hacen ms sencillos y
atractivos todava..
Las instrucciones de los microcontrolador
cumplen con las siguientes condiciones:
PIC
org
movlw
movwf
movlw
addwf
end
0
0Eh
REG1
100
REG1,1
Identificacin de elementos
Flags o Banderas
Los Flags o banderas son marcadores, representados
por bits dentro del registro de STATUS, los mas
importantes son:
Z: Flag de cero, se pone a 1 cuando una operacin
que le afecta da como resultado un 0.
C: Flag de Carry, se pone a 1 cuando la operacin
que le afecta sobrepasa el nivel de representacin
del procesador, en nuestro caso es 8 bits, de esta
manera si sumamos a 1111 1111 b un 0000 0011
b el resultado seria 0000 0010 b y el bit de
Carry pasara a 1.
DC: Flag de carry del nibbles inferior, este se
comporta igual que el bit de Carry, solo que el
limite de representacin son los 4 bits inferiores,
de esta manera si tenemos 0000 1111 b y
sumamos 0000 0111 b, el resultado ser 0001
0110 b y el bit de DC se pone a 1, el bit de
Carry estar a 0 al no superarse los 8 bits y el bit
Z a 0 al ser el nmero diferente de 0.
Registros
Un registro es un espacio en la memoria de datos del
microcontrolador
en
el
que
podemos
guardar
informacin, existen tambin unos registros en los
cuales podemos configurar el microcontrolador o saber
el estado de este o algunos de sus perifricos.
4
REGISTRO
CLRF
CLRF
Clear f
Operacin
00
1Z
Sintaxis
[Etiqueta] CLRF f
Operadores
Ciclos
OPCODE
00
Descripcin
0001
1fff
ffff
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.3
03,5
podemos poner:
BSF
STATUS,5
STATUS,5
ponemos:
BSF
STATUS,RP0
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.4
l o k (literal)
Este valor ser almacenado en la propia instruccin
en tiempo de ensamblado, esto significa que son los
valores que introducimos en las instrucciones para que
trabaje con ellos (independientemente de los datos que
podamos almacenar o contener en la EEPROM de
datos). El valor que podemos introducir dentro de un
literal est comprendido entre 0 y 255, ya que es el
mximo que puede representar un byte.
d (destiny bit)
8
Estructura de un programa en
ensamblador
Para hacer la tarea del programador ms grata, se
usan algunas convenciones. Cada uno puede adoptar
las que ms le agraden y ayuden para ser ms
productivo. En general, las convenciones son cualquier
accin que facilita la revisin y comprensin de un
programa, especialmente el que uno mismo ha escrito
cuando tiene que revisarlo algunos meses despus.
Comentamos algunas convenciones que usaremos:
Los ficheros de cdigo fuente llevarn la extensin
*.ASM
Los ficheros de listado llevarn la extensin *.LST
Los ficheros de cdigo objeto llevarn la extensin
*.OB]
Los ficheros de errores llevarn la extensin *.ERR
Los ficheros ejecutables en formato Intel Hex
llevarn la extensin *.HEX
Comentario descriptivo del programa (utilizar una
cabecera estandarizada).
rutinas
en
el mismo
sitio,
todas
10
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.9
nicamente
caracteres
12
Etiquetas (label)
Las etiquetas se sitan a la izquierda de las
instrucciones y sirven para agrupar fragmentos de
cdigo. Estos fragmentos pueden ser de dos tipos:
El primer tipo no es un fragmento tal cual, si no
que es un punto del programa al que podremos
saltar de manera incondicional a travs de la
instruccin adecuada.
El segundo tipo es denominado subrutina. Este
empieza con una etiqueta y acaba con la
instruccin RETURN o RETLW, que veremos ms
adelante.
Deberemos tener en cuenta:
La etiqueta es el primer campo en una lnea en
lenguaje ensamblador y puede no existir.
Si una etiqueta est presente, el ensamblador la
define como el equivalente a la direccin del
primer byte correspondiente a esa instruccin.
Esta etiqueta puede volver a usarse en otro lugar
pero como operando de una instruccin. El
ensamblador reemplazar sta etiqueta por el
valor
de
cuando
fue
creada.
Se
usan
frecuentemente en las instrucciones de salto.
No puede existir ms de una etiqueta en la
primera columna o primer campo de instruccin.
No pueden usarse como nombres de etiquetas a
palabras ya reservadas por el ensamblador ( ORG,
EQU, etc.) o nombres de instrucciones ( movlw,
call, nop, etc.)
Ejemplo:
DATO
EQU
05h
INICIO
movlw
goto
DATO
INICIO
13
Perrmitido
NO permitido!
NO permitido!
NO permitido!
NO permitido!
Permitido
Permitido
Permitido
Operandos y direcciones
Los ensambladores permiten elegir con libertad el
tipo de elemento a colocar en el campo de operando o
direccin.
Sistemas de numeracin
Ejemplo:
14
movlw .100
data
data
equ
movlw
"hola 1,2,3"
'N'
't'
'R'
;cadena de caracteres
;carcter sencillo
EQU
EQU
05h
20h
movlw
addwf
addwf
VALOR+2
REG1,1
REG1+1,1
direcciones
de
dispositivos,
datos
numricos,
direcciones de comienzo, direcciones fijas, posiciones
de bits, etc. Un nombre es ms descriptivo que una
simple direccin y la tarea de programar se har mucho
ms sencilla. Tambin podemos asignar un nombre a
una instruccin que repitamos varias veces a lo largo
de un algoritmo, de manera que sea mucho ms
sencilla la programacin. A estos nombre que
asignamos mediante esta directiva se les denomina
constantes, ya que el registro al que apuntan no
variar durante el programa
Ejemplos:
temp
DATO
PORT_A
START
CARRY
TIEMPO
Bank_1
equ
EQU
EQU
EQU
EQU
EQU
EQU
12
22
5
0
3
5
BSF STATUS,RP0
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.5
EQU
EQU
EQU
EQU
EQU
EQU
PORT_A+1
PORT_A+2
START+100
START+200
.4000000
clockrate/4
EQU
EQU
0
1
Ejemplos:
1) Inicia el programa en la posicin cero:
ORG
0x00
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.6
inicializa
Subrutina1
Subrutina2
ORG
goto
ORG
goto
ORG
movlw
.
.
ORG
00h
;vector de reset
inicializa
04h
;vector de interrupcin
interr
05h
08h
;aqu comienza el programa
300h
;subrutinas
.
.
return
.
.
return
Directiva #INCLUDE
Esta directiva indica que archivos debern tomarse
en cuenta a la hora de compilar el cdigo. Normalmente
se usa para incluir el archivo de PIC que el
ensamblador tiene entre sus archivos, con el cual el
compilador ser capaz de reconocer todos los registros
19
permite
incluir
otros
programas.
Por
#INCLUDE "DISPLAY.ASM"
Directiva END
Al igual que las dos anteriores, esta debe ir incluida
una sola vez en todo el programa. En concreto, esta
debe situarse al final, para indicar al ensamblador que
el programa ha finalizado. Esta siempre debe estar
presente, aunque el flujo de nuestro programa acabe
en un bucle.
21
Directiva #DEFINE
#DEFINE es una directiva muy util. Define se usa
para crear pequeas macros. Con estas macros
podremos poner nombres a pequeos fragmentos de
cdigo que nos facilitarn la realizacin y comprensin
del algoritmo.
Por ejemplo, podremos poner nombres a bits.
#define CERO STATUS,2
CINCO
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.7
OPTION,RP0
OPTION,RP0
22
salida
PORTA,3
IF CONDICION
.
.
ELSE
.
.
ENDIF
Ejemplo:
SINK
EQU
IF
ELSE
ENDIF
MACRO
MOVF
RLF
RLF
RLF
ADDWF
ADDWF
ENDM
tiempo,W
tiempo
tiempo
tiempo
tiempo
tiempo
;comienzo de la macro
;guarda el tiempo en W
;multiplica por 2
;multiplica por 2
;multiplica por 2
;le suma una vez ms
;le suma una vez ms
;fin de la macro
Archivo "EJEMPLO1.ASM":
25
#INCLUDE
tiempo
resultado
"MULX8.ASM"
EQU 0Ch
EQU 0Dh
MOVLW 20
MOVWF tiempo
MULX10
MOVWF resultado
END
EQU
EQU
MOVLW
MOVWF
MOVF
RLF
RLF
RLF
ADDWF
ADDWF
MOVWF
0Ch
0Dh
END
20
tiempo
tiempo,W
tiempo
tiempo
tiempo
tiempo
tiempo
resultado
;guarda el tiempo en W
;multiplica por 2
;multiplica por 2
;multiplica por 2
;le suma una vez ms
;le suma una vez ms
MACRO
MOVF
MOVWF
ENDM
AUX1,W
AUX2
;comienzo de la macro
;Mueve contenido de un registro a otro
;a travs del acumulador
;fin de la macro
Porcin de cdigo:
MOVLW
MOVWF
DECF
BTFSS
MOVFF
MOVWF
.1
TEMP
TEMP,F
STATUS,Z
AUX1,AUX2
PORTA
;TEMP=1
;Z se va a 1
;salta si o si
;Macro
26
; ...
.1
TEMP
TEMP,F
STATUS,Z
AUX1,W
AUX2
PORTA
;TEMP=1
;Z se va a 1
;salta si o si
;lneas de anterior macro
;
************************************************************
macros.asm ;
"MACROS para 16F84" ;
************************************************************
callz
macro
btfsc
call
endm
subbrutina
STATUS,Z
subrutina
callnz
macro
btfss
call
endm
subrutina
STATUS,Z
subrutina
movff
macro
movf
movwf
endm
f2,f1
f1,w
f2
movlf
macro
movlw
movwf
endm
file,literal
literal
file
;(atencin, se destruye W)
;(atencin, se destruye W)
27
macro
movlw
movwf
endm
dato
dato
TRISB
macro
BCF
endm
STATUS,RP0
SET_BANK_1
macro
BSF
endm
STATUS,RP0
#define
#define
macro
bcf
endm
iEnable
iDisable
INTCON,GIE
EI
DI
;arrancar el timer:
RESET_TIMER macro
bcf
INTCON,T0IF
endm
; inicializar timer
INIT_TIMER macro
movlw
movwf
endm
jmp
macro
goto
endm
salto
salto
ret
macro
return
endm
28
;Complemento a 1 de W:
comw
macro
xorlw
0xff
endm
;Instrucciones de salto tipo Z80
jz
macro
btfsc
goto
endm
jnz
macro
btfss
goto
endm
jc
macro
btfsc
goto
endm
jnc
macro
btfss
goto
endm
; ************************************************************
;
FIN
; ************************************************************
29