You are on page 1of 7

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

1 Manual del profesor

TEMA II. Microprocesadores. ACTIVIDAD #26. Laboratorio 4. Utilizacin de la bocina de la mquina.

Objetivos:
1. Profundizar en las tcnicas de puesta a punto de programas utilizando las interrupciones del DOS. 2. Utilizar el 8255 y 8253/54 en aplicaciones que hagan uso de la bocina interna de la mquina.

Introduccin.
En este laboratorio vamos a hacer sonar la bocina interna de nuestra PC, probando inicialmente algunos de los ejercicios desarrollados en clases anteriores e implementaremos otros programas donde utilizaremos al puerto programable 8255 y al temporizador 8253/54.

Orientaciones metodolgicas iniciales


Para este laboratorio se debe proceder de la misma forma que en los anteriores. Se recomienda probar algunos de los ejercicios resueltos en clases anteriores como por ejemplo el piano, el cual resulta un factor de motivacin para los estudiantes.

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

Ejercicio 1
Realice un programa en ensamblador que al introducir un digito del 1 al 5 la bocina emita tantos pitidos como el nmero introducido y que estos vayan disminuyendo en tiempo de duracin. Si no teclea un nmero dentro de ese intervalo el programa debe mostrar un cartel de error y brindar la posibilidad de entrar otro dgito. Para salir presione la s y sino la aplicacin debe dar la posibilidad de introducir otro dgito. En este programa se usa la misma estructura del programa de los pitidos de la conferencia anterior para obtener una demora de tiempo (lazos). Para que los pitidos vayan disminuyendo en tiempo, lo que se hace en este programa es variar el valor del parmetro de la macro Temporizar a partir de un valor base, para el cual se escogi 8182 que equivale aproximadamente a medio segundo de forma tal que: Ejemplo: Si el digito entrado es igual a 3: 1. pita 3*0.5s la 1ra vez se apaga durante 1s. 2. pita 2*0.5s la 2da vez se apaga durante 1s. 3. pita 1*0.5s la 3ra vez se apaga durante 1s. Solucin del problema:
DOSSEG .MODEL SMALL .DATA CARTEL1 CARTEL2 ERROR NLINEA MEDIOSEG ENTRAR MACRO MOV AH,1 INT 21H ENDM CONF_FRECSONIDO MACRO Frec PUSH EAX PUSH EBX PUSH EDX XOR MOV MOV DIV EDX, EDX EAX, 1193180 EBX, Frec EBX

DB DB DB DB DW

'TECLEE EL NUMERO:$' 'OPRIMA (s) para salir, cualquier otra para entrar otro valor$' ' Error al entrar el numero' 13,10,'$' 8192 ; Valor aproximado para 1/2 segundo. ; Espera por una tecla, con visualizacin.

; Salvando en la pila en el valor de los registros ; que se utilizan en la macro.

; 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

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

ENDM PANTALLA MACRO VAR PUSH AX PUSH DX MOV AH,9 LEA DX,VAR INT 21H POP DX POP AX 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 PUSH CX ENDM .CODE .386 Secuencia PROC NEAR MOV AX,@DATA MOV DS,AX REPITE: PANTALLA CARTEL1 ENTRAR CMP AL,31h JNB CHEQUEA5 PANTALLA ERROR JMP REPITE CHEQUEA5: CMP AL,35h JNA NUMOK PANTALLA ERROR JMP REPITE NUMOK: PANTALLA NLINEA SUB AL,30H MOV CL,AL XOR CH,CH lazo: CONF_FRECSONIDO 1000 CALL ENABLE_BOC MOV AX,CX MUL MEDIOSEG TEMPORIZAR AX CALL DISABLE_BOC TEMPORIZAR 16384 ; Enva la frecuencia a la que sonara la bocina. ; Habilitando la bocina. ; Se multiplica 0.5 Seg. por el nmero entrado. ; Tiempo que demora sonando la bocina. ; Deshabilitando la bocina. ; Tiempo que demora apagada la bocina (1 seg). ; Imprime un cambio de lnea. ; Convierte de ASCII a dgito independiente. ; Cargo en CX la cantidad de pitidos. ; ; ; ; Imprime el CARTEL1. Espera por una tecla. Se valida la entrada de datos Salta etiqueta si es menor o igual. ; 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. ; Etiquetas declaradas dentro de la macro. ; Servicio de imprimir un cartel en pantalla. ; Direccin de inicio del cartel.

; Imprime el cartel de ERROR. ; Sala a la etiqueta REPITE. ; Comparo con el ASCII del nmero 5. ; Salta a la etiqueta NUMOK. ; Imprime el cartel de ERROR. ; Salta a la etiqueta REPITE.

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

