Blokowanie zwiękaszania/zmniejszania wartości licznika

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
matelektronik
Użytkownik
Posty: 161
Rejestracja: 01 sie 2006, 11:48
Lokalizacja: Przezchlebie
Kontakt:

Blokowanie zwiękaszania/zmniejszania wartości licznika

Post autor: matelektronik » 16 lip 2007, 17:58

Witam

Od pewnego czasu pracuje nad licznikiem który ma pracować w zakresie od 0 do 64. Niestety korzystam z przykładu napisanego przez pana Góreckiego gdzie licznik zlicza do 99. Chodzi mi o to żeby licznik np po osiągnięciu wartości 64 nie zliczał już w gore. To samo jeśli chodzi o wartość najmniejszą czyli 0 żeby nie przepełniał sie i nie ostawiał na wartości 99. Ja osobiście probowałem zastosować pomocnicza zmienna liczbanac i po osiągnięciu odpowiedniej wartości miały by być blokowane przyciski. Niestety nie chce mi to działać :( Liczę na Waszą pomoc...

Poniżej moje wypociny:

Kod: Zaznacz cały



$regfile = "attiny2313.dat"

Dim Jednostki As Byte
dim Dziesiatki As Byte
Dim Ktorywysw As Byte
Dim Liczbanac As Byte
Dim S2a As Bit
Dim S2b As Bit
Dim S1a As Bit
dim S1b As Bit


Config Portb = 255
Portb = &B11111111
Config Portd = &B1111100
Portd = &B1111111


Dziesiatki = 6 : Jednostki = 0
Liczbanac = 60

S2a = 0 : S2b = 0 : S1a = 0 : S1b = 0

Do
Waitms 5
Incr Ktorywysw
If Ktorywysw = 2 Then
   Ktorywysw = 0

   If Pind.1 = 0 Then
      S2a = 1
      If S2a = 1 And S2b = 0 Then
         Gosub Zwieksz
         S2b = 1
      End If
   Else
      S2a = 0 : S2b = 0
   End If
   If Pind.0 = 0 Then
      S1a = 1
      If S1a = 1 And S1b = 0 Then
         Gosub Zmniejsz
         S1b = 1
      End If
   Else
      S1a = 0 : S1b = 0
   End If
End If
Portd = &B1111111
Select Case Ktorywysw
Case 0:
   Portb = Lookup(jednostki , Tabela)
   Portd.3 = 0
Case 1:
   Portb = Lookup(dziesiatki , Tabela)
   Portd.4 = 0

End Select
Loop
End

Zwieksz:
Incr Jednostki
Incr Liczbanac
If Jednostki = 10 Then
   Jednostki = 0
   Incr Dziesiatki
   If Dziesiatki = 10 Then
   Dziesiatki = 0

   If Liczbanac = 64 Then reset Portd.1
    End If



End If
Return

Zmniejsz:
Decr Jednostki
Decr Liczbanac
If Jednostki = 255 Then
   Jednostki = 9
   Decr Dziesiatki
   If Dziesiatki = 255 Then
      Dziesiatki = 9
     If Liczbanac = 0 Then reset Portd.0
      End If


End If
Return

Tabela:
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144

ZbeeGin

Post autor: ZbeeGin » 16 lip 2007, 18:20

Nie blokuj przycisków, tylko sprawdź czy po zwiększeniu Liczbanac nie wykracza poza 99. Wystarczy do tego prosta instrukcja IF. Tak samo po zmniejszaniu nie pozwól by Liczbanac nie przeskoczyła do 255. Również w tym przypadku prosta instrukcja IF załatwi sprawę.

Np. If Liczbanac > 99 Then Liczbanac = 99

elektronWielki
Użytkownik
Posty: 247
Rejestracja: 30 maja 2006, 12:45
Lokalizacja: kontownia

Post autor: elektronWielki » 17 lip 2007, 10:24

albo cos takiego:

Kod: Zaznacz cały


Zwieksz: 

   if liczbanac <64 then
      incr liczbanac
   end if

   jednostki = (jednostki + 1) mod 10
   if jednostki = 0 then
      incr dziesiatki
   end if

   If Liczbanac = 64 Then 
      reset Portd.1 
   End If 

Return 




Zmniejsz: 

   if liczbanac > 0 then
      decr liczbanac
   end if
   
   if (jednostki > 0) and (dziesiatki > 0) then
      jednostki = ((jednostki + 1) + 9) mod 10
   end if

   if jednostki = 9 then
      decr dziesiatki
   end if
   
   If Liczbanac = 0 Then 
      reset Portd.0 
   End If 

Return
nie testowalem wiec mozliwe sa bledy :)

ODPOWIEDZ