Você está na página 1de 10

Universidad de las Ciencias Informticas Maquinas Computadoras I Curso 2006/2007

1 Manual del profesor

TEMA II. Microprocesadores. ACTIVIDAD #25. Conferencia 11. Ejemplos de programas.

Sumario:
1. Breve introduccin. 2. Anlisis y solucin de problemas.

Bibliografa.
1. Los Microprocesadores Intel.

Objetivos:
1. Continuar desarrollando habilidades en la programacin en lenguaje ensamblador. 2. Desarrollar aplicaciones donde se empleen el 8255 y el 8253. 3. Validar posibles entradas errneas a los programas.

Orientaciones metodolgicas iniciales


Al inicio de la clase el profesor deber recordar los contenidos impartidos en las clases anteriores. Comprobar la realizacin del estudio independiente. Debe explicarle al estudiante que los ejercicios aqu resueltos deben ser desarrollados sobre MS-DOS

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

Introduccin.
Esta conferencia a diferencia de las tpicas no incorpora ningn elemento nuevo, ms bien se centra en desarrollar habilidades necesarias para la puesta a punto de ejercicios. En esta actividad se realizarn dos problemas que estn relacionados con el 8255 y 8253. En ambos ejercicios se har sonar la bocina dada una condicin o condiciones especficas.

Nota al profesor: Aqu se usa una macro con el nombre MOSTRAR que es equivalente a la macro PANTALLA, se decidi dejarla de esa manera para que coincida con la TeleConferencia, no obstante se le debe aclarar a los estudiantes.

Ejercicio 1: Realice un programa en ensamblador que permita detectar una secuencia de tres nmeros de un dgito en orden y cuando la detecte suene la bocina hasta que apriete cualquier tecla.

Este primer programa se puede considerar como un detector de secuencia. Consiste en que para sonar la bocina hay que entrar tres dgitos cualesquiera en orden, en este caso usaremos la secuencia 1-2-3 pero pudiera ser cualquier otra si cambio los valores de la variable tabla dentro del segmento de dato.

DOSSEG .MODEL SMALL .STACK .DATA CARTEL CARTEL1 CARTEL2 CARTEL3 CARTEL4 TABLA

DB DB DB DB DB DB

'INSERTE UNA SECUENCIA DE DIGITOS$' 13,10,'$' ' SECUENCIA V',181,'LIDA$' ' SECUENCIA NO V',181,'LIDA$' ' APRIETE CUALQUIER TECLA PARA SALIR$' 31H,32H,33H

; La variable tabla se emplea para hacer comparaciones y determinar si es ; vlida la secuencia, para validar otra secuencia solo hay que cambiar los ; valores de tabla y el cdigo funciona. ENTRAR MACRO MOV AH,1 INT 21H ENDM MOSTRAR MACRO VAR PUSH AX PUSH DX MOV AH,9 LEA DX,VAR INT 21H POP DX POP AX ; Servicio de imprimir un cartel en pantalla. ; Direccin de inicio del cartel.

; Espera por una tecla, no la visualiza.

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

ENDM .CODE .386 Secuencia PROC NEAR MOV AX,@DATA MOV DS,AX VOLVER: MOSTRAR CARTEL MOSTRAR CARTEL1 ; Ahora se comienza a comprobar si la secuencia que entra el usuario es la vlida. ENTRAR MOV SI,0 CMP AL,TABLA[SI] JE SEGUIR NO: MOSTRAR CARTEL3 MOSTRAR CARTEL1 JMP VOLVER SEGUIR: INC SI ENTRAR CMP AL,TABLA[SI] JNE NO INC SI ENTRAR CMP AL,TABLA[SI] JNE NO MOSTRAR CARTEL2 MOV OUT MOV OUT AX,500 42H,AL AL,AH 42H,AL ; ; ; ; Espera por el primer dgito. Para usarlo como puntero posteriormente. Comparo con el primer elemento de TABLA. Salta a la etiqueta SEGUIR si es igual.

