Sol Lab2 Calificado Ciclo2023-I

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

FACULTAD DE CIENCIAS – E.P.

DE CIENCIA DE LA
COMPUTACION
“ARQUITECTURA DE COMPUTADORES” (CC221)
CICLO 2023 - I
Solucionario del 2do. Laboratorio Calificado
Por: Lic. César Martín Cruz Salazar

Tiempo: 2h.45m.

1) (6pts.) Hacer un programa con interrupciones que por defecto muestre en el


display LCD. En la línea 1: “Siempre adelante” y en la línea 2: “Todo es
posible ”.
Cuando interrumpe por P3.2 empiece a parpadear 4 veces y luego se detenga,
posteriormente se desplaza hacia la izquierda hasta ocultarse y luego hacia la
derecha volviendo aparecer. Que siga así moviéndose, hasta que se interrumpe
por P3.3 y el mensaje en las 2 líneas en ese momento se queda estático. Que se
repita indefinidamente este proceso, es decir que vuelva a presionar P3.2 y P3.3.
Indicar el Update Freq utilizado.
Sol.
;Update Freq:400
org 0h
sjmp start
org 3h
jmp inter_ext0
org 13h
jmp inter_ext1
; inicializa el m¢dulo LCD --------------------------
start:
lcall configura_LCD
setb IT0
setb IT1
setb EX0
setb EX1
setb EA
setb P3.2
setb P3.3
lcall prtLCD4
db "Siempre adelante",0
mov A,#2
mov B,#0
lcall placeCur4
lcall prtLCD4
db "Todo es posible ",0
mov R0,#offCur
lcall wrLCDcom4
sjmp $

inter_ext0:
jnb P3.3,salir
;Parpadea 4 veces
mov R7,#4
repite_:
mov R0,#offDsp
lcall wrLCDcom4
lcall retardo2
lcall retardo2
mov R0,#onDsp
lcall wrLCDcom4
lcall retardo2
lcall retardo2
djnz R7,repite_
;Hacia la izq.
mov R0,#offCur
lcall wrLCDcom4
repite:
mov R7,#16
lazo:
mov R0,#shLfDsp
lcall wrLCDcom4
lcall retardo
lcall retardo
lcall retardo2
djnz R7,lazo
mov R0,#offCur
lcall wrLCDcom4
;Hacia la der.
mov R7,#16
lazo2:
mov R0,#shRtDsp
lcall wrLCDcom4
lcall retardo
lcall retardo
lcall retardo2
djnz R7,lazo2
mov R0,#offCur
lcall wrLCDcom4
lcall retardo2
lcall retardo2
lcall retardo2
jnb P3.3,salir
sjmp repite
salir:
reti
inter_ext1:
mov A,#1
mov B,#0
lcall placeCur4
lcall prtLCD4
db "Siempre adelante"
db 0
mov A,#2
mov B,#0
lcall placeCur4
lcall prtLCD4
db "Todo es posible ",0
reti
$INCLUDE(subrutinas_LCD_sim.inc)
$INCLUDE(subrutinasDeUsoFreq.inc)
end

2) (6pts.) Hacer un programa que por defecto muestre en el display la frecuencia


generada de 25hz. Como:
Frecuencia:
25hz
Esta frecuencia también que se vea en el led P1.0. Luego, mediante las
interrupciones en P3.2 y P3.3 que se puedan seleccionar otras frecuencias como
69hertz y 129hertz. La frecuencia seleccionada debe mostrarse en el display
LCD. El tren de ondas generada debe observarse en el LED conectado a P1.0.
Usar el timer0 en modo 1. Hay que indicar que Update Freq se utilizará.
Sol.
;Update Freq.: 300
;25hz->B800h
;69hz->D419h
;129hz->E6A6h

org 0h
sjmp inicio
;Aqui empieza la rutina de interrupción
org 03h
ljmp intExt0
org 13h
ljmp intExt1
inicio:
lcall configura_LCD
setb IT0 ;fija la interrupción externa sensible en el flanco de bajada
setb IT1 ;fija la interrupción externa sensible en el flanco de bajada
setb EX0 ;habilita interrupción externa 0 en el registro IE
setb EX1
setb EA ;flag de interrupción maestra del registro IE
setb p3.2 ;fija el pin p3.2 como entrada botón conectado
setb p3.3
lcall prtLCD4
db "Frecuencia :",0
mov A,#2
mov B,#10
lcall placeCur4
lcall prtLCD4
db "25hz",0
mov R0,#offCur
lcall wrLCDcom4
repite:
lcall _25hz
sjmp repite