LOOP lazo PANTALLA CARTEL2 ENTRAR PANTALLA NLINEA CMP AL,'s' 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 ; Devuelve el control al sistema operativo DOS. ; ; ; ; ; Imprime el CARTEL2 Espera por una tecla. Provoca un cambio de lnea. Condicin de salida del programa Salta a la etiqueta REPITE.

; 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.

NOTA: Cambie el valor de la variable MEDIOSEG para cambiar los tiempos que demorar la activacin de la bocina.

Ejercicio 2. 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 oprimir 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. Solucin del problema:
Dosseg .Model Small .386 .Data CARTEL CARTEL1 CARTEL3 NLINEA Numero Freq

'Entre la frecuencia de la bocina.',13,10,'$' 'Para salir presione la tecla s, si desea cambiar la frecuencia Presione cualquier otra tecla.',13,10,'$' DB 'Frecuencia no audible (audibles aproximadamente 20Hz-20000Hz)',13,10,'$' DB 'Hz',13,10,'$' DW 0 DD ?

DB DB

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

CONF_FRECSONIDO MACRO Frec PUSH EAX PUSH EBX PUSH EDX XOR MOV MOV DIV OUT XCHG OUT POP POP POP ENDM EDX, EDX EAX, 1193180 EBX, Frec EBX 42H,AL AL,AH 42H,AL EDX EBX EAX

; Salvando en la pila en el valor de los registros ; que se utilizan en la macro.

; 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.

Leer_Numero MACRO LOCAL mov mov NEXT: mov int cmp je cmp jb cmp ja mov mov int sub xor xchg mul add jmp FIN: ENDM ENTRAR MACRO MOV AH,1 MOV 21H ENDM

variable NEXT,FIN variable,0 BX,10 AH,07h 21h AL,13 FIN AL,'0' NEXT AL,'9' NEXT AH,2 DL,AL 21h AL,30h AH,AH variable,AX BX variable,AX NEXT

;Inicializar el Nuevo valor ;Preparar BX para multiplicar ;solicitar servicio 7. Entrada ;de un caracter sin mostrarle ;Verificar si es ENTER ;Si lo es, termina la entrada ;Si no verificar que sea ;nmero. El ASCII debe estar ;entre 48 y 57. Si no es ;nmero retornar a la espera ;solicitor servicio 2. Salida ;de un caracter. El ASCII se ;indica en DL ;calcular el dgito ;A fin de ahorrar registros y ;memoria, el valor se intercam ;bia con AX para multiplicarle ;por 10 y luego sumarle digito ;Repetir otra vez ;Si ENTER, continuar programa

; Espera por una tecla, con visualizacin.

PANTALLA MACRO VAR PUSH AX PUSH DX MOV AH,9 LEA DX,VAR INT 21H POP DX POP AX ENDM

; Servicio de imprimir un cartel en pantalla. ; Direccin de inicio del cartel.

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

.Code Frecuencia PROC MOV AX, @DATA MOV DS, AX Next: Pantalla CARTEL Leer_numero Numero CMP Numero, 20 JAE rango Pantalla CARTEL3 JMP Next rango: CMP Numero, 20000 JBE Enrango Pantalla CARTEL3 JMP Next Enrango:PANTALLA NLINEA MOVZX EAX, Numero

; Inicializa el segmento de datos.

; Reseccin de la frecuencia a la que sonar la bocina. ; Validar que la frecuencia este en el rango audible.

;Para convertir el valor de frecuencia entrado en DD que es el ;tipo de dato que requiere como parmetro de entrada la ;MACRO CONF_FRECSONIDO.

MOV Freq, EAX CONF_FRECSONIDO Freq CALL ENABLE_BOC Pantalla CARTEL1 ENTRAR CMP AL,'s' JNE next CALL DISABLE_BOC MOV AX, 4C00H int 21h Frecuencia 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

;Se chequea la condicin de salida del programa.

; 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.

_______________________________________________________________________________
Departamento de Sistemas Digitales

Mquinas Computadoras I

Estudio Independiente
Realice un programa en lenguaje ensamblador que haga sonar la bocina de la PC a la frecuencia de 1kHz para la tecla 1, 2kHz para la tecla 2 y as sucesivamente hasta la tecla 9.

Confeccionado por: Colectivo de profesores de la Facultad 7.


Fecha de ltima modificacin: jueves, 07 de diciembre de 2006, 0:32:06

_______________________________________________________________________________
Departamento de Sistemas Digitales

You might also like