You are on page 1of 19

Manejo de instrucciones del atmega8:

ADD: ESTA INSTRUCCIN SUMA DOS REGISTROS


; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion add
ldi r16,20 ;con la instruccion ldi muevo el valor de 20 a r16
ldi r17,21 ;con la instruccion ldi muevo el valor de 21 a r17
add r16,r17 ;el valor sumado se almacena en el registro r16
fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo




; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion add
ldi r16,0 ;con la instruccion ldi muevo el valor de 20 a r16
ldi r17,0 ;con la instruccion ldi muevo el valor de 21 a r17
add r16,r17 ;el valor sumado se almacena en el registro r16
fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo

Vemos q al sumar dos registros ceros se activa el sreg de Z indicando que ai un cero


CUADO UNO DE LOS REGISTRO SOBREPASA SU VALOR MAXIMO:

; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion add
ldi r16,$ff ;con la instruccion ldi muevo el valor de 20 a r16
ldi r17,$01 ;con la instruccion ldi muevo el valor de 21 a r17
add r16,r17 ;el valor sumado se almacena en el registro r16
fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo






VEMOS Q EL REGISTRO SE ACE CERO R16 DONDE SE SUMA TODO, los registros sel sreg se ven
aceftados:


ADC: ESTA INSTRUCCIN SUMA DOS REGISTROS CON CARRY

; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion adc
ldi r16,$E4 ;al sumarlo hexadecimalmente
ldi r17,$49 ;nos queda 12d pero el 1 es nuestro carry asi q se activa
adc r16,r17 ;la bandera C del sreg
fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo





Se activa las bandera c





; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion adc
;siendo mis numeros en hexadecimal
ldi r18,$00
ldi r16,$E4 ;al sumarlo hexadecimalmente
ldi r17,$49 ;nos queda 12d pero el 1 es nuestro carry asi q se activa
add r16,r17 ;la bandera C del sreg y el acarreo queda
adc r18,r17 ;al usar el adc sumo r18 con r17 debiendo quedar $49+carry+$00
fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo



Al fianl nuestro desaparesce de la bandera pues asido sumado

Sea la suma:
$4AF3+
$3159
7C4C
COMO LOGRAMOS OBTENER ESTE RESULATOD EN EL VMLAB, ESTO LO ASEMOS USAND EL dd i
el adc, primero cogemos de dos en dos, es decir:
$F3+ //USAMOS EL ADD PARA SUMARLO//
$59
14C TENGO UN CARRY DE 1
AHORA EL SEGUNDO BLOQUE:
$01+ //USAMOS EL ADC PARA SUMARLOS//
$4A+
$31
$7C
MI RESULTADO FINAL ES :
$4AF3+
$3159
7C4C










; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion adc
;siendo mis numeros en hexadecimal
ldi r16,$F3
ldi r17,$59
ldi r18,$4A
ldi r19,$31
add r16,r17
adc r18,r19
fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo







ADIW: ESTA INSTRUCCIN SUMA INMEDIATA CON UNA CONSTANTE
ADIW agrega un valor K (0-63) a un par de registros y deja el resultado en el par de registros.
Esta instruccin opera en los cuatro pares de registros superiores, y est bien preparado para
las operaciones en los registros punteros.
Ejemplo:
ADIW r24,1 ; Sumar 1 a r25:r24
ADIW r30,63 ; Sumar 63 al puntero Z (r31:r30)
; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion adIW
;siendo mis numeros en hexadecimal
ldi r30,$FF
ldi r31,$00
adiw r30,$01
fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo
El acarreo del r30 se va a r31





SUB: RESTA DOS REGISTROS
Descripcin: SUB resta dos registros y deja el resultado en el registro destino Rd.
H: Estar a set (uno) si haba un carry negativo (Borrow) del bit 3, de lo contrario se borrar
(cero).
V: Estar a set si ocurre un desbordamiento del complemento a dos como resultado de la
operacin, de lo contrario se borrar.
N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar.
Z: Estar a set si el resultado es $00, de lo contrario se borrar.
C: Estar a set si el valor absoluto del contenido de Rr es mayor que el valor absoluto de Rd, de
lo contrario se borrar.

(bit menos significativo (LSB)) bit mas significativo(msb)
En nuestro ejemplos

La bandera n est en 1 pues nuestro resultado es $f0=0b11110000










; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion sub
;siendo mis numeros en hexadecimal
ldi r16,$FF
ldi r17,$0F
SUB r16,r17

fin: rjmp fin
;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo


SUBI: RESTA UNA CONSTANTE A UN REGISTRO
Descripcin: SUBI resta un registro con una constante y deja el resultado en el registro destino
Rd. Esta instruccin trabaja en los registros R16 a R31 y est muy bien preparado para el
funcionamiento con los punteros X, Z e Y.