intExt0:
mov A,#2
mov B,#10
lcall placeCur4
lcall prtLCD4
db "69hz",0
repite1:
jnb P3.3,sale
lcall _69hz
sjmp repite1
sale:
reti

intExt1:
mov A,#2
mov B,#10
lcall placeCur4
lcall prtLCD4
db "129hz",0
repite2:
jnb P3.2,sale1
lcall _129hz
sjmp repite2
sale1:
reti
_25hz:
setb TR0
mov TH0,#0B8h
mov TL0,#0h
jnb TF0,$
cpl P1.0
clr TF0
clr TR0
ret
_69hz:
setb TR0
mov TH0,#0e5h
mov TL0,#0eah
jnb TF0,$
cpl P1.0
clr TF0
clr TR0
ret
_129hz:
setb TR0
mov TH0,#0f2h
mov TL0,#0ch
jnb TF0,$
cpl P1.0
clr TF0
clr TR0
ret
$INCLUDE(subrutinas_LCD_Sim.inc)
$INCLUDE(subrutinasDeUsoFreq.inc)
end

3) (8 pts.) A los 240 segundos(aproximadamente) de un contaje de tiempo, un


Starship se hace explotar porque se ha desviado de su curso y tiene 4 motores
apagados de 33 motores. El programa empieza con la cuenta creciente en la
primera fila y en la segunda fila un dibujo de un Starship. A los 100 segundos el
display LCD muestra Fila1: “Motor1,2,3,4”. Fila2:” No funcionan”. Se intenta
resolver el problema presionando la interrupción externa 0. Que trata de
encender los motores. Si el problema no se resuelve, muestra Fila1: “ No
arregla”, Fila2:”El problema”. El tiempo sigue corriendo y a los 240 segundos
mediante la interrupción externa 1, se decide hacer explotar la nave. Se muestra
en el display. Fila1: “ Starship ”, Fila2: “ Explota ”.
Hay que indicar que Update Freq se utilizará.
Sol.
;Update Freq.:400
org 0h
ljmp inicio
org 3h
jmp inter_ext0
org 13h
jmp inter_ext1
inicio:
setb IT0
setb IT1
setb EX0
setb EX1
setb EA
setb P3.2
setb P3.3
lcall configura_LCD
mov A, #0 ; selecciono el caracter 0
mov B, #0 ; selecciono la fila del tipo 0
lcall setCGRAM4
lcall prtLCD4
db 4h, 0Eh, 1Bh, 0Ah, 0Ah, 0Ah, 1Fh, 20h,0 ; Starship
mov R0,#offCur
lcall wrLCDcom4
mov A,#2
mov B,#8
lcall placeCur4
lcall prtLCD4
db 8,0
mov A,#1
mov B,#0
lcall placeCur4
mov R5,#251
mov R3,#0
loop2:
mov A,R3
lcall tres_digitos_decimales
mov A,30h
mov R0,A
lcall wrLCDdata4
mov A,31h
mov R0,A
lcall wrLCDdata4
mov A,32h
mov R0,A
lcall wrLCDdata4
mov R0,#shLfCur
lcall wrLCDcom4
mov R0,#shLfCur
lcall wrLCDcom4
mov R0,#shLfCur
lcall wrLCDcom4
lcall retardo
cjne R3,#100,va
lcall muestra_problema
mov A,#1
mov B,#0
lcall placeCur4
va:
inc R3
djnz R5,loop2

sjmp $

inter_ext0:
mov A,#1
mov B,#0
lcall placeCur4
lcall prtLCD4
db " No arregla",0
mov A,#2
mov B,#0
lcall placeCur4
lcall prtLCD4
db " El Problema",0
mov A,#1
mov B,#2
lcall placeCur4
lcall retardo
reti

inter_ext1:
mov A,#1
mov B,#0
lcall placeCur4
lcall prtLCD4
db " STARSHIP :",8,20h,0

mov A,#2
mov B,#0
lcall placeCur4
lcall prtLCD4
db " EXPLOTA ",0
sjmp $
reti

muestra_problema:
mov A,#1
mov B,#4
lcall placeCur4
lcall prtLCD4
db "Motor1,2,3,4",0
mov A,#2
mov B,#0
lcall placeCur4
lcall prtLCD4
db " No funcionan ",0
ret
$INCLUDE(subrutinas_LCD_sim.inc)
$INCLUDE(subrutinasDeUsoFreq.inc)
end

También podría gustarte