Anda di halaman 1dari 85

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