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 4x4

03 Maj 2009 17:28 2679 1
  • Poziom 13  
    Jestem początkujący jeśli chodzi o asemblera i mikrokontrolery i próbuję napisać sobie program do wykrycia który klawisz klawiatury został naciśnięty. Czy ten program poniżej by działał?

    Założenia:
    klawiatura matrycowa 4x4 jest podpięta do portu P1 mikrokontrolera w ten sposób, że wiersze (S0-S3,S4-S7,S8-S11,S12-S15) są podpięte pod piny P1.0-P1.3 a kolumny pod piny P1.4-P1.7.
    Program:

    ; po podpięciu klawiatury jeśli żaden przycisk nie wciśnięty to na pinach portu P1 jest stan logicznej 1 (5V w stosunku do masy)
    ODCZYT:
    ORL P1,#0F0h; tą instrukcję wydaje mi się, że można pominąć, bo przecież jak podłączę kalwiaturę to gdy nic nie jest wciśnięte na początku to wszystkie piny są równe logicznej 1 (napięcie jest na nich 5V w stosunku do masy)
    CLR P1.4;
    JNB P1.0,wpisz1;
    JNB P1.1,wpisz2;
    JNB P1.2,wpisz3;
    JNB P1.3,wpisz4;
    SETB P1.4;
    CLR P1.5;
    JNB P1.0,wpisz5;
    JNB P1.1,wpisz6;
    JNB P1.2,wpisz7;
    JNB P1.3,wpisz8;
    SETB P1.5
    CLR P1.6;
    JNB P1.0,wpisz9;
    JNB P1.1,wpisz10;
    JNB P1.2,wpisz11;
    JNB P1.3,wpisz12;
    SETB P1.6
    CLR P1.7;
    JNB P1.0,wpisz13;
    JNB P1.1,wpisz14;
    JNB P1.2,wpisz15;
    JNB P1.3,wpisz16;
    SETB P1.7
    LJMP ODCZYT

    wpisz1:
    mov A,#01h
    ret
    ....
    wpisz16:
    mov A,#FFh
    ret

    I czy piny P1.0-P1.3 to są wyjścia klawiatury, a piny P1.4-P1.7 wejścia do klawiatury? Czy te wszystkie piny są jakby wyjściami z klawiatury czyli wejściami do mikrokontrolera?
    Co w takim razie się stanie jak dam:
    CLR P1.0
    bo to przecież klawiatura decyduje o stanie tego pinu, to co się stanie w sytuacji gdy programista wymusi programowo zero na tym pinie? Można samemu w programie wymuszać programowo stan jakiegoś pinu mikrokontrolera? A jak ja programowo wymusze 0 a urzadzenie podpięte do mikrokontrolera wymusza mi sprzętowo 1 to kto ma pierwszeństwo? I jak się zeruje programowe wymuszanie stanu jakiegoś pinu? (tzn. w sensie że od tego momentu niech to urządzenie decyduje o stanie tego pinu a nie program a program tylko na jakiś moment, w jakiejś procedurze, itp.)
  • Poziom 18  
    Nie analizowałem specjalnie programu ale już na pierwszy rzut oka wygląda że w programie nie bierzesz pod uwagę tzw. mikro odbić klawiszy które zostaną naciśnięte. Należy w programie uwzględnić pewne opóźnienie oraz po pewnym czasie sprawdzić czy było to zakłócenie czy też klawisz dalej pozostaje wciśnięty.

    Powodzenia