logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AtMega128][Bascom] Pomiar czasu od zdarzenia do zdarzenia

SQ9MYX 07 Cze 2011 08:50 2074 5
REKLAMA
  • #1 9585061
    SQ9MYX
    Poziom 23  
    Witam.
    Męczę się już drugi dzień nad programem zliczającym czas.
    Założenie jest takie. po uruchomieniu programu powinien zacząć odliczać czas (0-300sekund) do czasu wykrycia stanu 0 na porcie C.0 po wykryciu powinien przełączyć się na liczenie czasu do ponownego powrotu portu w stan 1.. oba wyniki zostaną zaprezentowane na LCD. Próbowałem za pomocą funkcji Wait 1 sekundowego dodawać w pętli loop liczbę 1 co każdy cykl lecz jest to bardzo nie dokładne... Próbowałem też korzystać z funkcji TIMER lecz coś robię nie tak bo cały czas dostawałem 0 z timera na LCD

      Do
      Wait 1
      A = A + 1
    Locate 1 , 1 : Lcd "licze czas"
    
    Locate 2 , 1 : Lcd A ; "ms"
      Loop Until Pinc.0 = 1
  • REKLAMA
  • REKLAMA
  • #3 9585362
    SQ9MYX
    Poziom 23  
    cos tkiego udało mi sie stworzyć... tylko jak teraz zrobić przełaczanie by po zmianie stanu portu pierwszy czas pozostał na LCD i zaczeło liczyć drugi czas aż do zmiany stanu portu.
    Sub Tmr1
     Cls
     Dim Sek As Byte
    Config Timer1 = Timer , Prescale = 256
    Enable Interrupts
    Enable Timer1
    Timer1 = 32000
    On Timer1 Czas:
    Start Timer1
    Sek = 0
    
    Locate 1 , 1 : Lcd "czas zadzialania"
    
    
    
    Do
    Locate 2 , 1 : Lcd Sek ; " "
    
     B = Getkbd()
    If B = 6 Then Call Menu
    If B = 5 Then Call Tmr1
    Loop Until Pinc.0 = 1
    Czas:
    Timer1 = 32000
    Incr Sek
    Cursor Off
    Return
    Disable Interrupts
    End Sub
  • REKLAMA
  • #4 9588505
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 9589177
    SQ9MYX
    Poziom 23  
    Witam.
    spłodziłem coś takiego tylko niestety po przejsciu do drugiej czesci timera i zatrzymaniu to czas pierwszej czesci jest sumą obu czasów... już nie wiem co z tym działać
    '----------------------------------------zadzialanie------------------
    Sub Tmr1
    
    Cls
    Dim Sek As Byte
    Dim Sek2 As Byte
    Config Timer1 = Timer , Prescale = 256
    
    Enable Timer1
    Timer1 = 34286
    On Timer1 Czas:
    Start Timer1
    Sek = 0
    Locate 1 , 1 : Lcd "  Czas zadzialania"
    Locate 2 , 12 : Lcd Chr(1) : Lcd " -MENU"
    Locate 4 , 12 : Lcd "C -RESET"
    Do
    Locate 2 , 1 : Lcd Sek ; " "
    B = Getkbd()
    If B = 6 Then Call Menu
    If B = 5 Then Call Tmr1
    
    If Sek = 252 Then Stop Timer1
    If Sek = 252 Then Call Pczaszadz
    Loop Until Pinc.0 = 1
    If Pinc.0 = 1 Then Stop Timer1
    If Pinc.0 = 1 Then Locate 3 , 1
    If Pinc.0 = 1 Then Lcd "  Czas blokowania"
    Locate 2 , 12 : Lcd Chr(1) : Lcd " -MENU"
    Locate 4 , 12 : Lcd "C -RESET"
    While Pinc.0 = 0 : Wend
    Stop Timer1
    Disable Timer1
    Call Tmr2
    
    Return
    End Sub
    
    
    '-------------------------------------blokowanie------------------------------------
    Sub Tmr2
    Enable Timer1
    Sek2 = 0
    Timer1 = 34286
    Start Timer1
    Do
    Locate 4 , 1 : Lcd Sek2 ; " "
    If Sek2 = 252 Then Stop Timer1
    If Sek2 = 252 Then Call Pczasblok
    Waitms 300
    B = Getkbd()
    If B = 6 Then Call Menu
    If B = 5 Then Call Tmr2
    
    Loop Until Pinc.0 = 0
    Disable Timer1
    
    Czas:
    Timer1 = 34286
    Incr Sek
    Incr Sek2
    Return
    End Sub
    
    '-------------------------------------Przekroczony czas zadziałania-----------------------------
    Sub Pczaszadz
    Cls
    
    Do
    
    Locate 1 , 1 : Lcd " Przekroczony czas"
    Locate 2 , 1 : Lcd " zadzialania t>250s"
    Locate 4 , 1 : Lcd Chr(1) : Lcd " -MENU"
    
    
    B = Getkbd()
    If B = 6 Then Call Menu
    
    Loop
    Call Menu
    
    
    End Sub
    
    
    '---------------------------------Przekroczony czas blokowania------------------------
    Sub Pczasblok
    Cls
    
    Do
    
    Locate 1 , 1 : Lcd " Przekroczony czas"
    Locate 2 , 1 : Lcd " blokowania t>250s "
    Locate 4 , 1 : Lcd Chr(1) : Lcd " -MENU"
    
    
    B = Getkbd()
    If B = 6 Then Call Menu
    Loop
    
    Call Menu
    
    End Sub
  • #6 9687501
    SQ9MYX
    Poziom 23  
    Witam! postanowiłem użyć dwóch timerów lecz za chint nie chce mi to działać :(
    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA