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.

ATmega32 Bascom przerwanie w timerze

tms90 04 Sty 2012 01:13 1820 6
  • #1 04 Sty 2012 01:13
    tms90
    Poziom 9  

    Witam
    Mam pewien problem.Potrzebuję podczas odliczania Timera0 wykorzystać przerwanie Int0. Sprawa wygląda tak, rozpoczynam odliczanie timera0 do momentu pojawienia się sygnału narastającego na wejściu Int0 i w tym momencie muszę przerwać Timer0 i odczytać jego wartość. No i właśnie tu pojawia się problem.
    Zamieszczę moje wypociny:

    Code:
    Config Timer0 = Timer , Prescale = 1
    

    Config Int0 = Rising

    On Int0 Zero

    Enable Interrupts
    Enable Timer0
    Counter0 = 255
    Glowny:
    Set Portd.2
    Start Timer0
    Do
    Loop
    End


    Zero:
    Stop Timer0
    Reset Portd.2
    Zmienna = Timer0
    If Zmienna = Porownanie Then
    Set Portc.1
    End If

    Counter = 255
    Goto Glowny


    Zmienna = Timer0 w tym momencie Bascom wyrzuca mi "błędne przypisanie". Czy jest w ogóle możliwość odczytania wartości licznika i zapisanie go do zmiennej ?

    0 6
  • #2 04 Sty 2012 02:59
    xury
    Poziom 38  

    A jakiego typu jest ta zmienna "Zmienna" ?

    0
  • #3 04 Sty 2012 11:33
    tms90
    Poziom 9  

    Próbowałem byte , integer i cały czas to samo, "Błędne przypisanie" ;/

    0
  • #4 04 Sty 2012 19:47
    Wojtek75
    Poziom 23  

    Spróbuj tak:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #5 04 Sty 2012 20:17
    tms90
    Poziom 9  

    Może wkleję cały kod :

    Code:
    $regfile "m32def.dat"
    
    $crystal = 8000000


    Dim Zmianna As Byte
    Dim Porownanie As Byte

    Config Portc.1 = Output
    Config Timer0 = Timer , Prescale = 1
    Config Int0 = Rising
    On Int0 Zero

    Porownanie = 255

    Enable Interrupts
    Enable Timer0
    Counter0 = 255


    Glowny:
    Set Portd.2
    Start Timer0
    Do
    Loop
    End


    Zero:
    Stop Timer0
    Reset Portd.2
    Zmienna = Tcnt0
       If Zmienna = Porownanie Then
       Set Portc.1
       End If
    Counter = 255
    Goto Glowny

    A tutaj screenshot tego błędu :
    ATmega32 Bascom przerwanie w timerze
    Niestety zmiana na TCNT0 nic nie dała :( dalej jest błąd. A może po prostu podczas odliczania tego timera dodać zmienną która będzie inkrementowana co 1 cykl timera ?

    0
  • Pomocny post
    #6 04 Sty 2012 20:45
    Jaca
    Poziom 28  

    Zadeklarowałeś "Zmianna" a przypisujesz "Zmienna". :)

    Edit:

    Wyjście z procedury obsługi przerwania wykonuje się za pomocą Return a nie Goto Glowny ! Resztę błędów znajdziesz sam. :)

    0
  • #7 04 Sty 2012 23:02
    tms90
    Poziom 9  

    Faktycznie. Ale gapa ze mnie :) Dzięki za pomoc Jaca. Tak jak mówisz resztę błędów znalazłem sam :) Kciuk w górę :)

    0