Beruflich Dokumente
Kultur Dokumente
Microprocesadores y Microcontroladores
Práctica 2.3
Docente: Ing. Elember Guanoluiza
NRC: 8523
EAMI:
1. Ordenar dos números que se ingresan por teclado el mayor se imprima en el puerto de I/O
del display de 7 segmentos.
Para este problema se ha solicitado comparar dos números con el fin de determinar el mayor,
dicho número será impreso en el puerto I/O (de entradas y salidas ), el método en el cual se
mostrará el resultado es con un display de 7 segmentos.
2. Que se prendan las luces amarillas de todos los semáforos, sistema ceda el paso para la
noche.
Se solicita encender una luz a un momento determinado del día , como es el caso de la noche
con el fin de que los vehículos puedan transitar con precaución. En esos momentos se
identifica la hora a la que comienza el proceso y se da la orden de encender las luces
amarillas tomando el tiempo.
Prender un led de izq a der, de uno en uno, un solo led prendido a la vez.
Prender un led de der a izq, de uno en uno, un solo led prendido a la vez.
Prender un led de izq a der, de uno en uno, un solo led prendido a la vez.
Prender un led de der a izq, de uno en uno, un solo led prendido a la vez.
Prender un led de izq – der – izq, un solo led prendido a la vez.
Similar a lo solicitado anteriormente en este problema debemos encender luces una a la vez
utilizando desplazamientos, dependiendo del lado al que decidamos realizar dicho
desplazamiento el programa ejecutará una acción diferente, en este caso existirán mas
combinaciones, teniendo así un código para prender de uno en uno de izquierda a derecha, de
uno en uno de derecha a izquierda y uno que va de izquierda a derecha y posteriormente a
izquierda
1. Ordenar dos números que se ingresan por teclado el mayor se imprima en el puerto de I/O
del display de 7 segmentos.
CMP A,B
2. Que se prendan las luces amarillas de todos los semáforos, sistema ceda el paso para la
noche.
Se almacena en binario la posición en la que están encendidas todas las luces amarillas y se
carga al virtual device trafic_lights.
Prender un led de izq a der, de uno en uno, un solo led prendido a la vez.
Prender un led de der a izq, de uno en uno, un solo led prendido a la vez.
Para los desplazamientos, primero se declara el número, para este caso en binario, y a continuación
se utilizara el comando shl (desplazamiento a la izquierda) o shr (desplazamiento a la derecha), y
para el desplazamiento nos ayudaremos del registro CL en el cual almacenamos la cantidad de
puestos que queremos desplazar nuestro registro AL y luego lo mostramos en el display
Se ingresan las tablas que contienen los valores de cada posición que va a tomar el virtual
device, y luego se le carga una a una cada fila, al terminar de cargar la última fila, para la
siguiente, se reinicia, y vuelve a ingresar desde la primera.
Paso 3 - M (Modelamiento)
1. Ordenar dos números que se ingresan por teclado el mayor se imprima en el puerto de I/O
del display de 7 segmentos.
2. Que se prendan las luces amarillas de todos los semáforos, sistema ceda el paso para la
noche.
3. Juego de luces en el semáforo usando desplazamiento izq y der:
Prender un led de izq a der, de uno en uno, un solo led prendido a la vez.
Prender un led de der a izq, de uno en uno, un solo led prendido a la vez.
Paso 4 - I (Implementación)
1. Ordenar dos números que se ingresan por teclado el mayor se imprima en el puerto de I/O del
display de 7 segmentos.
INCLUDE 'emu8086.inc'
ORG 100h
.model small
.stack 100
.data ;se declaran las variables
num1 dw 0000h ;variable num1 inicializada en 0
num2 dw 0000h ;variable num1 inicializada en 0
aux1 dw 0000h ;variable aux1 inicializada en 0
.code
imprimir macro string ;se imprime el macro
mov dx, offset string
mov ah, 9 ;muevo 9 a AH
int 21h
endm
imprimir pregunta
CALL scan_num ;llamo a scam_num para obtener el valor del numero
MOV num1,CX ;muevo CX a num1
CALL preg ;llamo a preg
CALL decProc ;llamo a decProc
decProc endp ;termino decProc
out:
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
DEFINE_PTHIS
DEFINE_CLEAR_SCREEN
#start=Traffic_Lights.exe#
name "traffic"
next:
mov ax, [si] ;AX toma el valor del vector si
out 4, ax ;Llamo a traffic lights y toma el valor del registro A
; Retardo de 5 segundos
mov cx, 4Ch
mov dx, 4B40h
mov ah, 86h
int 15h
; FEDC_BA98_7654_3210
situation dw 0000_0000_0000_0000b ;situacion inicial, luces apagadas
s1 dw 0000_0100_1001_0010b ;situacion luces amarillas estan encedidas
sit_end = $
Prender un led de izq a der, de uno en uno, un solo led prendido a la vez.
Prender un led de der a izq, de uno en uno, un solo led prendido a la vez.
INICIO:
MOV Ax,01H
OUT 04H,Ax
CALL RETARDO
CALL ID
MOV Ax,00H
OUT 04H,Ax
CALL RETARDO
CALL DeI
MOV Ax,00H
OUT 04H,Ax
CALL RETARDO
CALL IDI
MOV Ax,00H
OUT 04H,Ax
CALL RETARDO
RET
ID:
INC Ax
CALL LUZ
CMP Ax, Dx
JZ DeI
JMP ID
RET
DeI:
DEC Ax
CALL LUZ
CALL RETARDO
CMP Ax, Cx
JZ IDI
JMP DeI
RET
IDI:
CALL ID
CALL DeI
RET
RETARDO:
MOV BL,10d
BEXT: MOV BH,5d
BINT: DEC BH
JNZ BINT
DEC BL
JNZ BEXT
RET
LUZ:
CMP AX,01h
JZ M1
CMP AX,02h
JZ M2
CMP AX,03h
JZ M3
CMP AX,04h
JZ M4
CMP AX,05h
JZ M5
CMP AX,06h
JZ M6
CMP AX,07h
JZ M7
CMP AX,08h
JZ M8
CMP AX,09h
JZ M9
CMP AX,010d
JZ M10
CMP AX,011d
JZ M11
CMP AX,012d
JZ M12
CMP AX,013d
JZ M13
M1:
MOV DX,AX
MOV CX,1h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M2:
MOV DX,AX
MOV CX,2h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M3:
MOV DX,AX
MOV CX,4h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M4:
MOV DX,AX
MOV CX,8h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M5:
MOV DX,AX
MOV CX,10h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M6:
MOV DX,AX
MOV CX,20h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M7:
MOV DX,AX
MOV CX,40h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M8:
MOV DX,AX
MOV CX,80h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M9:
MOV DX,AX
MOV CX,100h
MOV AX,CX
OUT 04h,AX
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M10:
MOV DX,AX
MOV CX,200h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M11:
MOV DX,AX
MOV CX,400h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M12:
MOV DX,AX
MOV CX,800h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
M13:
MOV DX,AX
MOV CX,1000h
MOV AX,CX
OUT 04h,AX
CALL RETARDO
MOV AX,DX
MOV CX,0
MOV Dx, 12d
RET
HLT
4. Juego de luces en el semáforo usando tablas:
Prender un led de izq a der, de uno en uno, un solo led prendido a la vez.
Prender un led de der a izq, de uno en uno, un solo led prendido a la vez.
Prender un led de izq – der – izq, un solo led prendido a la vez.
#start=Traffic_Lights.exe#
; Retardo de 1 segundo
mov cx, 000Fh
mov dx, 4240h
mov ah, 86h
int 15h
; FEDC_BA98_7654_3210
situation dw 0000_1000_0000_0000b
s1 dw 0000_0100_0000_0000b
s2 dw 0000_0010_0000_0000b
s3 dw 0000_0001_0000_0000b
s4 dw 0000_0000_1000_0000b
s5 dw 0000_0000_0100_0000b
s6 dw 0000_0000_0010_0000b
s7 dw 0000_0000_0001_0000b
s8 dw 0000_0000_0000_1000b
s9 dw 0000_0000_0000_0100b
s10 dw 0000_0000_0000_0010b
s11 dw 0000_0000_0000_0001b
s12 dw 0000_0000_0000_0001b
s13 dw 0000_0000_0000_0010b
s14 dw 0000_0000_0000_0100b
s15 dw 0000_0000_0000_1000b
s16 dw 0000_0000_0001_0000b
s17 dw 0000_0000_0010_0000b
s18 dw 0000_0000_0100_0000b
s19 dw 0000_0000_1000_0000b
s20 dw 0000_0001_0000_0000b
s21 dw 0000_0010_0000_0000b
s22 dw 0000_0100_0000_0000b
s23 dw 0000_1000_0000_0000b