Tarea EliamCaballeroCruz

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

28 DE MARZO DE 2023

TAREA. PRIMER PARCIAL


ELIAM CABALLERO CRUZ

604-A
MICROCONTROLADORES
M.C. Arturo Pablo Sandoval Garcia
Adicione los códigos utilizados en ensamblados
1- Indique el comportamiento del registro de estado Responda indicando el
comportamiento de las banderas C,H,Z. para las siguiente operaciones.
A) C)
B)
ldi R20,0x9C ldi R20, 0x88
ldi R20, 0x38
ldi R21, 0x64 ldi R21, 0x93
ldi R21, 0x2f
add R20,r21 add R20, R21
add R20, R21
; C= , H= , Z= ; C= , H= , Z=
; C= , H= , Z=

Solución:
ldi R20,0x9C
ldi R21, 0x64
add R20,r21
;C = Indica un acarreo en la operacion aritmetica.
;H = Indica un acarreo intermedio en alguna operacion artmetica.
;Z = Indica un cero despues de una operacion aritmetica.

ldi R20, 0x38


ldi R21, 0x2f
add R20, R21
;C= NO
;H = Indica un acarreo intermedio en alguna operacion artmetica.
;Z= NO*/

ldi R20, 0x88


ldi R21, 0x93
add R20, R21
;C = Indica un acarreo en la operacion aritmetica.
;V = Indica desbordamiento de complemento a 2.
;S = Indica un signo. Este es una OR exclusiva entre la bandera de negativo y
de desbordamiento en complemento a dos
start: rjmp start

Instrucciones aritméticas y de movimiento


2.--Verifique en el simulador el resultado de las operaciones aritméticas, si el registro
16 se ha cargado 0x25 , el registro 17 se a cargado 0x65 y el registro R18 se ha
cargado 12 en decimal. Para la division al registro R16, divida los números 100 y 89
 Suma R16, R17
 Suma R16,R16
 Resta R16, R17
 Multiplicación R16, R18 el resultado se debe ver en el registro 25
 Division/2 R16,

Solución:
ldi R16, 0x25
ldi R17, 0x65
ldi R18, 12

;add R16, R17

;add R16,R16

;sub R16, R17

;mul R16, R18


;movw R24, R0

;ldi R16, 100


;lsr R16

ldi R16, 89
lsr R16

start: rjmp start

Con las siguientes instrucciones apóyese para ejecutar el ejercicio 3 y 4

3. Por el puerto B se tienen solo 4 bits disponibles de salida. Desplace el valor


constante 28 hacia la derecha.

Solución:
ldi R16, 28
lsr R16

start: rjmp start

4. Por el puerto B se obtiene el dato del puerto D en configuración. Desplace el valor


de entrada del puerto B hacia la izquierda.
Solución:
ldi R16, 0x00
out DDRD, R16

ldi R16, 0xFF


out DDRB, R16

start:
in R16, PIND
call despIzq
out PORTB, R16
rjmp start

despIzq:
ldi R17, 4
iteracion:
lsl R16
dec R17
brne iteracion
RET

5. Por el puerto B, se obtienen los dato del puerto D, intercambie nibbles de alto a
bajo por ejemplo si escribe (1011).

Solución:
ldi R16, 0x00
out DDRD, R16

ldi R16, 0xFF


out DDRB, R16

start:
in R16, PIND
swap R16
out PORTB, R16
rjmp start

6. Por el puerto B se tienen los datos de 5 lineas del puerto C sume la constante
decimal 67. PORTB = PORTC + 74

Solución:
ldi R16, 0x00
out DDRC, R16

ldi R16, 0xFF


out DDRB, R16

ldi R17, 67

start:
in R16, PINC
andi R16, 0b00011111
add R16, R17
out PORTB, R16
rjmp start
7. Hacer que en el puerto D, muestre los leds de forma intermitente 0x5A.

Solución:
ldi R16, 0xFF
out DDRD, R16

start:
ldi R16, 0x5A
out PORTD, R16
call retardo
ldi R16, 0
out PORTD, R16
call retardo
rjmp start

retardo:
ldi R17, 100
delay:
dec R17
brne delay
RET

8. Realice un programa que permita encender un LED conectado en la terminal PB5


con un interruptor en PB0.

Solución:
cbi DDRB, 0
sbi DDRB, 5

start:
sbis PINB, 0
rjmp task
sbi PORTB, 5
rjmp start

task:
cbi PORTB, 5
rjmp start

