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.

[8051 asembler] klawiatura

03 Wrz 2016 22:28 3822 10
  • Poziom 8  
    Dzień dobry, mam problem z zadeklarowaniem klawiatury do następującego programu:

    Kod: x86asm
    Zaloguj się, aby zobaczyć kod


    Co do deklaracji klawiatury nie mam pojęcia bo nigdy tego nie robiłem, a jedynie co mi zostało dane jako podpowiedź wysyłam w załączniku.
    Dla osoby, która pomoże przewidziana nagroda.
  • Poziom 27  
    Ale czego właściwie oczekujesz? Z tym, to raczej do wróżki. Widać tyle, że piny jakiegoś portu są zwierane do masy. Naciśnięcie przycisku jest więc odczytywane jako "0" na odpowiedniej pozycji. Ale który to port i jak są przypisane przyciski a nawet jakie w ogóle są przyciski na tej klawiaturze przecież nikt bez żadnych danych ci nie poda na forum.
  • Poziom 8  
    Mówimy o klawiaturze komputerowej i liczbach z zakresu od 0 do 9 przypisane przez port 1.
  • Poziom 38  
    Może powinieneś pisać w C? Jest dostepny kompilator na '51 nazywa się SDCC. Dla C znajdziesz przykłady obsługi klawiatury.
    Tak po krótce to w tym co napisałeś nie ma podstawowego elementu czyli skonfigurowanego timera odmierzającego 10ms okresy. Co przerwanie porównujesz aktualny stan klawiatury z poprzednia. Jeżeli nadal jest wciśnięty ten sam klawisz to znaczy, że stan nie jest przypadkowy np. drganie kalwiszy. Wtedy możesz zmienić bit w bajcie stanu kalwiatury i zmienić bit flagi informujący o zmianie stanu bajtu klawiatury co będzie użyteczne dla reszty programu. Po kolejnych 10ms, przerwaniu będzie też można zignorować ten klawisz do czasu aż nie powróci na 10ms do stanu wysokiego. Bez użycia timera wciśnięcie klawisza wyśle bliżej nieokreśloną liczbę sygnałów o jego wciśnięciu do programu a to zły pomysł.
  • Poziom 8  
    Dałbyś radę napisać w asemblerze taki program? Chodzi mi głównie o deklarowanie klawiatury w asemblerze, gdyż nigdy tego nie robiłem.
  • Poziom 27  
    kamil1906 napisał:
    Chodzi mi głównie o deklarowanie klawiatury w asemblerze
    Powtarzasz to samo, do tego to, co piszesz nie jest zgodne z tym, co na rysunku. Obawiam się, że nikt ci nie pomoże, bo nie wiadomo o co chodzi.
  • Poziom 8  
    To prosiłbym o zadeklarowanie klawiatury w asemblerze zgodnie z tym rysunkiem.
  • Poziom 27  
    Nie rozumiesz. Ten rysunek a właściwie szkic przedstawia typowe podłączenie kliku klawiszy do portu uC. Pozwala to na odczyt tylu klawiszy, ile linii zostało wykorzystane, czyli zgodnie z tym szkicem raptem 6, np. 4 strzałek, "Ok" i "Powrót". Na szkicu jednak ich (opisów) nie ma, nie podano też do jakiego portu, na jakie piny zostały podłączone. Brak konkretów, dlatego nikt ci nic konkretnego nie napisze.

    Ten szkic wygląda notatkę z rozmowy przy kawie, gdzie ktoś ci tłumaczył jak można coś podłączyć do uC. Nie oczekuj na tej podstawie cudów.
  • Poziom 8  
    Rysunek przedstawiał przykładowe połączenie. Chodzi o pokazanie samej zasady deklarowania klawiatury. Można zadeklarować 4, a można 20. To nie ma znaczenia. Podłączenie może być do portu 1 i obojętne do jakich pinów.
  • Poziom 27  
    Nawet na tym poziomie ogólności musisz przynajmniej zdecydować, czy będzie się odnosił do tych linii jako poszczególnych bitów czy wczytywał stan linii całego portu i potem obrabiał dane. To drugie wydaje się bardziej prawdopodobne. Wówczas kolejne klawisze będzie trzeba deklarować jako stałe będące kolejnymi potęgami 2 (1, 2, 4, 8, 10h, 20h....) co pozwoli na wydzielenie poszczególnych bitów w rejestrze = linii wejściowych = klawiszy.

    Konkretna składnia definicji stałych zależy od asemblera, np.:

    Up EQU 1
    Down EQU 2
    Left EQU 4
    Right EQU 8
    Ok EQU 10H
    Back EQU 20H
    .....