SISTEMAS
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
Hexadecimal 0x / 0X al inicio del nmero
EJEMPLO
0x99 / 0X25 / 0x200 / 0x0F
$ al inicio del nmero
$99 /
0b al inicio del nmero
0b10001110
0B al inicio del nmero
0B10001110
Decimal
Slo el nmero
12 / 20 / 32
ASCII
Comillas simples
2 / 20
Binario
$25 /$200
Para representar cadenas se emplean comillas dobles.
Para Definir cadenas ASCII se usa .DB
Instrucciones
Directivas :
1) .EQU (Equate): Usada para definir un valor constante o una
direccin fija. Esta directiva asocia un nmero constante con un
dato o una etiqueta de direccin, de modo que cuando una
etiqueta aparece en el programa, su constante ser reemplazada
por la etiqueta.
Ejemplo:
.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]
Label Permite al programa asociar una lnea de cdigo con
un nombre.
salto: DEC tempo
Mnemonic y operandos Trabajan en forma conjunta para
indicar al micro la accin o tarea a realizar.
LDI R23,$55
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
Empleadas para mover datos entre
distintas localidades de memoria
De salto y bifurcacin
Permiten alterar el curso de
ejecucin de los programas.
Para Manipulacin de bits
Permiten realizar operaciones a
nivel de bits
Aritmticas y Lgicas
Utilizadas para realizar operaciones
aritmticas con bytes
De control
Realizan acciones sobre todo el
funcionamiento del
microcontrolador.
22
Intrucciones de Uc ATmega164p
Nomencalatura: Registros y operandos
NOMENCALTURA
Rd
Registro destino
Rr
Registro fuente
Resultado de ejecucin de una instruccin
Dato inmediato (constante)
Direccin de memoria
Bit de un registro E/S (7-0)
Bit en el registro de estado SREG
X, Y, Z
Registros de direccionamiento indirecto
Registros del bloque E/S
Desplazamiento (6-bit) por direccionamiento
directo
23
Intrucciones de Uc ATmega164p
Transferencia de datos
INSTRUCCIN
FUNCIN
MOV, MOVW
Copiar datos entre registros
LDI
Cargar un valor al registro
LDD, LD, LDS, POP
Cargar un registro desde la
SRAM
ST, STD, STS, PUSH
Almacenar en SRAM un
registro
LPM
Cargar un registro desde la
flash
IN, OUT
Entrada y salida de los
prticos
24
Intrucciones de Uc ATmega164p
Transferencia de datos
LDI:
a) Formato:
LDI Rd, K
valor K
; Cargar Rd con el
Donde: K = Valor de 8 bits [0-255] decimal [00-FF]
hexadecimal
Rd = [R16-R31]
b) Ejemplo:
LDI R20,0X25 ; Carga el registro
R20 con0x25
25
Intrucciones de Uc ATmega164p
Transferencia de datos
MOV: Permite copiar datos entre los Registros de Propsito
General.
a) Formato:
LDI Rd, Rr ; Copiar Rr al
registro Rd
Donde: Rd y Rr [R0-R31]
b) Ejemplo:
MOV R10,R20 ; R10=R20
26
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:
LDS Rd, k ; Cargar Rd con el contenido de
la direccin k
Donde: Rd [R0-R31]
k es una direccin entre [$000 a $4FF] Espacio de memoria de
datos
b) Ejemplo:
LDS R10,0x1 ; Carga R10 con el contenido de la
localidad $001
27
AVR
Atmega164p Registros E/S
32 Registros de $000
propsito
general
$01F
$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:
STS k,Rr ; Guarda el registro Rr en la
localizacin k
Donde: k es una direccin entre [$000 a $4FF] Espacio de
datos
b) Ejemplo:
STS 0x1,R20 ; Copia el contenido de R20 en
la localidad $001
31
R1=R20
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
No se puede copiar o guardar un valor directamente en la
SRAM, este proceso debe ser hecho por medio de los
Registros de Propsito General.
Ejemplo:
LDI R19,OX99
STS 0X200, R19
0x200
; R19=0X99
; Guarda R19 en la localizacin
(SRAM INTERNA)
33
Intrucciones de Uc ATmega164p
Transferencia de datos
IN: Indica a la CPU cargar un byte desde un Registro de
E/S a un Registro de Propsito General.
a) Formato:
IN Rd,A ; Cargar una localidad de E/S al
Registro de
Propsito General.
Donde: A [$000 a $03F] y Rd [R0-R31]
b) Ejemplo:
IN R20, 0X16 ; Copiar el contenido del R16
34
(E/S) en R20
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
Para operar cada prtico utiliza 3
registros:
Entrada Pinx
Sentido o direccin del
dato DDRx
Salida PORTx
36
Intrucciones de Uc ATmega164p
Transferencia de datos
IN:
b) Ejemplo:
IN R19,0X03 ; Carga R19 con la ubicacin $003
(R19=PINB)
Tambin:
IN R19,PINB ; Carga R19 con PINB
* En este caso se require incluir cabeceras en el programa
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
El microcontrolador ejecuta la instruccin IN ms rpido que la LDS.
IN= 1 ciclo de mquina
LDS=2 ciclos de mquina
La instruccin IN ocupa menos memoria de cdigo que LDS.
o
IN= 2 bytes
LDS=4 bytes
La instruccin IN permite identificar a los Registros de E/S [$000$03F]
38
Intrucciones de Uc ATmega164p
Transferencia de datos
OUT: Indica a la CPU cargar un Registro de Propsito
General a un Registro de E/S.
a) Formato:
OUT A,Rr ; Carga el registro a la localidad
de E/S
Donde: A [$000 a $03F] y Rd [R0-R31]
b) Ejemplo:
OUT PORTD, R12 ; Copiar el contenido del R12 a
PORTD
OUT SPL,R20
; Copia el contenido de R20 a
39
SPL
Intrucciones de Uc ATmega164p
Transferencia de datos
No se puede copiar o guardar un valor directamente en
una localidad SRAM, ni en un Registro de E/S.
Ejemplo:
IN R20, PIND
; Carga R20 con el contenido
de PIND (Reg. E/S)
OUT PORTA, R20 ; Copia R20 en PORTA
40
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
INSTRUCCIN
FUNCIN
ADD, ADDC, SUB, MUL, CP,
CPC, CPI
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
ADD: Indica a la CPU aadir el valor de Rr a Rd y
guardar el resultado en el Registro Rd.
a) Formato:
ADD Rd,Rr ; Aadir Rr a Rd y almacena el
resultado en Rd
b) Ejemplo:
LDI R17, 0X25 ; Cargar 0x25 en R17
LDI R18, 0X35 ; Cargar 0x35 en R18
ADD R17, R18 ; Sumar el valor de R18 a R17
R17=R17+R18
R17= 0x60
42
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
SUB: Indica a la CPU restar el valor de Rr de Rd y
guardar el resultado en Rd.
a) Formato:
SUB Rd, Rr ; Restar Rd-Rr
b) Ejemplo:
LDI R16, 0X35 ; Cargar 0x35 en R16
LDI R17, 0X25 ; Cargar 0x25 en R17
SUB R16, R17 ; R16=R16-R17
R16= 0x10
43
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
INC: Incrementa el contenido de Rd en 1
a) Formato:
INC Rd ; Incrementa Rd
Donde: 0<d<31
b) Ejemplo:
INC R3
R3 = R3+1
44
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
DEC: Decrementa el contenido de Rd en 1
a) Formato:
DEC Rd ; Rd = Rd-1
Donde: 0<d<31
b) Ejemplo:
LDI R20,3
;
DEC R20
;
DEC R20
;
DEC R20
;
R20
R20
R20
R20
=
=
=
=
3
2
1
0
45
Intrucciones de Uc ATmega164p
Aritmticas y Lgicas
COM: Invierte o complementa el contenido de Rd, y
guarda el resultado en Rd.
a) Formato:
COM Rd ; Complemento
b) Ejemplo:
LDI R20,0x55
OUT PORTB,R20
COM R20
OUT PORTB,R20
PORTB= 0xAA
;
;
;
;
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
RJMP, IJMP, JMP
Saltos incondicionales
RCALL,ICALL,CALL, RET
Llamadas y retornos desde
subrutinas
CPSE
Comparacin y salto
includo
SBRC, SBRS,SBIC, SBIS
Saltos condicionados
BRxC, BRxS
Bifurcaciones de acuerdo al
estado de las banderas
Salto: Es el proceso de repetir una secuencia
de instrucciones o una operacin un
determinado nmero de veces
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,
BRNE BACK ; Salta a BACK si Z=0
48
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Ejemplo 1: Aadir 3 al registro 19, 10 veces
.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:
Ejemplo 2: Escribir un programa para cargar al PORTB
con el valor 0x25 y obtenga el complemento del
PORTB 700 veces.
700 es mayor a 255 La mxima capacidad de un Registro
de Propsito General. Por lo tanto es necesario utilizar 2
registros para implementar el contador.
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:
En forma general las instrucciones de salto se clasifican
en:
o Incondicionales: Cambian el flujo del programa cada vez que
son llamadas sin ningn requisito o condicin.
1. JMP Salto directo
2. RJMP Salto relativo
3. IJMP Salto indirecto
o Condicionales: Para su ejecucin dependen del
cumplimiento de una condicin. Si la condicin no se cumple
no se ejecuta el salto.
52
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
C= Bandera del carry
Si existe carry C=1
Si no existe carry C=0
Z= Bandera del 0
Si el resultado de la operacin=0 Z=1
Si el resultado de la operacin distinto
de 0 Z=0
N=Bandera de Negacin
Si el bit D7 del resultado = 0N=0
(Signo +)
Si el bit D7 del resultado = 1N=1
(Signo -)
V=Bandera de desbordamiento
Se activa cuando el resultado de una
operacin
56
con nmeros con signo es demasiado larga.
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
C= Bandera del carry (Detecta errores en
operaciones aritmticas sin signo.)
Si existe carry C=1
Si no existe carry C=0
Z= Bandera del 0
Si el resultado de la operacin=0 Z=1
Si el resultado de la operacin distinto
de 0 Z=0
N=Bandera de Negacin
Si el bit D7 del resultado = 0N=0 (Signo +)
Si el bit D7 del resultado = 1N=1 (Signo -)
D D D
7 6 5
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
Si existe un carry intermedio desde D3 a D4
durante una ADD SUB se
necesita activar H.
D D D
7 6 5
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
Los estados de las banderas
indican condiciones que
resultan despus de la
ejecucin de las instrucciones.
Cada bandera puede ser usada
para realizar una bifurcacin
condicional.
60
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
No hay carry despus D7 = 0 0110 0111
de D7
Si existe carry entre
D3 y D4
R20 no es igual a cero R20 = 0110 0111 $67
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
Si hay carry despus
de D7
1 0000 0000
Si existe carry entre
D3 y D4
Carry = 1
R20 es igual a cero
R20 = 1 0000 0000
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
SBIC 0x3F,7 ; Omitir la siguiente instruccin si el
bit 7 del R63 es 0
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
SBIC 0x3F,7 ; Omitir la siguiente instruccin si el
bit 7 del R63 es 1
67
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Condicionales:
Comparar el contenido de un registro
Instruccin
Salto
Formato
Funcin
CPI
CPI
Rd, k
Compara el registro con un valor
inmediato.
CP
CP
Rd, Rr
Compara entre dos registros
CPC
CPC
Rd, Rr
Compara entre dos registros y el
carry.
CPSE
CPSE
Rd, Rr
Compara entre dos registros y no
considera la siguiente instruccin si
son iguales
68
Intrucciones de Uc ATmega164p
Salto y bifurcacin:
Condicionales:
Comparar el contenido de un registro
Instruccin
NEMNICO
CPI
BREQ
Saltar si son iguales
CP
BRNE
Saltar si no son iguales
CPC
BRSH
Saltar si es igual o mayor
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
ICALL: Guarda en el Stack Pointer la direccin de la prxima
instruccin, la ejecucin del programa continua en la
direccin especificada en el contenido del puntero Z.
Formato:
ICALL
RET: Se emplea para volver de una subrutina previamente
llamada por CALL
Formato:
RET
RETI: Obtiene desde el Stack la direccin que fue guardada
por la interrupcin.
RETI
71
Formato:
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: Instruccin que permite escribir un bit del
Puerto a 1 L.
Formato:
Ejemplo:
SBI PORTx, b
0,1,2,3,4,5,6,7
;b=
SBI PORTB,7 ; Pin 7 del Puerto B tiene a la
salida 1 Lgico
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=
CBI PORTB,0 ; Pin 0 del Puerto B tiene a la
salida 0 Lgico
74
Intrucciones de Uc ATmega164p
Instrucciones
Nemnico
Funcin
CLR
Limpia un registro
ROL
Recorre todos los bits del
registro destino a la izquierda.
La bandera del acarreo se pasa
al Bit 0 del registro y el Bit 7 se
pasa a la bandera del acarreo, C.
SEC
Configura a uno el bit de la
bandera de acarreo, C
CLC
Limpia la bandera de acarreo, C.
75
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+
-1era ejecucin R16=Contenido apuntado por X
-2da ejecucin R16=Contenido apuntado por X
incrementado en 1
78
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
-1era ejecucin R16=Contenido apuntado por X
decrementado en 1
79
Intrucciones de Uc ATmega164p
Instrucciones de transferencia especiales
LD con Desplazamiento: El valor del puntero se suma el
desplazamiento.
Formato:
LDD Rd, Registros_punteros(X/Y) + q
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
Guardo en la localidad apuntada por X el contenido de 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
-1era ejecucin, la localidad apuntada por X recibe el
contenido de R16
-2da ejecucin, la localidad apuntada por X recibe el
contenido de R16 incrementada en 1
82
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
-1era ejecucin, la localidad apuntada por X recibe el
contenido de R16 decrementado en 1
83
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:
STD Z+8, R16
-1era ejecucin, la localidad apuntada por X pero
desplazada en 8, recibe el contenido de R16
84
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