H: Estar a set (uno) si haba un carry negativo (Borrow) del bit 3, de lo contrario se borrar
(cero).
V: Estar a set si ocurre un desbordamiento del complemento a dos como resultado de la
operacin, de lo contrario se borrar.
N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar.
Z: Estar a set si el resultado es $00, de lo contrario se borrar.
C: Estar a set si el valor absoluto de K es mayor que el valor absoluto de Rd, de lo contrario se
borrar.


; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion subi
;siendo mis numeros en hexadecimal
ldi r16,$FF
ldi r17,$0F
subi r16,$FF

fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo


Se activa el bit de la sreg Z por el resultado


; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion subi
;siendo mis numeros en hexadecimal
ldi r16,$FF
ldi r17,$0F
subi r16,$0F

fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo


COMO EL BIT MSB DEL RESULTADO ESTA EN SET EL BIT n ESTARA EN 1




SBC: RESTA DE DOS REGISTROS CON CAARRY

Descripcin: SBC resta dos registros y resta el flag C, y deja el resultado en el registro destino
Rd.

H: Estar a set (uno) si haba un carry negativo (Borrow) del bit 3, de lo
contrario se borrar (cero).
V: Estar a set si ocurre un desbordamiento del complemento a dos como
resultado de la operacin, de lo contrario se borrar.
N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar.
Z: El valor anterior permanece sin cambio cuando el resultado es cero, de lo
contrario se borrar.
C: Estar a set si el valor absoluto del contenido de Rr + el carry previo es
mayor que el valor absoluto de Rd, de lo contrario se borrar.

; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion sbc
;siendo mis numeros en hexadecimal
ldi r16,$FF
ldi r17,$0F
ldi r18,$01
ldi r19,$02
sub r17,r16
sbc r19,r18
fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo

Se resta r19-r18-carry
El carry proveniente de otra operacion

SBCI: RESTA DE CONSTANSTE CON CARRY A UN REGISTRO
Descripcin: SBCI resta una constante de un registro y lo hace con el flag C, y deja el resultado
en el registro destino Rd.

H: Estar a set (uno) si haba un carry negativo (Borrow) del bit 3, de lo contrario se borrar
(cero).
V: Estar a set si ocurre un desbordamiento del complemento a dos como resultado de la
operacin, de lo contrario se borrar.
N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar.
Z: El valor anterior permanece sin cambio cuando el resultado es cero, de lo contrario se
borrar.
C: Estar a set si el valor absoluto de la constante + el carry previo es mayor que el valor
absoluto de Rd, de lo contrario se borrar.

; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion sbci
;siendo mis numeros en hexadecimal
ldi r16,$FF
ldi r17,$0F
ldi r18,$01
ldi r19,$04
sub r17,r16
sbci r19,$02
fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo



SBIW: RESTA UN VALOR K O CONSTANTE A UNA PALABRA
Descripcin: SBIW resta un valor K (0-63) a un par de registros y deja el resultado en el par de
registros. Esta instruccin opera en los cuatro pares de registros superiores, y est bien
preparado para las operaciones en los registros puntero.

S: N V
V: Estar a set si ocurre un desbordamiento del complemento a dos como resultado de la
operacin, de lo contrario se borrar.
N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar.
Z: Estar a set si el resultado es $0000, de lo contrario se borrar.
C: Estar a set si el valor absoluto de K es mayor que el valor absoluto de Rd, de lo contrario se
borrar.





; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion sbiw
;siendo mis numeros en hexadecimal
ldi r16,$FF
ldi r17,$0F
ldi r30,$01
ldi r31,$04
sbiw r30,$02

fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo




























COM: REALIZA EL COMPLEMENTO A UNO
Descripcin: COM realiza el complemento a uno del registro Rd.

V: 0, borrado.
N: Estar a set si el bit MSB del resultado est a set, de lo contrario se borrar.
Z: Estar a set si el resultado es $00, de lo contrario se borrar.
C: 1, set.

; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;practicando algunas instrucciones del atmega8 en asembler
.include "C:\VMLAB\include\m8def.inc"
.cseg ;usamos la memoria flash del micro
.org $00 ;comenzamos en $00
rjmp inicio
inicio:
;veamos la instruccion COM
;siendo mis numeros en hexadecimal
ldi r16,$FF
ldi r17,$0F
ldi r18,$01
ldi r19,$04
COM r19

fin: rjmp fin

;con el f9 del tecaldo procedemos a ver si esta bien nuestro codigo
;con el f7 procedemos a avanzar nuestro codigo




































Uso de directivas:
http://es.scribd.com/doc/7842926/Capitulo4-Directivas-y-Software-Del-AVR-Studio-espanol
uso de las instrucciones:
http://www.sc.ehu.es/sbweb/webcentro/automatica/web_avr/archivos/SET%20AT90S8515/A
ritm%E9ticas&l%F3gicas/ADIW.htm

You might also like