Está en la página 1de 9

LABORATORIO N 3

MANEJO INSTRUCCIONES ARITMETICAS Y LOGICAS


Ejercicio 1. Programa que visualiza por el puerto D los datos
ingresados por el puerto B.
Programa en asembler
.include "m8def.inc"; Tipo de procesador
.cseg ; Segmento de cdigo para memoria flash
.org 0x0000; Direccin del Vector Reset
RJMP INICIO; Salto para empezar desde inicio
INICIO:
LDI R16,0b00000000 ; carga la constante 0x00 en el registro R16
LDI R17,0b11111111 ; carga la constante 0xFF en el registro R17
OUT DDRB,R16 ; Configura todos los bits del puerto B como entradas
OUT DDRD,R17 ; Configura todos los bits del puerto D como salidas
LAZO:
IN R18,PINB ; Almacena datos del puerto B en el registro R18
OUT PORTD,R18 ; Visualiza por el puerto B el dato del registro R18
RJMP LAZO ; Bucle, se repite desde lazo

Circuito para prueba


U1

0
0
0
0
0
0
0
0

14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC
ATMEGA8

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

?
?
?
?
?
?
?
?

Simulacin del circuito


U1

1
1
0
0
1
0
1
1

14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

1
1
0
0
1
0
1
1

ATMEGA8

Ejercicio 2. Programa que suma los datos ingresados por los 4 bits
menos significativos del Puerto B y Puerto C. El resultado se visualiza
por el puerto D.
Programa en asembler
.include "m8def.inc"; Tipo de procesador
.cseg ; Segmento de codigo para memoria flash
.org 0x0000; Direccion del Vector Reset
RJMP inicio; Salto para empezar desde inicio
inicio:
LDI R16,0b00000000 ; carga la constante 0x00 en el registro R16
LDI R17,0b11111111 ; carga la constante 0xFF en el registro R17
OUT DDRB,R16 ; Configura todos los bits del puerto B como entradas
OUT DDRC,R16 ; Configura todos los bits del puerto B como entradas
OUT DDRD,R17 ; Configura todos los bits del puerto D como salidas
lazo:
IN R18,PINB ; Almacena datos del puerto B en el registro R18
IN R19,PINC ; Almacena datos del puerto C en el registro R19
ADD R18,R19 ; Suma R18 y R19, el resultado se almacena en R18
OUT PORTD,R18 ; Visualiza por el puerto B el dato de R18
RJMP lazo ; Bucle, se repite desde lazo

Circuito para prueba

0
0
0
0

0
0
0
0

U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

ATMEGA8

?
?
?
?
?

Simulacin del circuito


Sumamos el nmero 3 del puerto B con el nmero 2 del puerto C, obteniendo
el nmero 5 en el display.
0
1
0
0

1
1
0
0

U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

ATMEGA8

Ejercicio 3. Programa que realiza la operacin lgica AND entre los


datos ingresados por los 4 bits menos significativos del Puerto B y
Puerto C. El resultado se visualiza por el puerto D.

1
0
1
0
0

Programa en asembler
.include "m8def.inc"; Tipo de procesador
.cseg ; Segmento de codigo para memoria flash
.org 0x0000; Direccion del Vector Reset
RJMP inicio; Salto para empezar desde inicio
inicio:
LDI R16,0b00000000 ; carga la constante 0x00 en el registro R16
LDI R17,0b11111111 ; carga la constante 0xFF en el registro R17
OUT DDRB,R16 ; Configura todos los bits del puerto B como entradas
OUT DDRC,R16 ; Configura todos los bits del puerto B como entradas
OUT DDRD,R17 ; Configura todos los bits del puerto D como salidas
lazo:
IN R18,PINB ; Almacena datos del puerto B en el registro R18
IN R19,PINC ; Almacena datos del puerto C en el registro R19
AND R18,R19 ; R18 and R19, el resultado se almacena en R18
OUT PORTD,R18 ; Visualiza por el puerto B el dato de R18
RJMP lazo ; Bucle, se repite desde lazo
Circuito para prueba
0
0
0
0

