Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

BASCOM - jak zatrzymać pętlę naliczania timer0?

Rafał K. 30 Dec 2004 13:15 1205 10
  • #1
    Rafał K.
    Level 12  
    Witam
    Jak zatrzymać pętlę naliczania timer0, gdy na wyświetlaczu 7-seg. wyświetli się oczekiwana liczba nap.; 99min i 99sek,

    Czemu te polecenie nie działa?
    Dim R As Byte , S As Byte , T As Byte

    R = Jedsek + Dziesek
    S = Jedmin + Dziemin
    T = R + S

    If T > 36 Then
    stop timer0
    End If
  • #2
    McRancor
    VIP Meritorious for electroda.pl
    Najpewniej nie zadeklarowałeś co to są Jedsek itd :D

    Zamiast >36 daj >35 lub >= 36 i będzie OK!
    (chyba wiesz o co chdzi...)
  • #3
    Rafał K.
    Level 12  
    zadeklarowałem co to są Jedsek itd.
    czy znak + oznacza dodawanie tych wartości?
    Dalej nie działa
  • #4
    Andrzej Maciejewski
    Level 20  
    Jest to wycinek większego programu, sądzę że "knot" jest poza tym fragmentem który podałeś.

    Moje podejrzenia budzi tez fakt, że dodajesz sekundy do minut bez żadnych współczynników (ale może gdzieś w programie ma to jakieś uzasadnienie).

    Dodajesz "kury do kaczek" jak bardziej obrazowo mawiał mój nauczyciel matematyki co w wyniku ma dać indyki? - niby też ptactwo (czas)
  • #5
    BoskiDialer
    Level 34  
    R = Jedsek + Dziesek
    S = Jedmin + Dziemin
    dla sekund:
    zakładając że sekund jest 15 ten kod zwróci liczbe 6 (1+5).. dla minut jest tak samo.. powinno być coś takiego:
    R = Jedsek + 10*Dziesek
    S = Jedmin + 10*Dziemin
    ale niewiem czy to sie skompiluje w bascomie..
    T = R + S
    też zawiera błąd.. jeśli R to sekundy a S to minuty powinno być:
    T = R + 60*S
    wiedy T będzie czasem w sekundach...

    p.s. znak '+' to jest zwykłe dodawanie liczb, a nie koniukcja ciągów znaków.. dodając 1 do 2 otrzymamy 3.. ale koniukując (dodając) "1" do "2" otrzymamy "12".. ty operujesz na zwykłych liczbach...
  • #6
    McRancor
    VIP Meritorious for electroda.pl
    Wydaje mi się że tutaj chodzi o same cyferki!

    W końcu dostajecie 9+9+9+9 = 36, moje podejżenie polegało na tym że zamiast reagować na cztery dziewiątki If zareaguje o jeden za późno.

    Spróbuj zatrzymać timer0 wcześniej, może się okazać że w tym kryje się błąd
  • #7
    Rafał K.
    Level 12  
    McRancor wrote:
    Wydaje mi się że tutaj chodzi o same cyferki!

    W końcu dostajecie 9+9+9+9 = 36, moje podejżenie polegało na tym że zamiast reagować na cztery dziewiątki If zareaguje o jeden za późno.

    Spróbuj zatrzymać timer0 wcześniej, może się okazać że w tym kryje się błąd


    Właśnie o to mi chodzi, czyli w którum miejscu go najlepiej zatrzymać?

    Dodano po 10 [minuty]:

    oto początek programu:

    Dim R As Byte , S As Byte , T As Byte
    Dim T333us As Byte , T2ms As Byte , T28ms As Byte
    Dim Jedsek As Byte , Dziesek As Byte , Jedmin As Byte , Dziemin As Byte
    Dim Mux As Byte , Mux1 As Byte , Migacz As Byte , Wygasz As Bit , Wysw As Byte

    Config Timer0 = Timer , Gate = Internal , Mode = 2
    Load Timer0 , 222 'okres Timera0 222 * 12 * fosc 333us przy X=8MHz
    Priority Set Timer0
    Enable Interrupts
    Enable Timer0
    Start Timer0

    T333us = 0 'będzie zliczał 0...6 co 333us - okres 2,331ms
    T2ms = 0 'będzie zliczał 0...10 co 2,331 - okres 25,641ms
    T28ms = 0 'bedzie zliczał 0...38 co 25.641ms - okres 1s
  • #8
    BoskiDialer
    Level 34  
    najłatwiej przy T=36 (tzn 4*9) i taki warunek stopu zastosować.. tzn:
    If T = 36 Then
    stop timer0
    End If

    p.s. jedno mi niepasuje :) jak na wyświetlaczu może sie pokazać 99 minut i 99 sekund :) przecież minuta ma 60 sekund a nie 100.. łatwiej by było to przeliczyć na sekundy (mój wcześniejszy post) i zatrzymać jeśli T = 5999 (99 minut i 59 sekund)...
  • #9
    McRancor
    VIP Meritorious for electroda.pl
    Spróbuj w ten sposób:

    If (jedsek = 9) and (dziesek = 9) and (i reszta tak samo) Then
    Stop timer0
    albo
    do
    {tu kod programu}
    loop until (warunek dziewiątek)

    Popróbuj inaczej sformuować warunek wystąpienia dziewiątek, może bascom coś przekombinowuje.

    No i spróbuj zatrzymać timer0 w dowolnym momencie, żeby spradzić czy właściwie się zatrzymuje i czy nie powoduje to dalszych błędów!
  • #10
    Rafał K.
    Level 12  
    na wyświetlaczu wskazane jest 9999 dlatego iż zostaly odwrucone wartości wyświetlanych lczb, aby timer liczący do przodu wzkazywał liczby do tyłu
  • #11
    zumek
    Level 39  
    Witam.

    1)Jeśli to urządzonko ma zliczać "do tyłu" , po co te kombinacje z dodawaniem i "odwracaniem" wyświetlanych cyfr :?:
    2)uC potrafią też odejmować :wink:
    3)Nie powinieneś zatrzymywać Timer0 , bo przestanie odświeżać wyświetlacze.

    Napisz dokładnie co chcesz osiągnąć.

    Pozdrawiam
    Piotrek Sz.
pcbway logo