Beruflich Dokumente
Kultur Dokumente
MICROPROCESADOS
Objetivos
Entender la sintaxis de programacin en Assembler
Entender los registros bsicos
Realizar ejercicios Bsicos
Modos de Direccionamiento
Son los distintos modos de acceder a los datos en memoria por parte
del procesador. La instruccin se compone de la operacin y los
operandos
Operacin
Accin que se realiza sobre los operandos.
Los operandos Son los datos que intervienen en la operacin.
Se representan mediante los modos de
direccionamiento.
Modos de Direccionamiento
Son Las instrucciones pueden ser clasificadas por el nmero de
operandos.
Instrucciones sin operandos
Instrucciones con un operando Operando de destino
Instrucciones con dos operandos separados por una coma:
1ero = Operando destino
2do = Operando origen
Clase de instruccin
Instrucciones sin operandos
Instrucciones con uno o dos operandos
Modo de Direccionamiento
Implcito
Inmediato
Directo
Indirecto simple, con disminucin
previa, con incremento posterior o
con desplazamiento.
Modos de Direccionamiento
Directo a un Registro: El operando destino est contenido en el
registro, es decir situado en la direccin indicada en la instruccin.
Modos de Direccionamiento
Directo a dos Registro: En la instruccin se especifican los
nmeros de los registros que contienen los operandos de origen
(Rr) y de destino (Rd).
.
Modos de Direccionamiento
Inmediato: En la instruccin se especifica un nmero que
corresponde al operando de origen, es decir el dato est
codificado en la propia instruccin.
.
Modos de Direccionamiento
Directo al Registro de E/S: En la instruccin se especifica el
nmero del registro de E/S que contiene el operando de origen o
de destino.
Modos de Direccionamiento
Directo a la SRAM: En la instruccin se indica mediante 16 bits la
direccin de la localidad de la SRAM que contiene el operando de
origen o de destino
FLASHEND y RAMEND =
memoria ms alta de la
localidad en los datos y
en el programa.
Modos de Direccionamiento
Indirecto a la SRAM: En la instruccin se especifica el registro
puntero que apunta a la localidad de la SRAM que contiene el
operando de origen o de destino.
Modos de Direccionamiento
Indirecto a la SRAM con disminucin previa: En este caso el
puntero disminuye previamente su contenido antes de ejecutar la
operacin
Modos de Direccionamiento
Indirecto a la SRAM con desplazamiento: En la instruccin se
especifica el puntero y un valor, que sumados apuntan a la
localidad SRAM que contiene el operando de origen o de destino.
Modos de Direccionamiento
Direccionamiento a memoria de programa: La direccin del Byte
se especifica por el contenido del registro Z. En este caso el
puntero Z permite leer constantes de un Byte de la memoria del
programa.
Modos de Direccionamiento
Direccionamiento a memoria de programa con incremento
posterior: Similar al anterior direccionamiento, pero
adicionalmente el punter incrementa su contenido despus de
ejecutar la operacin.
Modos de Direccionamiento
Direccionamiento a memoria de programa con incremento
posterior: Similar al anterior direccionamiento, pero
adicionalmente el punter incrementa su contenido despus de
ejecutar la operacin.
Instrucciones
Resumen:
En los microcontroladores los registros son usados para
almacenar datos en forma temporal.
La informacin puede ser un Byte de dato para ser procesado,
una direccin que apunta a los datos para ser recuperados.
Para programar en assembler se debe tener conocimiento
sobre caractersticas del microcontrolador tales como:
Los registros
La arquitectura
El modo de procesamiento de datos
Instrucciones
Formatos para representar datos:
Existen cuatro formas para representar datos en AVR
assembler:
FORMATO
REPRESENTACIN
EJEMPLO
0x99 / 0X25 / 0x200 / 0x0F
$99 /
0b10001110
0B10001110
Decimal
Slo el nmero
12 / 20 / 32
ASCII
Comillas simples
2 / 20
Binario
$25 /$200
Instrucciones
Directivas :
.EQU
COUNT = 0x25
Instrucciones
Directivas :
2) .SET Usada para definir un valor constante o una direccin
fija. A diferencia de .EQU, consiste en que el valor asignado
por .SET puede ser reasignado despus.
3) .ORG (Origin): Indica el comienzo de la direccin.
4) .INCLUDE: Indica a assembler que agregue el contenido de
un archivo al programa.
Ejemplo:
.INCLUDE "m164pdef.inc"
Instrucciones
Estructura del lenguaje Assembler
Una instruccin contiene 4 campos:
[label:]
mnemonic
[operandos]
[; comentario]
LDI Mnemonic
Instrucciones
Reglas para el Etiquetado
El nombre de las etiquetas debe ser nico.
Para el nombre de las etiquetas se puede usar letras
maysculas, minsculas, los dgitos del 0 al 9, y caracteres
especiales (? @ . _ $)
El inicio de la etiqueta debe ser una letra.
No se puede usar etiquetas con nombres similares a
instrucciones.
Intrucciones de Uc ATmega164p
Las instrucciones son clasificadas de acuerdo a la accin
que realizan:
INSTRUCCIN
FUNCIN
De transferencia de datos
De salto y bifurcacin
Aritmticas y Lgicas
De control
22
Intrucciones de Uc ATmega164p
Nomencalatura: Registros y operandos
NOMENCALTURA
Rd
Registro destino
Rr
Registro fuente
Direccin de memoria
X, Y, Z
23
Intrucciones de Uc ATmega164p
Transferencia de datos
INSTRUCCIN
FUNCIN
MOV, MOVW
LDI
Almacenar en SRAM un
registro
LPM
IN, OUT
Intrucciones de Uc ATmega164p
Transferencia de datos
LDI:
a) Formato:
LDI Rd, K
valor K
; Cargar Rd con el
25
Intrucciones de Uc ATmega164p
Transferencia de datos
MOV: Permite copiar datos entre los Registros de Propsito
General.
a) Formato:
Intrucciones de Uc ATmega164p
Transferencia de datos
LDS: Indica a la CPU que cargue o copie un byte desde una
direccin en la memoria de datos a los Registros de Propsito
General.
a) Formato:
27
AVR
$000
64 Registros de $020
E/S
$05F
160 Registros de $060
E/S adicionales
$020
Registros
de
E/S
$03F
$05F
$0FF
1 KB para datos $100
SRAM INTERNA
$4FF
Direccin
como registro
E/S
Localidad de
memoria
28
Intrucciones de Uc ATmega164p
Transferencia de datos
LDS:
b) Ejemplo:
LDS R10,0x1 ; Carga R10 con el contenido de la
localidad $001
La localidad 0x1 corresponde al primer Registro de Propsito
General R1
Entonces como resultado de la ejecucin de la instruccin se
copia el contenido del registro R1 a R10.
29
R10=R1
Intrucciones de Uc ATmega164p
Transferencia de datos
LDS:
b) Ejemplo:
LDS R5,0x200 ; Carga R5 con el contenido de la
localidad $200
LDS R1,R0
; R1=R0
30
Intrucciones de Uc ATmega164p
Transferencia de datos
STS: Indica a la CPU que guarde el contenido de los Registros
de Propsito General a una direccin localizada en el espacio
de memoria de datos.
a) Formato:
Intrucciones de Uc ATmega164p
Transferencia de datos
STS:
b) Ejemplo:
STS 0x220,R25 ; Guarda R25 en la localidad $220 de
la SRAM interna
STS 0x38, R15 ; Guarda R15 en la localidad $038 de
los registros de
E/S corresponde al Puerto B
32
Intrucciones de Uc ATmega164p
Transferencia de datos
; R19=0X99
; Guarda R19 en la localizacin
(SRAM INTERNA)
33
Intrucciones de Uc ATmega164p
Transferencia de datos
Intrucciones de Uc ATmega164p
Transferencia de datos
IN:
En el microcontrolador las 32 lneas E/S constituyen los 4
prticos de 8 bits
Para operar cada prtico utiliza 3
registros:
Entrada Pinx
Sentido o direccin del
dato DDRx
Salida PORTx
35
Intrucciones de Uc ATmega164p
Transferencia de datos
IN:
En el microcontrolador las 32 lneas e E/S constituyen los 4 prticos de 8
bits
$000
$001
$002
$003
$004
$005
$006
$03F
PINA
DDRA
PORTA
PINB
DDRB
PORTB
$020
$021
$022
$023
$024
$025
$026
$05F
Intrucciones de Uc ATmega164p
Transferencia de datos
IN:
b) Ejemplo:
IN R19,0X03 ; Carga R19 con la ubicacin $003
(R19=PINB)
Tambin:
37
Intrucciones de Uc ATmega164p
Transferencia de datos
IN vs LDS: Permiten copiar el contenido de un Registro de E/S a un
Registro de propsito general.
o
IN= 2 bytes
LDS=4 bytes
38
Intrucciones de Uc ATmega164p
Transferencia de datos
Intrucciones de Uc ATmega164p
Transferencia de datos
40
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
INSTRUCCIN
FUNCIN
Operaciones y
comparaciones
INC, DEC
Incrementar y Disminuir
CPSE
Operaciones lgicas
COM, NEG
Complemento de uno y
complement a dos.
41
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
42
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
43
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
R3 = R3+1
44
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
R20
R20
R20
R20
=
=
=
=
3
2
1
0
45
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
;
;
;
;
de Rd
R20 = 0x55
Copiar R20 en PORTB
Complemento de R20
Copiar R20 a PORTB
46
Intrucciones de Uc ATmega164p
Salto y bifurcacin
INSTRUCCIN
FUNCIN
Saltos incondicionales
RCALL,ICALL,CALL, RET
CPSE
Comparacin y salto
includo
Saltos condicionados
BRxC, BRxS
Bifurcaciones de acuerdo al
estado de las banderas
47
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
BRNE: Usa la bandera 0 (Z) del registro de estado. Si el resultado
de una operacin es cero Z=1.
a) Formato:
BACK: ; inicio del lazo
.. ; cuerpo del lazo
DEC Rn
; decrementar Rn,
48
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
.INCLUDE "m164pdef.inc"
LDI R16,10
;
counter R16 = 10
LDI R19,0
;
LDI R20,3
;
REPETIR:ADD R19,R20
;
(R19=3)
DEC R16
;
contador
BRNE REPETIR
;
el contador=0
OUT PORTB, R19 ;
en PORTB
Se define un
R19 = 0
R20 = 3
Sumar R19=R19+R20
Decrementar el
Repetir hasta que
Guardar la suma
49
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
50
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Ejemplo 2:
.INCLUDE "m164pdef.inc
.ORG 0 ;Programa inicia en 0x000
LDI R16,0x25
; Cargo 0x25 en R16
OUT PORTB,R16 ; Copia el contenido de R16 en
PORTB
LDI R20,10
; Defino Lazo exterior (R20=10)
LazoEx: LDI R21,70
; Defino Lazo interior (R21=70)
LazoIn: COM R16
; Complemento R16
OUT PORTB,R16 ; Copiar en PORTB el complemento
de R16
DEC R21
; Decrementar lazo interior
BRNE LazoIN
; Repetir 70 veces
DEC R20
; Decrementar lazo exterior
BRNE LazoEx
; Repetir 10 vece
51
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Incondicionales:
JMP: Salta a una localidad de la memoria Flash (Memoria del
programa). El destino de salto puede ser una direccin una
etiqueta.
Formato:
JMP k ; k = direccin
/etiqueta
El programa se va a ejecutar a partir de la direccin/etiqueta
que indica la instruccin. El ensamblador calcula la direccin
del salto.
PC k
53
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Incondicionales:
RJMP: Salta a una localidad de la memoria Flash (Memoria del
programa) distante k localidades.
Formato:
RJMP k
La direccin de salto se obtiene sumando una constante con
signo (k) al PC.
PC PC+k+1
54
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Incondicionales:
IJMP: La direccin de salto es indicada por el contenido del
registro puntero Z.
Formato:
IJMP
La direccin de salto se obtiene del registro puntero Z.
PC Z
Ejemplo:
LDI R30, 0
; Parte baja de la direccin
de salto
LDI R31, 0X8 ; Parte alta de la direccin
de salto
55
IJMP
; Salto a la direccin $800
Intrucciones de Uc ATmega164p
Condicionales:
Instrucciones que operan con la influencia de SREG (Registro de Estado).
INSTRUCCIN
CONDICIN
BRLO
BRSH
Bifurcar si C = 1
Bifurcar si C = 0
BREQ
BRNE
BRMI
BRPL
BRVS
BRVC
Bifurcar si Z = 1
Bifurcar si Z = 0
Bifurcar si N = 1
Bifurcar si N = 0
Bifurcar si V = 1
Bifurcar si V = 0
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
32
Registros de
Propsito General
SREG
H,S,V,N,Z,C
AL
U
BANDERAS
57
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
32
RPG
SREG
H,S,V,N,Z,
C
BANDERAS
AL
U
D
4
D
3
D D D0
2 1
58
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
32
RPG
SREG
H,S,V,N,Z,
C
BANDERAS
AL
U
V=Bandera de desbordamiento
Se activa cuando el resultado de una
operacin con nmeros con
signo es demasiado larga.
S= Bit de signo
OR EXCLUSIVE entre bandera N y V.
H= Bandera del carry intermedio
D
4
D
3
D D D0
2 1
59
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
32
RPG
SREG
H,S,V,N,Z,
C
BANDERAS
AL
U
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
Ejemplo:
LDI R19,3
; R19 = 3
Z=0
DEC R19
; R19 = 2
Z=0
DEC R19
; R19 = 1
Z=0
DEC R19
; R19 = 0
Z=1
61
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
Ejemplo:
Mostrar el estado de las banderas C, H y Z :
LDI R20,0x38
; R20 = $38
LDI R19,0x2F
; R19 = $2F
ADD R19,R20
; R19 = R19+R20
Bande Estado
ra
Detalle
Valores
Carry = 1
62
Intrucciones de Uc ATmega164p
Salto y bifurcacin Registro de Estado y ALU:
Ejemplo:
Mostrar el estado de las banderas C, H y Z :
LDI R19,0x9C
; R19 = $9C
LDI R20,0x64
; R20 = $64
ADD R20,R19
; R20 = R20+R19
Bande Estado
ra
Detalle
Valores
1 0000 0000
Carry = 1
63
Intrucciones de Uc ATmega164p
Salto y bifurcacin / Manipulacin de bits:
Condicionales:
SBRC: No considera la siguiente instruccin si el bit del
registro es cero.
Formato:
SBRC Rr, b
Ejemplo:
SBRC R0,7 ; Omitir la siguiente instruccin si el
bit 7 de R0 es 0
64
Intrucciones de Uc ATmega164p
Salto y bifurcacin / Manipulacin de bits:
Condicionales:
SBRS: No considera la siguiente instruccin si el bit del
registro es uno.
Formato:
SBRS Rr, b
ejemplo:
SBRS R0,7 ; Omitir la siguiente instruccin si el
bit 7 de R0 es 1
65
Intrucciones de Uc ATmega164p
Salto y bifurcacin / Manipulacin de bits:
Condicionales:
SBIC: No considera la siguiente instruccin si el bit del
Registro de E/S es cero.
Formato:
SBIC A, b
;A=
ejemplo:
Registro E/S
66
Intrucciones de Uc ATmega164p
Salto y bifurcacin / Manipulacin de bits:
Condicionales:
SBIS: No considera la siguiente instruccin si el bit del
Registro de E/S es uno.
Formato:
SBIS A, b
;A=
ejemplo:
Registro E/S
67
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Condicionales:
Comparar el contenido de un registro
Instruccin
Salto
Formato
Funcin
CPI
CPI
Rd, k
CP
CP
Rd, Rr
CPC
CPC
Rd, Rr
CPSE
CPSE
Rd, Rr
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Condicionales:
Comparar el contenido de un registro
Instruccin
NEMNICO
CPI
BREQ
CP
BRNE
CPC
BRSH
CPSE
BRLO
Saltar si es menor
FUNCIN
69
Intrucciones de Uc ATmega164p
Salto y bifurcacin Llamar a subrutinas
CALL: Guarda en el Stack Pointer la direccin de la prxima instruccin
y salta a la localidad de la flash con direccin k.
Formato:
CALL k
RCALL: Guarda en el Stack Pointer la direccin de la
prxima instruccin y salta a la localidad de la flash
distante k localidades, desde la ubicacin de la instruccin
llamada.
Formato:
RCALL k
70
Intrucciones de Uc ATmega164p
Salto y bifurcacin Llamar a subrutinas
Formato:
ICALL
RET
Intrucciones de Uc ATmega164p
Subrutinas
Empleadas para facilitar y optimizar la programacin.
Son manejadas por Instruciones de Salto.
Las direcciones de retorno se almacenan en la PILA o STACK.
Puede existir subrutinas anidadas.
Una subrutina debe terminar con la instruccin de retorno (RET).
72
Intrucciones de Uc ATmega164p
Transferencia de datos/ Manipulacin de bits:
SBI PORTx, b
0,1,2,3,4,5,6,7
;b=
73
Intrucciones de Uc ATmega164p
Transferencia de datos/ Manipulacin de bits:
CBI: Instruccin que permite escribir un bit del
Puerto a 0L.
Formato:
Ejemplo:
CBI PORTx, b
0,1,2,3,4,5,6,7
;b=
74
Intrucciones de Uc ATmega164p
Instrucciones
Nemnico
Funcin
CLR
Limpia un registro
ROL
SEC
CLC
Intrucciones de Uc ATmega164p
Creacin del programa:
Editar Programa
Cdigo del programa/
Archivo fuente
Proyecto1.asm
Depurar/Ejecutar
.eep
.hex
.map
.lst
Inicializar
la
EEPROM
FLASH
Etiquetas
definidas
en el
programa.
Muestra el binario, el
cdigo fuente y la
cantidad de memoria
que usa el programa
.obj
Entrada al
simulador
.err
Errores
76
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LD: Carga el valor desde una localidad de la SRAM a los Registros de
Propsito General, utilizando direccionamiento indirecto.
Formato:
LD Rd, Registros_punteros
Ejemplo:
LD R16, X
;Cargo en R16 el contenido
apuntado por X
77
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LD con Post-incremento: El valor del puntero se incrementa
posteriormente.
Formato:
LD Rd, Registros_punteros +
Ejemplo:
LD R16, X+
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LD con Pre-Disminucin: El valor del puntero se disminuye
previamente.
Formato:
LD Rd, - Registros_punteros
Ejemplo:
LD R16, -X
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LD con Desplazamiento: El valor del puntero se suma el
desplazamiento.
Formato:
Ejemplo:
LDD R16, Y+8
-1era ejecucin R16=Contenido de la localidad apuntada
por Y pero desplazada en 8.
80
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
ST: Guardar el contenido de los Registros de Propsito General a una
direccin localizada en la SRAM mediante direccionamiento indirecto.
Formato:
ST Registros_punteros,Rr
Ejemplo:
ST X,R16
81
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
ST con Post-incremento: El valor del puntero se incrementa
posteriormente.
Formato:
ST Registros_punteros +, Rr
Ejemplo:
ST X+,R16
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
ST con Pre-Disminucin: El valor del puntero se disminuye
previamente.
Formato:
ST -Registros_punteros,Rr
Ejemplo:
ST -X , R16
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
STD con Desplazamiento: El valor del puntero se suma el
desplazamiento.
Formato:
STD Registros_punteros(Z/Y) + q, Rr
Ejemplo:
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LPM: Carga un byte del registro apuntado por Z a un registro destino
mediante direccionamiento indirecto.
.
Ejemplo:
LDI ZH,high(Tabla*2) ;Inicializa el
registro Z
LDI ZL,low(Tabla*2)
LPM r16,Z
;Carga una constante de
la memoria de
programa apuntada por Z
15
1 0
Direccin
Seleccin 85