; Imprime el Cartel3 en pantalla. ; Imprime el Cartel1 en pantalla (salto de lnea). ; Salta a la etiqueta VOLVER.

; ; ; ; ; ; ; ;

SI apunta al prximo dgito de la TABLA. Espera por el segundo dgito. Comparo con el segundo elemento de TABLA. Salta a la etiqueta NO si no es igual. SI apunta al prximo dgito de la TABLA. Espera por el tercer dgito. Comparo con el tercer elemento de TABLA. Salta a la etiqueta NO si no es igual.

; Imprime el Cartel2 en pantalla. ; Cargando la frecuencia (500 Hz). ; Envo primero el byte menos significativo. ; Envo luego el byte ms significativo. ; Leer el puerto 61H. ; Activando los bits 0 y 1 del dato ledo. ; Escribe el dato en el puerto 61h, activando la bocina. ; Imprime el Cartel1 en pantalla (salto de lnea). ; Imprime el Cartel1 en pantalla (salto de lnea). ; Imprime el Cartel4 en pantalla (salto de lnea). ; Espera por una tecla, no la visualiza.

IN AL,61H OR AL,00000011B OUT 61H,AL MOSTRAR CARTEL1 MOSTRAR CARTEL1 MOSTRAR CARTEL4 MOV AH,7 INT 21H IN AL,61H AND AL,11111100B OUT 61H,AL MOV AX,4C00H INT 21H Secuencia ENDP END

; Leer el puerto 61H. ; Desactivando los bits 0 y 1 del dato ledo. ; Desactivando la bocina. ; Devuelve el control al DOS.

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

Otra versin de este ejercicio (cualquier secuencia)


DOSSEG .MODEL SMALL .DATA CARTEL1 DB 'INSERTE UNA SECUENCIA DE DIGITOS$' CARTEL2 DB ' SECUENCIA V',181,'LIDA$' CARTEL3 DB ' SECUENCIA NO V',181,'LIDA$' CARTEL4 DB ' APRIETE CUALQUIER TECLA PARA SALIR$' NLINEA DB 13,10,'$' ENTRAR MACRO MOV AH,1 INT 21H ENDM PANTALLA MACRO VAR PUSH AX PUSH DX MOV AH,9 LEA DX,VAR INT 21H POP DX POP AX ENDM CONF_FRECSONIDO MACRO Frec PUSH EAX ; Salvando en la pila en el valor de los registros PUSH EBX ; que se utilizan en la macro. PUSH EDX XOR MOV MOV DIV EDX, EDX EAX, 1193180 EBX, Frec EBX

; Frecuencia de entrada (F ). reloj ; En EBX tengo el valor de la Frecuencia del sonido. ; Divido contenido de EAX entre el contenido de EBX. ; En AX tengo la base del contador, envo la parte baja. ; Envo la parte alta. ; Restauro el valor que tenan los registros antes de que ; la macro se ejecutara.

OUT 42H,AL XCHG AL,AH OUT 42H,AL POP EDX POP EBX POP EAX ENDM .CODE .386 Secuencia PROC NEAR MOV AX,@DATA MOV DS,AX VOLVER: PANTALLA CARTEL1 PANTALLA NLINEA ENTRAR MOV BL,AL MOV CX,2 lazo: ENTRAR INC BL CMP AL,BL JNE NO MOV BL,AL LOOP lazo

; Imprime el Cartel1 en pantalla. ; Imprime el NLINEA en pantalla (salto de lnea). ; Espera por la primera tecla. ; Guardo en BL el ASCII de la primera tecla. ; CX=2 es la cantidad de veces que se repite el ciclo. ; ; ; ; Espera por la segunda tecla. BL guarda el ASCII de la prxima tecla. Comparo la tecla con el ASCII almacenado en BL. Salta a la etiqueta NO si no es igual.

; Actualiza BL con el ASCII de la ltima tecla pulsada. ; Decremento CX y salta a la etiqueta si no es cero.

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

