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

Atmega8 - Timer nie generuje przerwań, zegar nie działa poprawnie

Olasss 21 Sty 2007 12:49 1122 4
REKLAMA
  • #1 3469085
    Olasss
    Poziom 12  
    Posty: 54
    Ocena: 2
    Witam

    Mam problem z timerem w uc Atmega 8. Chciałem sobie napisać zegar,ale nie mogę tego zrobić przy użyciu timera,bo timer w ogóle nie generuje przerwania :| licznik chodzi i się przepełnia,bo wyświetliłem sobie jego wartość na lcd żeby sprawdzić co jest nie tak...załączam kod programu,bo już nie mam pomysłów co może być nie tak

    
    $crystal = 8000000
    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.6 , Rs = Portd.5
    Config Lcd = 16 * 2
    Config Pinb.1 = Input
    Config Pinb.2 = Input
    Set Portb.1
    Set Portb.2
    
    
    Cursor Off
    
    Dim Gdz As Byte
    Dim Mnt As Byte
    Dim Sek As Byte
    
    
    Config Timer1 = Timer , Prescale = 256
    On Timer1 Goto Czas:
    Counter1 = 34286                                            '34286
    Enable Interrupts
    Enable Timer1
    
    Cls
    Home
    
    Do
    
    If Pinb.1 = 0 Then
    Waitms 70
     If Pinb.1 = 0 Then
     Incr Mnt
      If Mnt = 60 Then
      Mnt = 0
      End If
     End If
    End If
    
    If Pinb.2 = 0 Then
    Waitms 70
    If Pinb.2 = 0 Then
    Incr Gdz
    If Gdz = 24 Then Gdz = 0
    End If
    End If
    
    
    If Sek = 60 Then
     Sek = 0
     Incr Mnt
     Return
     End If
    
     If Mnt = 60 Then
     Mnt = 0
     Incr Gdz
     End If
    
     If Gdz = 24 Then
      Gdz = 0
      End If
    
    
    Locate 1 , 1
    Lcd "" ; Gdz ; ":" ; Mnt ; ":" ; Sek ; " "
    Locate 2 , 1
    Waitms 20
    Lowerline
    Lcd Timer1
    
    Loop
    
    End
    
    Czas:
    
    Counter1 = 34286                                            '34286
    Incr Sek
    
    Return
    
    
  • REKLAMA
  • #2 3469106
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Na bascomie się nie znam ale w którym miejscu masz obsługę wektora przerwań od timera ?
  • REKLAMA
  • #3 3469319
    Olasss
    Poziom 12  
    Posty: 54
    Ocena: 2
    w momencie wystąpienia przerwania program powinen wykonać to co jest na końcu kodu,od linii czas:(nie wiem czy o to chodzi) . Próbowałem kopiować kody działających rozwiązań(oczywiście dopasowując do uC) ale nic to nie dawało :|
  • REKLAMA
  • #4 3469361
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 569
    Jak mnie pamięć nie myli to powinno być "on timer1 czas" a nie on timer1 goto czas . Tak przynajmniej było w poprzednich wersjach tego kompilatora sprawdź w helpie poza tym dlaczego po zezwoleniu na przerwania dajesz komendę stop timer1? Zatrzymany zegar przerwania nie wyzwoli ...
  • #5 3469374
    Olasss
    Poziom 12  
    Posty: 54
    Ocena: 2
    przepraszam,ta komenta stop timer1 była tam przez pomyłkę,wpisałem ją a przed kompilacją usunąłem i wkleiłem tutaj zły kod

    jak było on timer czas działało tak samo...w symulatorze wszystko działa,a w procku nic;/ ustawianie czasu działa,ale zegar stoi w miejscu


    nie wiem czy to coś pomoże,ale po wskazaniach tego timera wygląda na to że albo w ogóle nie wystpępuje przerwanie albo z jakiegoś powodu program nie wykonuje procedury przerwania,bo licznik nalicza cały czas od zera zamiast od zadanej w przerwaniu wartości
REKLAMA