0
0
0
0

U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC
ATMEGA8

Simulacin del circuito

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

?
?
?
?

0
1
1
0

1
1
0
1

U1
14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

0
1
0
0

ATMEGA8

Ejercicio 5. Programa que enciende un Led conectado al pin PB0 solo


si se presiona un pulsador conectado al pin PB0.
Programa en asembler
.include "m8def.inc"; Tipo de procesador
.cseg ; Segmento de codigo para memoria flash
.org 0x0000; Direccion de Vector Reset
RJMP INICIO; Salto para empezar desde inicio
INICIO:
SBI DDRB,PB1 ;Configura PB1 Como salida
CBI DDRB,PB0 ;Configura PB1 Como entrada
BUCLE:
SBIC PINB,PB0 ;Si PB0=0 salta a la siguiente linea
CBI PORTB,PB1 ;Pone a 0 en pin PB1
SBIS PINB,PB0 ;Si PB0=1 salta a la siguiente linea
SBI PORTB,PB1 ;Pone a 1 en pin PB1
RJMP BUCLE ;Se repite desde BUCLE

Circuito para prueba

R1
1k

U1

R2
220

14
15
16
17
18
19
9
10

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

D1
LED-YELLOW

21
20

AREF
AVCC
ATMEGA8

Simulacin del circuito

EJERCICIO
Realizar un programa para crear la siguiente lgica.

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

Entradas

Salidas

PB0

PB1

PD0

PD1

Programa en asembler
.include "m8def.inc"
.cseg
.org 0x0000
rjmp inicio
inicio:
clr r16
out ddrb,r16
ser r16
out ddrd,r16

;PUERTO B COMO ENTRADA


;PUERTO D COMO SALIDA

ldi r16,low(ramend) ;CONFIGURACION


out spl,r16
ldi r16,high(ramend)
out sph,r16
;INICIO DEL PROGRAMA;
programa:
clr r16
out portd,r16
leer:
in r16,pinb
andi r16,0b00000011
cpi r16,0b00000000
breq primero
cpi r16,0b00000001
breq segundo
cpi r16,0b00000010
breq tercero
cpi r16,0b00000011
breq cuarto
rjmp programa

;CONDICION INICIAL
;LEEMOS EL DATO = R16

;COMPARAMOS LOS 4 CASOS

primero:
;PB1 PB0 = 00
ldi r17,0b00000000
out portd,r17
in r16,pinb
;LEEMOS EL DATO = R16
andi r16,0b00000011
cpi r16,0b00000000

brne programa
rjmp primero
segundo:
ldi r17,0b00000010
out portd,r17
in r16,pinb
andi r16,0b00000011
cpi r16,0b00000001
brne programa
rjmp segundo
tercero:
ldi r17,0b00000010
out portd,r17
in r16,pinb
andi r16,0b00000011
cpi r16,0b00000010
brne programa
rjmp tercero
cuarto:
ldi r17,0b00000011
out portd,r17
in r16,pinb
andi r16,0b00000011
cpi r16,0b00000011
brne programa
rjmp cuarto

Circuito para prueba

;PB1 PB0 = 01
;LEEMOS EL DATO = R16

;PB1 PB0 = 10
;LEEMOS EL DATO = R16

;PB1 PB0 = 11
;LEEMOS EL DATO = R16

U1

0
0

14
15
16
17
18
19
9
10

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

21
20

AREF
AVCC

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

?
?

ATMEGA8

Simulacin del circuito


Como se observa si PB0 es 0 y PB1 es 1, se obtiene en la salida PD0=1 Y
PD1=0

U1

0
1

14
15
16
17
18
19
9
10

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC
ATMEGA8

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

1
0