5
; ; ; ; Imprime Imprime Imprime Imprime el el el el Cartel2 en pantalla. NLINEA en pantalla (salto de lnea). NLINEA en pantalla (salto de lnea). Cartel4 en pantalla.

PANTALLA PANTALLA PANTALLA PANTALLA

CARTEL2 NLINEA NLINEA CARTEL4

CONF_FRECSONIDO 1000 CALL ENABLE_BOC MOV AH,7 INT 21H CALL DISABLE_BOC JMP salir NO: PANTALLA CARTEL3 PANTALLA NLINEA JMP volver salir: MOV AX,4C00H INT 21H SECUENCIA ENDP ENABLE_BOC PROC NEAR IN AL,61H OR AL,00000011B OUT 61H,AL RET ENABLE_BOC ENDP DISABLE_BOC PROC NEAR IN AL,61H AND AL,11111100B OUT 61H,AL RET DISABLE_BOC ENDP END

; Enva la frecuencia (1000 Hz)a la sonara la bocina. ; Activando la bocina. ; Espera por una tecla, no la visualiza. ; Desactivando la bocina. ; Salta a la etiqueta SALIR. ; Imprime el Cartel3 en pantalla. ; Imprime el NLINEA en pantalla (salto de lnea). ; Salta a la etiqueta VOLVER. ; Devuelve el control al DOS.

; Leer el puerto 61H. ; Activando los bits 0 y 1 del dato ledo. ; Escribe el dato en el puerto 61h, activando la bocina. ; Retorna al procedimiento que lo invoco.

; Leer el puerto 61H. ; Desactivando los bits 0 y 1 del dato ledo. ; Escribe el dato en el puerto 61h, desactivando la bocina. ; Retorna al procedimiento que lo invoco.

Ejercicio 2: Realice un programa en ensamblador que al oprimir cualquiera de las teclas del 1 al 5 la bocina suene un nmero de veces igual al digito pulsado. Ej: si aprieto el 3 la bocina debe sonar 3 veces (un pitido no tan prolongado). Si aprieta una tecla que no est entre el 1 y el 5 debe mostrar un cartel indicndole al usuario que se equivoc y que para salir debe apretar la tecla n. Este segundo programa sigue la idea de buscar una condicin para hacer sonar la bocina y ser cuando se apriete una tecla entre 1 y 5. Pero ahora se agrega un nuevo elemento que es temporizar utilizando herramientas de programacin, en este caso los lazos. De esta manera se logra una demora pero no se tiene un control exacto del tiempo, pero para la aplicacin que desarrollaremos es suficiente porque no requiere tanta precisin.
DOSSEG .MODEL SMALL .DATA CARTEL DB 'Apriete una tecla del 1 al 5 para sonar la bocina, para salir apriete la tecla (n).$' CARTEL1 DB 13,10,'$' CARTEL2 DB 'No aprimi',162,' el d',161,'gito correcto.$'

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

NVECES DB 0 TABLA DB 1,2,3,4,5 VAR DB 5 ; Estas dos ltimas variables se emplean para comprobar que dgito se entr, la ; variable VAR siempre ser igual a la cantidad de elementos que tenga la ; variable TABLA ENTRAR MACRO MOV AH,1 INT 21H ENDM MOSTRAR MACRO VAR PUSH AX PUSH DX MOV AH,9 LEA DX,VAR INT 21H POP DX POP AX ENDM ; ; ; ; Con la siguiente macro se va a producir una demora de tiempo un poco mas exacta, el inconveniente es que se ha considerado que va a funcionar en micros que trabajen a 2,4 Ghz. Con el parmetro CONTROL se puede alargar o disminuir el tiempo. La explicacin detallada la puede ver en la TeleConferencia a partir del min 40.

TEMPORIZAR MACRO CONTROL LOCAL TIEMPO,TIEMPO1 MOV CX,CONTROL TIEMPO: PUSH CX MOV CX,65535 TIEMPO1: LOOP TIEMPO1 POP CX LOOP TIEMPO ENDM .CODE SONAR PROC NEAR MOV AX,@DATA MOV DS,AX VOLVER: MOSTRAR CARTEL MOSTRAR CARTEL1 MOV SI,0 MOV BL,VAR ENTRAR CMP AL,'n' JE SALIR CMP AL,'N' JE SALIR

; Etiquetas declaradas dentro de la macro. ; Cargo en CX el valor del lazo exterior. ; Para que no perder el valor de CX del lazo exterior. ; Valor del lazo interior. ; Decremento CX y salta a la etiqueta si no es cero. ; Restauro en CX el valor del lazo exterior. ; Decremento CX y salta a la etiqueta si no es cero.

; ; ; ;

Imprime el Cartel en pantalla. Imprime un salto de lnea en pantalla. Para usarlo como puntero en el direccionado. Guardo en BL la cantidad total (1-5).

; Espera por una tecla, no la visualiza. ; Comparo con la condicin de salida. ; Comparo con la condicin de salida.

; Se comprueba que dgito fue entrado (1-5) a travs de un ciclo y se interrumpe cuando se ; encuentre el dgito. Note que si se quiere aumentar la cantidad de dgitos solo hay que ; insertar ms valores a TABLA y cambiar el valor de VAR sin necesidad de cambiar el cdigo. SUB AL,30H CICLO: CMP AL,TABLA[SI] JE SEGUIR ; Se verifica si el dgito est en la TABLA. ; Salta a la etiqueta SEGUIR si se encuentra. ; Se convierte el ASCII entrado a dgito independiente.

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

7
; SI apunta a la prxima posicin si no se encuentra. ; Decrementa el contador. ; Salta a la etiqueta CICLO si no es cero. ; Se muestra este cartel si equivoca el dgito. ; Imprime un salto de lnea en la pantalla. ; Salta a la etiqueta VOLVER, repite todo desde el principio. ; Cargo en la variable la cantidad de veces que sonar la ; bocina, porque se usa AL posteriormente. ; Cargo la base de conteo. ; Escribo el byte menos significativo primero. ; Escribo el byte ms significativo despus. ; Habilita la bocina. ; Introduce una demora de tiempo (aproximadamente 2s para ; Procesadores que trabajan a 2,4 Ghz).

INC SI DEC BL JNZ CICLO MOSTRAR CARTEL1 MOSTRAR CARTEL2 MOSTRAR CARTEL1 JMP VOLVER SEGUIR: MOV NVECES,AL REPETIR: MOV OUT MOV OUT

AX,500 42H,AL AL,AH 42H,AL

CALL ENABLE_BOC TEMPORIZAR 32767

CALL DISABLE_BOC TEMPORIZAR 16383

; El tiempo que la bocina esta apagada es la ; Introduce una demora de tiempo (aproximadamente 1s para ; Procesadores que trabajan a 2,4 Ghz).

DEC NVECES JNZ REPETIR MOSTRAR CARTEL1 JMP VOLVER SALIR: MOV AX,4C00H INT 21H SONAR ENDP ENABLE_BOC PROC NEAR IN AL,61H OR AL,00000011B OUT 61H,AL RET ENABLE_BOC ENDP DISABLE_BOC PROC NEAR IN AL,61H AND AL,11111100B OUT 61H,AL RET DISABLE_BOC ENDP END

; NVECES es el nmero de veces que suena la bocina. ; Salta a la etiqueta REPETIR si no es cero. ; Salta a la etiqueta VOLVER, repite todo desde elprincipio. ; Devuelve el control al DOS.

Otra versin de este ejercicio


DOSSEG .MODEL SMALL .DATA CARTEL1 CARTEL2 ERROR NLINEA ENTRAR MACRO MOV AH,1 INT 21H ENDM

DB DB DB DB

'TECLEE EL NUMERO:$' 'SI DESEA SALIR OPRIMA LA TECLA (n):$' ' Error al entrar el numero' 13,10,'$'

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