9. Realice un programa que haga parpadear un LED conectado en la terminal PB5 a


una frecuencia aproximada de 1 Hz (periodo de 1 S).

Solución:
sbi DDRB, 5

start:
cbi PORTB, 5
call retardo
sbi PORTB, 5
call retardo
rjmp start
;1 Hz
retardo:
ldi R18, 5
iteracion2:
ldi R17, 255
iteracion1:
ldi R16, 255
delay:
dec R16
brne delay
dec R17
brne iteracion1
dec R18
brne iteracion2
RET

10. Configure los primeros 4 bits del PUERTO C y el PUERTO D como entrada y el
puerto B como salida: Verifique las intrucciones lógicas: AND, OR, OER

Solución:
ldi R16, 0x00
out DDRD, R16

ldi R17, 0x00


out DDRC, R17

ldi R18, 0xFF


out DDRB, R18

start:
in R16, PIND
in R17, PINC

andi R16, 0x0F


andi R17, 0x0f

;and R16, R17


;or R16, R17
eor R16, R17

mov R18, R16

out PORTB, R18


rjmp start

11. Configure los primeros 4 bits del PUERTO C y el PUERTO D como entrada y el
puerto B como salida: Verifique Las intrucciones aritmeticas: add, sub, mul.

Solución:
ldi R16, 0x00
out DDRD, R16

ldi R17, 0x00


out DDRC, R17

ldi R18, 0xFF


out DDRB, R18
start:
in R16, PIND
in R17, PINC

andi R16, 0x0F


andi R17, 0x0f

;add R16, R17


;sub R16, R17
;mov R18, R16

mul R16, R17


movw R18, R0

out PORTB, R18


rjmp start

12. Implemente el siguiente decodificador de 3 a 8 en el microcontrolador.

Solución:

;Registro de entrada
ldi R26, 0x00
out DDRD, R26

;Registro de salida
ldi R27, 0xFF
out DDRB, R27

;Registro de trabajo
ldi R18, 0x00

start:
in R27, PIND
call comparacion0
out PORTB, R18
rjmp start

comparacion0:
ldi R26, 0
cp R27, R26
brne comparacion1
ldi R18, 0b0000001
rjmp start_call
comparacion1:
ldi R26, 1
cp R27, R26
brne comparacion2
ldi R18, 0b00000010
rjmp start_call

comparacion2:
ldi R26, 2
cp R27, R26
brne comparacion3
ldi R18, 0b00000100
rjmp start_call

comparacion3:
ldi R26, 3
cp R27, R26
brne comparacion4
ldi R18, 0b00001000
rjmp start_call

comparacion4:
ldi R26, 4
cp R27, R26
brne comparacion5
ldi R18, 0b00010000
rjmp start_call

comparacion5:
ldi R26, 5
cp R27, R26
brne comparacion6
ldi R18, 0b00100000
rjmp start_call

comparacion6:
ldi R26, 6
cp R27, R26
brne comparacion7
ldi R18, 0b01000000
rjmp start_call

comparacion7:
ldi R26, 7
cp R27, R26
brne start_call
ldi R18, 0b10000000
rjmp start_call

start_call: RET

13. El siguiente código corresponde aun contador de 8 bits. El código tiene algunos
errores, por tanto hay que corregirlos. Como implementaria un contador BCD.
; ejem5_cont.asm
.include"m328pdef.inc"
ldi R16, 0xfF
out DDRB, R16
rstar:
ldi R16,0x00
Conta;
out PORTB,R16
inc R16
call RETARDO
CP R16, R17
ldi R17,0xFF
BRNE conta
rjmp restar
; retardo de un 1seg
RETARDO: LDI R17,100 ;100
LOOP3: LDI R18,25 ;25
LOOP2: LDI R19,20 ;213
LOOP1: DEC R19
BRNE LOOP1
DEC R18
BRNE LOOP2
DEC R17
BRNE LOOP3
RET

Solución:
.include"m328pdef.inc"

ldi R16, 0xFF


out DDRB, R16

ldi R17,0xFF

restar:
ldi R16, 0x00
Conta:
out PORTB,R16
inc R16
call retardo
cp R16, R17
BRNE conta
rjmp restar

; retardo de un 1seg
retardo:
ldi R18, 255
ldi R19, 255
ldi R20, 255

LOOP3:
dec R18
brne LOOP3
LOOP2:
dec R19
brne LOOP2
LOOP1:
dec R20
brne LOOP1
RET

También podría gustarte