.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