PANTALLA MACRO VAR PUSH AX PUSH DX MOV AH,9 LEA DX,VAR INT 21H POP DX POP AX ENDM CONF_FRECSONIDO MACRO FREC PUSH EAX PUSH EBX PUSH EDX XOR MOV MOV DIV EDX,EDX EAX,1193180 EBX, FREC EBX

; En AX tengo la base de conteo.

OUT 42H,AL XCHG AL,AH OUT 42H,AL POP EDX POP EBX POP EAX ENDM TEMPORIZAR MACRO CONTROL LOCAL TIEMPO,TIEMPO1 PUSH CX MOV CX,CONTROL TIEMPO: PUSH CX MOV CX,65535 TIEMPO1: LOOP TIEMPO1 POP CX LOOP TIEMPO POP CX ENDM .CODE .386 Secuencia PROC NEAR MOV AX,@DATA MOV DS,AX REPITE: PANTALLA CARTEL1 ENTRAR CMP AL,31h JNB CHEQUEA5 PANTALLA ERROR PANTALLA NLINEA JMP REPITE CHEQUEA5: CMP AL,35h JNA NUMOK PANTALLA ERROR ; Etiquetas de la macro. ; Se salva el valor de CX en la pila.

; Para que no se confunda con el valor de CX del lazo interior.

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

PANTALLA NLINEA JMP REPITE NUMOK: PANTALLA NLINEA SUB AL,30H MOV CL,AL XOR CH,CH lazo: CONF_FRECSONIDO 1000 CALL ENABLE_BOC TEMPORIZAR 32767 CALL DISABLE_BOC TEMPORIZAR 16383 LOOP lazo PANTALLA CARTEL2 PANTALLA NLINEA ENTRAR CMP AL,'n' JNE REPITE salir: MOV AX,4C00H INT 21H Secuencia ENDP ENABLE_BOC PROC NEAR IN AL,61H OR AL,00000011B OUT 61H,AL RET ENABLE_BOC ENDP DISABLE_BOC PROC NEAR IN AL,61H AND AL,11111100B OUT 61H,AL RET DISABLE_BOC ENDP END

Ejercicio 3: Dado el siguiente cdigo de un programa escrito en lenguaje ensamblador. a) Determine a que valor se debe inicializar la variable VALOR para que la bocina interna de la mquina suene a una frecuencia de 5 Khz. b) Diga la tecla que se debe oprimir para que la bocina deje de sonar.
DOSSEG .MODEL SMALL .DATA VALOR DW ? .CODE XXX PROC MOV AX,@DATA MOV DS,AX MOV BX,0FFH SUB BX,VALOR

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

10

MOV AX,BX OUT 42H,AL XCHG AL,AH OUT 42H,AL IN AL,61H OR AL,00000011B OUT 61H,AL Repite: MOV AH,7 INT 21H CMP AL,0DH JNE repite IN AL,61H AND AL,11111100B OUT 61H,AL MOV AX,4C00H INT 21H XXX ENDP END

Estudio Independiente
Realice un programa en ensamblador que al entrar por teclado un valor de frecuencia en Hz haga sonar la bocina a esa frecuencia. Para salir hay que apretar la tecla s cuando la bocina este sonando, si no es la s el programa debe dar la posibilidad de entrar otro valor de frecuencia. Si el valor de frecuencia no est en el intervalo de frecuencias audibles 20Hz-20000Hz debe mostrar un cartel de error y brindar la posibilidad de entrar otra.

Conclusiones
En la clase de hoy se ha ejercitado el trabajo con dos circuitos muy importantes que sirven de apoyo al trabajo del microprocesador: el 8253 y el 8255, los cuales los hemos combinado en la resolucin de ejercicios de mediana complejidad.

Confeccionado por: Colectivo de profesores de la Facultad 7.


Fecha de ltima modificacin: martes, 05 de diciembre de 2006, 14:39:15

_______________________________________________________________________________
Departamento de Sistemas Digitales