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

Dlaczego Timer0 w Bascom nie ładuje poprawnie wartości początkowej?

alexiel 18 Lut 2004 09:40 1580 8
REKLAMA
  • #1 507637
    alexiel
    Poziom 15  
    Posty: 211
    Pomógł: 1
    Witam wszystkich
    Czy może mi ktoś takie dziwne zachowanie timera.
    konfiguracja
    config timer0=timer ,gate=internal , mode=0
    czyli licznik 16bitowy z programowym ładowaniem początkowej wartości
    wpisuje wartość 10000 bo chce mieć przerwanie około 10ms przy Xtal 12Mhz
    czyli robie tak
    Load timer0 , 10000


    po czym wrzucam go do avsima i co widze TL0=F0 i TH0=F0
    czy może mi ktoś wyjaśnic cosie z tym dzieje
    byłbym wdzięczny bo wprzeciwnym przypadku albo nie rozumiem Bascoma albo ten program coś kopie.
  • REKLAMA
  • #2 507705
    alexiel
    Poziom 15  
    Posty: 211
    Pomógł: 1
    Pomyliłem się powinno być
    Config timer0 = timer , gate = internal , mode = 1
  • REKLAMA
  • #3 508855
    slawko_k
    Poziom 35  
    Posty: 2926
    Pomógł: 253
    Ocena: 234
    no to moze olej komene load i po porstu
    tl0=&H10
    th0=&H27
  • #4 508877
    radek.kaba
    Poziom 15  
    Posty: 120
    Pomógł: 1
    Jeżeli chodzi o sumulatory Bascoma AVR i 8051 to nie nalęży im za bardzo wierzyć w podawane czasy,
    jężeli przerwanie miało być wywołane np. co 10ms, Bascom mówi 15 to należy go olać i wierzyć we własne obliczenia (o ile są poprawne).
  • REKLAMA
  • #5 509043
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    komenda load działa tylko w trybie 2(8 bitów z rzeładowaniem hardare'owym). przekazywanie zmiennych większych jak bajt działa tylko z timer2(89c52 i podobne). Tak więc jeżeli spróbujesz załadować 10000 w osiem bitów to mogą być różne efekty. Jeżeli już musisz stosować licznik 16 bitowy(tryb 1) to na początku przerwania tajmera dodaj ładowanie liczników na nowo, np:

    przerwanie_tajmera0:
    tl0=99:th0=FE
  • #6 509069
    W.K
    Poziom 15  
    Posty: 139
    Pomógł: 1
    W Bascomie AVR jest taka ciekawostka: Load timer1 ,100 - działa błędnie
    Load timer1,zmienna - działa prawidłowo!
    dla timer0 jest odwrotnie(ze zmienną nie działa)
    Np. w symulatorze Bascom AVR:

    Dim X As Word
    Config Timer1 = Timer , Prescale = 8
    Load Timer1 , 100 ' timer1 = 156
    X = 100
    Load Timer1 , X ' timer1 = 65436
    nop
    nop
  • #7 509218
    alexiel
    Poziom 15  
    Posty: 211
    Pomógł: 1
    Dzieki wszystkim za zainteresowanie. Poszperałem wczoraj wieczorem i znalazłem że w mode=1 wartość ładuje się instrukcją 'counter [0,1]=wartość lub jak koledzy napisali np. tl0=&h5f th0=&h45, a load działa tylko w mode=2.


    Mam nowe pytanie przy kofiguracji takiej:

    Config timer0=counter , gate=internal , mode=1
    powinien zliczać impulsy podawane na pin P3.4 czyli T0 a on oczywiście po podanie niskiego poziomu na to wejście uruchamia licznik i zlicz dopuki jest stan niski na tym pinie a może inaczej zliczać ilość impulsów zewnętrznych może macie jakieś pomysły w tej materii....
  • REKLAMA
  • #8 509250
    slawko_k
    Poziom 35  
    Posty: 2926
    Pomógł: 253
    Ocena: 234
    config timer0 ................ edge=falling ..............
  • #9 509391
    alexiel
    Poziom 15  
    Posty: 211
    Pomógł: 1
    Mógłbyś napisać całą konfiguracje tego timera
    będe wdzięczny.

Podsumowanie tematu

✨ Dyskusja dotyczy problemu z poprawnym ładowaniem wartości początkowej do Timer0 w Bascom, szczególnie w trybie 16-bitowym (mode=1). Użytkownik próbuje ustawić przerwanie co około 10 ms przy zegarze 12 MHz, używając komendy Load timer0, 10000, jednak w symulatorze AVSim widzi nieoczekiwane wartości rejestrów TL0 i TH0. Okazało się, że komenda Load działa poprawnie tylko w trybie 2 (8-bitowy timer z automatycznym przeładowaniem), natomiast w trybie 1 (16-bitowy timer) należy ręcznie ustawiać rejestry TL0 i TH0, np. tl0=&H10 i th0=&H27. W trybie 1 wartość początkową należy ładować bezpośrednio do rejestrów licznika na początku przerwania, aby zapewnić prawidłowe działanie. Ponadto, w Bascom AVR występują różnice w działaniu komendy Load dla timerów 0 i 1, gdzie dla timer0 ładowanie zmienną nie działa poprawnie, a dla timer1 działa. W dalszej części dyskusji poruszono konfigurację Timer0 jako licznika impulsów zewnętrznych (counter mode) z sygnałem na pinie P3.4 (T0), gdzie zasugerowano dodanie parametru edge=falling, aby licznik zliczał impulsy na opadającym zboczu. Podsumowując, poprawne ładowanie wartości początkowej w Timer0 w Bascom wymaga uwzględnienia trybu pracy timera oraz odpowiedniego sposobu ustawiania rejestrów TL0 i TH0, a także konfiguracji parametrów licznika zewnętrznego.
REKLAMA