TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: americo.etn 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
-
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
; 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