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

Mierzenie długości wcisniętego przycisku

mnowak02 14 Gru 2009 23:29 1098 7
  • #1 14 Gru 2009 23:29
    mnowak02
    Poziom 9  

    Mam program liczący czas pomiedzy dwoma naciśnięciami klawisza enter i pokazuje ten czas na wyświetlaczu 7-segm jak mozna go zmodyfikować aby nie liczył czasu pomiędzy dwoma kliknięciami tylko się naciska przycisk w tym momencie rusza timer i gdy go puszczę timer się zatrzymuje i pokazuje się czas wciśnięcia tego przycisku??
    oto kod:

    0 7
  • #2 15 Gru 2009 00:23
    megao
    Poziom 23  

    Klasyk akademicki.
    Nie ma jeszcze tego w sieci, w akademiku? ;)

    0
  • #3 15 Gru 2009 12:17
    mnowak02
    Poziom 9  

    jeżeli bym wiedział to bym tu nie pisał ma ktoś pomysł jak zrealizować te przyciskanie??

    0
  • #4 16 Gru 2009 12:37
    mnowak02
    Poziom 9  

    Wpadłem na taki pomysł ale coś mi tu nie działa może mi ktoś powiedzieć co jest nie tak????
    linia P3.5 jest wykorzystywana do odczytu stanu z klawiatury wyświetlacza 7segmentowego

    Code:

    LOOP1:   
        CLR TR1               ;zatrzymanie timera
       SJMP $

    LOOP:
       
       MOV C,P3.5           ;sprawdzam czy coś nacisnąłem
       
       SETB TR1              ;włączam timer
       CPL C                   ;neguje bit C
       CJNE C,P3.5,LOOP1 ;sprawdzam czy C jest różne od P3.5 czyli czy puściłem juz klawisz
       SJMP LOOP            ;jeżeli są równe to skacze do LOOP

    0
  • #5 16 Gru 2009 15:21
    wzk
    Poziom 19  

    Np.:
    SJMP $
    pętla bez końca.

    0
  • #6 16 Gru 2009 15:50
    mnowak02
    Poziom 9  

    Ale zakładam że najpierw wykonuje się petla LOOP a pozniej jest skok do LOOP1

    0
  • #7 18 Gru 2009 22:06
    mnowak02
    Poziom 9  

    zmodyfikowałem kod:

    Code:

    LOOP:
       

    JNB P3.5,LOOP          ;domyślnie jest 0 na P3.5 i jak nacisnę przycisk wskakuje 1
    SETB TR1                ;włączam timer jeżeli nic nie wcisnąłem skoczy do LOOP

       
       
    JNB P3.5,STOP         ;jeżeli nacisnąłem więc mam 1 na P3.5 i jak go puszczę mam 0
    SJMP LOOP              ;więc skoczę do STOP
       
       
    STOP:               
       
    CLR   TR1                ;zatrzymanie timera
       
    na moje powinno działać tylko w symulatorze bit P3.5 z zera z 0 na 1 włącza się i podczas czasu trwania wciśnięcia klawisza ten bit sam się zmienia bez przerwy 0->1 i 1->0 a powinien przecież być równy 1 co tu jest źle????

    0
  • Pomocny post
    #8 19 Gru 2009 11:05
    wzk
    Poziom 19  

    Uff! Bałaganisz do potęgi.
    1. Popraw tytuł adekwatnie do treści wątku. :|
    2. Narysuj sobie algorytm działania Twojego przypadku a będziesz miał mniej pytań.
    3. Kawałek poprawionego kodu:

    Code:

     jnb p3.5, $     ;oczekiwanie na wciśnięcie przycisku
     .....
     jb p3.5, $      ;oczekiwanie na zwolnienie przycisku
     .....

    0