Você está na página 1de 9

.

model small ;indica que el programa es "small"


.8086
.stack 512 ;reserva 512 bits para la pila
.data ;indica el inicio de datos
grupo_A equ 0080H;hace referencia al grupo A del 8255
grupo_B equ 0082H;hace referencia al grupo B del 8255
grupo_C equ 0084H;hace referencia al grupo C del 8255
U equ 00111110b;**************************************
U1 equ 00000000b;**** ****
N equ 01110110b;**** Se escriben los equivalentes ****
N1 equ 00000100b;**** de las letras de tal forma; ****
A equ 00110111b;**** que una etra se guarda como ****
A1 equ 00100010b;**** dos numeros de 8 bits cada ****
B equ 00111001b;**** uno. Estas letras se guardan ****
B1 equ 00100101b;**** en el registro AL para ****
C equ 00111001b;**** luego mostrarlos en los ****
C1 equ 00000000b;**** grupos de salida A y B ****
D equ 01110000b;**** ****
D1 equ 01000000b;**** ejm: ****
E equ 00111001b;**** ****
E1 equ 00100000b;**** A equ 00110111b ****
F equ 00110001b;**** A1 equ 00100010b ****
F1 equ 00100000b;**** ****
I equ 10001001b;**** forman la palabra A en un ****
I1 equ 00001000b;**** display de 14 segmentos ****
V equ 00110000b;**** ****
V1 equ 00010001b;**************************************
G equ 00111101b;**************************************
G1 equ 00000010b;**************************************
T equ 10000001b;**************************************
T1 equ 00001000b;**************************************
O equ 00111111b;**************************************
O1 equ 00000000b;**************************************
M equ 01110110b;**************************************
M1 equ 00000001b;**************************************
L equ 00111000b;**************************************
L1 equ 00000000b;**************************************
R equ 00110011b;**************************************
R1 equ 00100110b;**************************************
vacio equ 00000000b;**************************************
.code ; inicia el codigo
inicio:
MOV DX,grupo_B ;guardamos el 0082H (GRUPO_B) en DX
IN AL,DX ;habilitamos al GRUPO_B como entrada
;comparamos la entrada (AL)
cmp al,01111111b ;con el valor 01111111b (pulsador presionado)
je palabra1 ;si el pulsador esta presionado va a la subrutina "palabra1
"
jne inicio ;si el pulsador no se presiona va a la subrutina "inicio"
;esperando a que el pulsador este presionado
palabra1:
mov cx,01FFh ;registro CX=01FFh para el retardo
primera_palabra:
primer_digito:
mov al,M ;una parte de la palabra M se guarda en AL
MOV DX,GRUPO_A ;habilitamos el GRUPO_A como salida
OUT DX,AX ;mostramos el valor de AX en el GRUPO_A
mov al,M1 ;la otra parte de la palabra M se guarda en AL
MOV DX,GRUPO_B ;habilitamos el GRUPO_B como salida
OUT DX,AX ;mostramos el valor de AX en el GRUPO_B
mov al,01h ;guardamos el 01H en AL (esto para ensender el primer displ
ay;
;sera 02H para el segundo display, 04h para el tercer displ
ay,
;y asi sucesivamente)
not ax ;se niega AL porque el display es Catodo Comun
MOV DX,GRUPO_C ;habilitamos el GRUPO_C como salida
out DX,ax ;mostramos el valor negado de AX en el GRUPO_C
mov al,00h ;guardamos el 00H en AL (esto es para apagar todos los disp
lays)
not ax ;se niega AL porque el display es Catodo Comun
MOV DX,GRUPO_C ;habilitamos el GRUPO_C como salida
out DX,ax ;mostramos el valor negado de AX en el GRUPO_C
segundo_digito: ;para el segundo_digito se procede igual que
;primer_digito pero con diferente letra
mov al,I
MOV DX,GRUPO_A
OUT DX,AX
mov al,I1
MOV DX,GRUPO_B
OUT DX,AX
mov al,02h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
tercer_digito: ;para el tercer_digito se procede igual que
;primer_digito pero con diferente letra o espacio (vacio)
mov al,G
MOV DX,GRUPO_A
OUT DX,AX
mov al,G1
MOV DX,GRUPO_B
OUT DX,AX
mov al,04h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
cuarto_digito: ;para el cuarto_digito se procede igual que
;primer_digito pero con diferente letra o espacio (vacio)
mov al,U
MOV DX,GRUPO_A
OUT DX,AX
mov al,U1
MOV DX,GRUPO_B
OUT DX,AX
mov al,08h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
quinto_digito: ;para el quinto_digito se procede igual que
;primer_digito pero con diferente letra o espacio (vacio)
mov al,E
MOV DX,GRUPO_A
OUT DX,AX
mov al,E1
MOV DX,GRUPO_B
OUT DX,AX
mov al,10h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
sexto_digito: ;para el sexto_digito se procede igual que
;primer_digito pero con diferente letra o espacio (vacio)
mov al,L
MOV DX,GRUPO_A
OUT DX,AX
mov al,L1
MOV DX,GRUPO_B
OUT DX,AX
mov al,20h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
septimo_digito: ;para el septimo_digito se procede igual que
;primer_digito pero con diferente letra o espacio (vacio)
mov al,vacio
MOV DX,GRUPO_A
OUT DX,AX
mov al,vacio
MOV DX,GRUPO_B
OUT DX,AX
mov al,40h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
octavo_digito: ;para el octavo_digito se procede igual que
;primer_digito pero con diferente letra o espacio (vacio)
mov al,vacio
MOV DX,GRUPO_A
OUT DX,AX
mov al,vacio
MOV DX,GRUPO_B
OUT DX,AX
mov al,80h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
loop primera_palabra
;una vez terminado el retardo:
mov al,0xff ;AL=11111111b
MOV DX,GRUPO_B ;guardamos el 0082H (GRUPO_B) en DX
OUT DX,AX ;mostramos el valor de AL en el GRUPO_B
;
MOV DX,grupo_B
IN AL,DX ;ahora habilitamos el GRUPO_B como entrada
cmp al,01111111b ;comparamos AL con el valor 01111111b (pulsador presionado)
je palabra2 ;si se presiona el pulsador pasa a la subrutina "palabra2"
jne palabra1 ;si no se presiona vuelve a la subrutina "palabra1"
palabra2:
mov cx,01FFh
segunda_palabra:
primer_digito2:
mov al,V
MOV DX,GRUPO_A
OUT DX,AX
mov al,V1
MOV DX,GRUPO_B
OUT DX,AX
mov al,01h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
segundo_digito2:
mov al,E
MOV DX,GRUPO_A
OUT DX,AX
mov al,E1
MOV DX,GRUPO_B
OUT DX,AX
mov al,02h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
tercer_digito2:
mov al,G
MOV DX,GRUPO_A
OUT DX,AX
mov al,G1
MOV DX,GRUPO_B
OUT DX,AX
mov al,04h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
cuarto_digito2:
mov al,A
MOV DX,GRUPO_A
OUT DX,AX
mov al,A1
MOV DX,GRUPO_B
OUT DX,AX
mov al,08h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
quinto_digito2:
mov al,vacio
MOV DX,GRUPO_A
OUT DX,AX
mov al,vacio
MOV DX,GRUPO_B
OUT DX,AX
mov al,10h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
sexto_digito2:
mov al,vacio
MOV DX,GRUPO_A
OUT DX,AX
mov al,vacio
MOV DX,GRUPO_B
OUT DX,AX
mov al,20h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
septimo_digito2:
mov al,vacio
MOV DX,GRUPO_A
OUT DX,AX
mov al,vacio
MOV DX,GRUPO_B
OUT DX,AX
mov al,40h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
octavo_digito2:
mov al,vacio
MOV DX,GRUPO_A
OUT DX,AX
mov al,vacio
MOV DX,GRUPO_B
OUT DX,AX
mov al,80h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
loop segunda_palabra
mov al,0xff
MOV DX,GRUPO_B
OUT DX,AX
MOV DX,grupo_B
IN AL,DX
cmp al,01111111b
je palabra3
jne palabra2
palabra3:
mov cx,01FFh
tercera_palabra:
primer_digito3:
mov al,A
MOV DX,GRUPO_A
OUT DX,AX
mov al,A1
MOV DX,GRUPO_B
OUT DX,AX
mov al,01h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
segundo_digito3:
mov al,N
MOV DX,GRUPO_A
OUT DX,AX
mov al,N1
MOV DX,GRUPO_B
OUT DX,AX
mov al,02h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
tercer_digito3:
mov al,I
MOV DX,GRUPO_A
OUT DX,AX
mov al,I1
MOV DX,GRUPO_B
OUT DX,AX
mov al,04h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
cuarto_digito3:
mov al,C
MOV DX,GRUPO_A
OUT DX,AX
mov al,C1
MOV DX,GRUPO_B
OUT DX,AX
mov al,08h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
quinto_digito3:
mov al,E
MOV DX,GRUPO_A
OUT DX,AX
mov al,E1
MOV DX,GRUPO_B
OUT DX,AX
mov al,10h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
sexto_digito3:
mov al,T
MOV DX,GRUPO_A
OUT DX,AX
mov al,T1
MOV DX,GRUPO_B
OUT DX,AX
mov al,20h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
septimo_digito3:
mov al,O
MOV DX,GRUPO_A
OUT DX,AX
mov al,O1
MOV DX,GRUPO_B
OUT DX,AX
mov al,40h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
octavo_digito3:
mov al,vacio
MOV DX,GRUPO_A
OUT DX,AX
mov al,vacio
MOV DX,GRUPO_B
OUT DX,AX
mov al,80h
not ax
MOV DX,GRUPO_C
out DX,ax
mov al,00h
not ax
MOV DX,GRUPO_C
out DX,ax
loop tercera_palabra
mov al,0xff
MOV DX,GRUPO_B
OUT DX,AX
MOV DX,grupo_B
IN AL,DX
cmp al,01111111b
je palabra1
jne palabra3
hlt

Você também pode gostar