Autor Tema: Ayuda en assembler para intel -TECLADO  (Leído 1767 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado americo.etn

  • PIC10
  • *
  • Mensajes: 19
    • http://electronico-etn.blogspot.com
Ayuda en assembler para intel -TECLADO
« en: 02 de Abril de 2012, 17:37:18 »
buenas tardes, necesito ayuda, por mas que e intentato no pude

el problema que tengo es con el teclado

mientras este apretanto una tecla, el programa debe de ejecutar una sub-rutina (por ejemplo mostrar un cuadro en pantalla) hasta que deje de apretar dicha tecla.

fabor ayuda

intente de este manera:

bucle1:
mov        ah,0bh      ;verificamos si hay tecla disponible
int           21h
cmp         al,0ffh      ;si no hay tecla presionada
jne           fin         ;realizamos algunas cosas mas, antes de volver a nuestro bucle 1 y que vuelva a verificar

;si hay tecla presionada

mov         ah,07h     ;leemos tecla sin eco
int            21h          ; para hacer otras comparaciones con el tipo de tecla

cmp        al,'a'          ;si apretamos tecla dibujamos un dibujo a
jne          otro
call           dibujete_a
jmp          bucle1
otro:
call           dibujete_b     ;si no apretamos a, entonces dibujamos un dibujo b

fin:
call   ...
..                                     ;realizo algunas cosas antes
...
jmp          bucle1


lamentablemente al ejecutar el codigo me sale un parpadeo, como si apretara una vez la tecla a luego se pusiera en otra tecla, y otra vez tecla a.  y asi.. asi que no es un dibujo constante

porfabor..

como enviar un 1 logico mientras estes apretando una tecla, y que cuando la sueltes envie un 0 logico. seria en pocas palabras la duda..

gratos saludos
Take Me Some Place Far Away

Desconectado americo.etn

  • PIC10
  • *
  • Mensajes: 19
    • http://electronico-etn.blogspot.com
Re: Ayuda en assembler para intel -TECLADO
« Respuesta #1 en: 08 de Mayo de 2012, 23:49:33 »
Holas vuelvo a escribir aca esta la solucion de mi problema
es utilizando programa residente.. interceptando el vector de interrupciones y cambiandole la accion de presionar la tecla "Q"

bueno aca esta el codigo solucion: aunque no dibuja un cuadrom, este enciende el parlante. para dibujar un cuadro seria lo mismo solo utilizando la pantalla
Código: [Seleccionar]
; HECHO POR: Americo Alvarez Surci FECHA:27 de abril del 2012
; programa que al presionar la tecla "q" suena un sonido de 261 hz utilizando el 8254
; programa residente
; compilar y crear archivo .com
page 60,132
title Programa.com enciende parlante programa residente
;========================================================
;------------------ PROGRAMA PRINCIPAL ------------------
;========================================================
codigo segment
assume  ss:codigo,ds:codigo,cs:codigo
org     100h
inicio:
jmp prog_prin ;programa principal
dirint09 dd ? ;direccion de la int 09h
scancode db ?
control db ?
SpkOld db 0
prog_prin:
mov ax,3509h
int 21h
mov word ptr [dirint09+0],bx
mov word ptr [dirint09+2],es
mov ax,2509h
mov dx,offset mi_apli
int 21h
in al,61h
and al,11111100b
mov SpkOld,al
bucle:
cmp scancode,01h
jne bucle
push ds
lds dx,dirint09
mov ax,2509h
int 21h
pop ds
mov ax,4c00h
int 21h
mi_apli proc far
push ax
push dx
in al,60h
mov scancode,al
test scancode,80h
jz pulsada
mov al,SpkOld
and al,11111100b
out 61h,al
jmp otro
pulsada:
cmp al,10h
jne otro
mov dx,12h
mov cx,523
mov ax,34DCh
div cx
mov dx,ax
mov al,0B6h
out 43h,al
mov al,dl
out 42h,al
mov al,dh
out 42h,al
mov al,SpkOld
or al,3
out 61h,al
otro:
mov al,020h
out 020h,al
pop dx
pop ax
iret
mi_apli endp
;========================================================
codigo        ends
              end     inicio
« Última modificación: 08 de Junio de 2012, 23:12:35 por americo.etn »
Take Me Some Place Far Away


 

anything