Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[8051 asembler] klawiatura

kamil1906 03 Sep 2016 22:28 4164 10
Computer Controls
  • #1
    kamil1906
    Level 9  
    Dzień dobry, mam problem z zadeklarowaniem klawiatury do następującego programu:

    Code: x86asm
    Log in, to see the code


    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.
  • Computer Controls
  • #2
    jesion40
    Level 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.
  • #3
    kamil1906
    Level 9  
    Mówimy o klawiaturze komputerowej i liczbach z zakresu od 0 do 9 przypisane przez port 1.
  • Computer Controls
  • #4
    RitterX
    Level 39  
    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ł.
  • #5
    kamil1906
    Level 9  
    Dałbyś radę napisać w asemblerze taki program? Chodzi mi głównie o deklarowanie klawiatury w asemblerze, gdyż nigdy tego nie robiłem.
  • #7
    kamil1906
    Level 9  
    To prosiłbym o zadeklarowanie klawiatury w asemblerze zgodnie z tym rysunkiem.
  • #8
    jesion40
    Level 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.
  • #9
    kamil1906
    Level 9  
    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.
  • #10
    jesion40
    Level 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
    .....