Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Asembler i klawiatura (PC)

11 Lip 2003 21:22 1262 3
  • Poziom 10  
    Mam taki problem.
    Chce sterować silnikiem krokowym przez klawiaturę. Zrobiłem to na Shiftach:

    p1:
    mov ah,02h
    int 16h
    and al,00001111b ;caps lock, num lock... nie mają znaczenia
    cmp al,1
    je w_prawo
    cmp al,2
    je w_lewo
    jmp p1


    w_lewo:
    ...
    jmp p1


    w_prawo:
    ...
    jmp p1


    Chce to samo zrobić na strzałkach, jednak dusząc strzałke sygnał z klawiatury jest "powtarzany" co pewien czas. Silnik nie kręci się płynnie.
    W przypaku Shiftów jest inaczej. Wciśnięty Shift "trwa cały czas", i dopiero po puszczeniu klawisza przestaje być wykonywane np. w_lewo
    Wyczytałem gdzieś, że trzeba coś zrobić z INT9h generowanym po każdym naduszenie lub zwolnieniu klawisza.
    Jeśli ktoś robił to z INT9h prosze o pomoc.
  • Poziom 42  
    A próbowałeś modyfikować czas autopowtarzania i opóźnienia klawiszy?
  • Poziom 10  
    Tak
    To nic nie daje i nie o to chodzi.
    Musi być co z tym INT9.
    Ale sam dokładnie nie wiem
  • Poziom 42  
    Z tego co wyczytałem to, to przerwanie jest wywoływane przy każdym naciśnięciu klawisza. Jest ono zwiążane z przerwanie sprzętowym klawiatury. Domyślna procedura odbiera znaki i przekazuje je dalej. Wydaje mi się że procedura ta odbiera dane z portu klawiatury 0x60h. Klawiatura przekazuje bajt po naciśnięciu/puszczeniu klawisza. Po naciśnięciu przychodzi określony kod a po puszczeniu ten sam ale z ustawionym najstarszym bitem. Więc przejął obsługe tego przerwania i ustawił ją na fałszywą procedure która nic nie robi, a następnie odbierał wszystko co przychodzi z portu klawiatury i po przyjściu znaku strzałki wysyłał do silnika impulsy dopóki nie przyjdzie znak "puszczenia" strzałki.
    PS Wydaje mi się że mogłbyś spróbować to zrobić przy standardowej procedurze (sam polling portu klawiatury) być może też zadziała.