Pregunta: | 51165 - TECLADO CON SONIDO |
Autor: | Nely PC |
Alguien m puede ayudar para la solución de un programa en ensamblador que consiste en que en el momento de pulsar un tecla emita un sonido segun la letra seleccionada.
El sonido tiene que ser distinto para varias letras. Procurando que el sonido sea emitido por medio de bocinas externas y no las que tiene la maquina. Pero el ultimo punto puede ser omitido. |
Respuesta: | Anny Campos Cosme |
Mira, yo no soy una experta en el tema y la verdad es que estoy aprendiendo porque soy estudiante de segundo año de informática pero con distintos valores de frecuencia puedes lograr distintos sonidos para las teclas. Solo tienes que detectar que tecla es la que está pulsada y según la tecla mandar a ejecutar el segmento de codigo que hace sonar la bocina con una frecuencia determinada por ti.
Aquí te pongo un ejercicio con su solución que te puede servir de guía y si lo modificas puedes lograr lo que quieres. De todos modos creo que tengo la solución para lo que quieres solo que no la encuentro. Escríbeme luego a ver si te la puedo dar. salu2 yo Realice un programa en ensamblador que al apretar cualquiera de las teclas del 1 al 5 la bocina suene un número de veces igual al digito que se apretó. Ej: Si se oprime el 3 que la bocina suene 3 veces (Primero durante tres segundos, después durante dos segundos, y finalmente durante un segundo) y a una frecuencia de 2000 Hz. Si aprieta una tecla que no está entre el 1 y el 5 debe mostrar un cartel indicándole al usuario que se equivocó y para salir apretar la n. DOSSEG .MODEL SMALL .DATA CARTEL DB 13,10,'Oprima una tecla del 1 al 5 para sonar la bocina, n para salir.',13,10,'$' CARTEL1 DB 13,10,'No oprimi',162,' el d',161,'gito correcto.',13,10,'$' NVECES DB 0 CONTEO DB 0 VIEJOIP1CH DW ? VIEJOCS1CH DW ? 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 LEER MACRO VECTOR,VAR,VAR1 MOV AL,VECTOR MOV AH,35H INT 21H MOV VAR,BX MOV VAR1,ES ENDM ESCRIBIR MACRO VECTOR,SUB MOV AL,VECTOR MOV AH,25H PUSH DS MOV DX,OFFSET SUB PUSH CS POP DS;DS=CS INT 21H POP DS ENDM .CODE SONAR PROC NEAR MOV AX,@DATA MOV DS,AX LEER 1CH,VIEJOIP1CH,VIEJOCS1CH ESCRIBIR 1CH,NUEVA1CH VOLVER: MOSTRAR CARTEL ENTRAR CMP AL,'n' JE SALIR CMP AL,'N' JE SALIR SUB AL,30H ; A partir de aquí se comprueba que dígito se apretó, el registro BL comienza con valor 5 ; y se ira comparando con AL y decrementando hasta llegar al valor 1. CMP AL,1 JB ERROR CMP AL,5 JBE SEGUIR ERROR: MOSTRAR CARTEL1 ;Muestro este cartel si equivoca el dígito. JMP VOLVER ;Sonar bocina y cargo la base de conteo correspondiente a la frecuencia 2000 Hz. SEGUIR: MOV NVECES,AL ;Porque se usa AL posteriormente. MOV AX,596 OUT 42H,AL MOV AL,AH OUT 42H,AL REPETIR: IN AL,61H ;Encender Bocina. OR AL,00000011B OUT 61H,AL MOV AL,18 ;Multiplicando NVECES*18 obtengo los segundos que debo esperar. MOV BL,NVECES MUL BL MOV CONTEO,AL LAZO: CMP CONTEO,0 ;Lazo de espera por las conteo igual a NVECES*18 ITs, JNE LAZO ;se decrementa CONTEO en la subrutina de IT. IN AL,61H ;Apagar Bocina. AND AL,11111100B OUT 61H,AL MOV CONTEO,18 LAZO1: CMP CONTEO,0 ;Lazo de espera para 1 segundo entre intervalos de sonido. JNE LAZO1 DEC NVECES JNZ REPETIR JMP VOLVER ;Restaurar el vector viejo de la INT 1Ch. SALIR: MOV DX,VIEJOIP1CH MOV AX,VIEJOCS1CH MOV DS,AX MOV AH,25H MOV AL,1CH INT 21H MOV AX,4C00H INT 21H SONAR ENDP NUEVA1CH PROC FAR MOV AX,@DATA ;Esta rutina la llama la IT 8 mediante INT 1Ch. MOV DS,AX DEC CONTEO IRET NUEVA1CH ENDP END |