Sekundnik problem


Witam.
Napisałem taki program do sekundnika i mam problem z obsługą przycisków. Chciałbym zrobić tak żeby przyciskiem S1 zmniejszać minuty i godziny zaś S2 sekundy i dziesiątki sekund, a gdy nacisnę oba przyciski na raz wystartuje lub stanie zliczanie sekund. W pewnym sensie mi się to udało lecz aby zatrzymać zliczanie muszę kilka razy nacisnąć oba przyciski. Prosiłbym o jakieś wskazówki ponieważ nie mam już pomysłu jak to zrobić.
Schemat płytki jest na stronie:
http://www.google.pl/imgres?imgurl=http://www.frogger.ovh.org/ele/schemat.jpg&imgrefurl=http://www.elektroda.pl/rtvforum/topic1167767.html&usg=__F1kJlRA_Vfmrao2otEKCY0-9Myk=&h=535&w=813&sz=107&hl=pl&start=0&zoom=1&tbnid=Kvn5-masyol-JM:&tbnh=113&tbnw=172&prev=/images%3Fq%3Davr%2B2313%2BschemaT%26um%3D1%26hl%3Dpl%26client%3Dfirefox-a%26rls%3Dorg.mozilla:pl:official%26biw%3D1600%26bih%3D671%26tbs%3Disch:1&um=1&itbs=1&iact=rc&dur=452&ei=Y7EgTaijNdCEhQeK9fy3Dg&oei=i7AgTbTaCcip8QORv62EBw&esq=9&page=1&ndsp=34&ved=1t:429,r:18,s:0&tx=79&ty=25

$crystal = 4000000
Dim Sekundy As Byte
Dim Dziesek As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Obs_wys As Byte
Dim Flaga1 As Bit
Flaga1 = 0
Config Portb = 255 : Portb = &B11111111 : Config Portd = &B1111100 : Portd = &B11111111
Config Timer0 = Timer , Prescale = 64
Config Timer1 = Timer , Prescale = 64
Enable Interrupts : Enable Timer0 : Enable Timer1
On Timer0 Co4ms
On Timer1 Cols
Start Timer0
Stop Timer1
S1 Alias Portd.0
S2 Alias Portd.1
 
Do
If S1 = 0 Then
Waitms 70
If S1=0 And S2=0 And Flaga1 = 0 Then
Start Timer1
Flaga1 = 1
Else
Debounce S1 , 0 , Pr2 , Sub
End If : End If
 
 
If S2 = 0 Then
Waitms 70
If S2 = 0 And S1 = 0 And Flaga1 = 1 Then
Stop Timer1
Flaga1 = 0
Else
Debounce S2 , 0 , Pr1 , Sub
End If : End If
 
 
 
 
 
 
 
Loop : End
 
 
 
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Pr1:
Stop Timer1
If S1 = 1 And S2 = 0 Then
Waitms 25
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Dziesek
If Dziesek = 10 Then
Dziesek = 0
Flaga1 = 0
Return
End If : End If : End If
 
Pr2:
Stop Timer1
If S1 = 0 And S2 = 1 Then
 Waitms 25
Incr Minuty
If Minuty = 10 Then
Minuty = 0
Incr Godziny
If Godziny = 10 Then
Godziny = 0
Flaga1 = 0
Return
End If : End If : End If
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
 
 
 
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Co4ms:                                                      ' obsługa wyświetlaczy co 4,096ms
Incr Obs_wys : If Obs_wys = 4 Then Obs_wys = 0 : Portd = &B1111111
Select Case Obs_wys                                         ' obsługa wyświetlacza
Case 0:                                                     'wyświetl zawartość licznika jednostek minut
   Portb = Lookup(sekundy , Tabela) : Portd.3 = 0
Case 1:                                                     'wyświetl zawartość licznika dziesiątek minut
   Portb = Lookup(dziesek , Tabela) : Portd.4 = 0
Case 2:                                                     'wyświetl zawartość licznika jednostek godzin
   Portb = Lookup(minuty , Tabela) : Portd.5 = 0
Case 3:                                                     'wyświetl zawartość licznika dziesiatek godzin
   Portb = Lookup(godziny , Tabela) : Portd.6 = 0
End Select : Return                                         'koniec obsługi przerwania od T/C0
 
Cols:
Timer1 = 3036
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Dziesek
If Dziesek = 10 Then
Dziesek = 0
Incr Minuty
If Minuty = 10 Then
Minuty = 0
Incr Godziny
If Godziny = 10 Then
Godziny = 0
End If : End If : End If : End If : Return
 
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
 
 
Tabela:                                                     'potrzebna do wyświetlenia cyfr 0...9
'Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
 
 
 
Data 144 , 128 , 248 , 130 , 146 , 153 , 176 , 164 , 249 , 192
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *




Portret użytkownika mirley

Re: Program

ja bym ten program zrobił inaczej... gdzie znalazłeś taka propozycję programu z wait w środku do loop...... w ogóle nie powinieneś używać tych poleceń.... Nie rozumiem jeszcze jednego: jak na 4 wyświetlaczach prezentujesz sekundy, dzies. sekund, minuty i godziny?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika maly1238

Program

Program pisałem sam. Jeszcze mało wiem o Bascomie. Mała pomyłka, ogólnie jest to sekundnik który liczy od 0 do 9999s lub odwrotnie.

Portret użytkownika mirley

Re: Sekundnik

Sprawdż tak.... tylko dopisz sobie akcje do kombinacji przycisków we wskazanym miejscu i powinno działać.... normalnie da sie to zrobic jeszcze prościej.. popatrz do moich procedur obsługi klawiatury

$crystal = 4000000
Dim Sekundy As Byte
Dim Dziesek As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Obs_wys As Byte
Dim Flaga1 As Bit
 
mim licz(3) as byte
 
Flaga1 = 0
Config Portb = 255 : Portb = &B11111111 : Config Portd = &B1111100 : Portd = &B11111111
Config Timer0 = Timer , Prescale = 64
Config Timer1 = Timer , Prescale = 64
Enable Interrupts : Enable Timer0 : Enable Timer1
On Timer0 Co4ms
On Timer1 Cols
Start Timer0
Stop Timer1
S1 Alias Portd.0
S2 Alias Portd.1
 
Do
 
if flaga1 = 1 then
  flaga1=0
 
  if S1 = 0 and S2 =1 then 
    incr licz(1)
    if licz(1) = 50 then
      licz(1) = 0
 
      'akcja klawisza gdy S1 = 0 a s2 = 1
 
    end if
  else
    licz(1) = 40
  end if
 
  if S1 = 1 and S2 =0 then 
    incr licz(2)
    if licz(2) = 50 then
      licz(2) = 0
 
      'akcja klawisza gdy S1 = 1 a s2 = 0
 
    end if
  else
    licz(2) = 40
  end if
 
 
  if S1 = 0 and S2 =0 then 
    incr licz(3)
    if licz(3) = 50 then
      licz(3) = 0
 
      'akcja klawisza gdy S1 = 0 a s2 = 0
 
    end if
  else
    licz(3) = 40
  end if
 
end if
 
Loop : End
 
Co4ms:                                                      ' obsługa wyświetlaczy co 4,096ms
set Flaga1
Incr Obs_wys : If Obs_wys = 4 Then Obs_wys = 0 : Portd = &B1111111
Select Case Obs_wys                                         ' obsługa wyświetlacza
Case 0:                                                     'wyświetl zawartość licznika jednostek minut
   Portb = Lookup(sekundy , Tabela) : Portd.3 = 0
Case 1:                                                     'wyświetl zawartość licznika dziesiątek minut
   Portb = Lookup(dziesek , Tabela) : Portd.4 = 0
Case 2:                                                     'wyświetl zawartość licznika jednostek godzin
   Portb = Lookup(minuty , Tabela) : Portd.5 = 0
Case 3:                                                     'wyświetl zawartość licznika dziesiatek godzin
   Portb = Lookup(godziny , Tabela) : Portd.6 = 0
End Select : Return                                         'koniec obsługi przerwania od T/C0
 
Cols:
Timer1 = 3036
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Dziesek
If Dziesek = 10 Then
Dziesek = 0
Incr Minuty
If Minuty = 10 Then
Minuty = 0
Incr Godziny
If Godziny = 10 Then
Godziny = 0
End If : End If : End If : End If : Return
 
 
Tabela:     
Data 144 , 128 , 248 , 130 , 146 , 153 , 176 , 164 , 249 , 192

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika maly1238

Czyli w te wskazane miejsca

Czyli w te wskazane miejsca mam dopisać:
Debounce S1 , 0 , Pr2 , Sub
Debounce S2 , 0 , Pr1 , Sub

Pr1:
Stop Timer1
If S1 = 1 And S2 = 0 Then
Waitms 25
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Dziesek
If Dziesek = 10 Then
Dziesek = 0
Flaga1 = 0
Return
End If : End If : End If

Pr2:
Stop Timer1
If S1 = 0 And S2 = 1 Then
Waitms 25
Incr Minuty
If Minuty = 10 Then
Minuty = 0
Incr Godziny
If Godziny = 10 Then
Godziny = 0
Flaga1 = 0
Return
End If : End If : End If

???

Portret użytkownika mirley

Re: Sekundnik

Nie... broń boże... debunce jest do kitu... zawiera w środku wait'y itp polecenia których się nie stosuje.... we wskazanym miejscu masz dopisać akcję przycisku.... czyli co ma robić, czyli np:

Stop Timer1
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Dziesek
If Dziesek = 10 Then
Dziesek = 0

beż żadnego waitms itp poleceń

w drugim miejscu podobnie dla minut

a w ostatnim miejscu po prostu StartTimer1 i tyle

Zmienna licz(x) zapewnia automatycznie obsługę styków usuwanie drgań

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

Sekundnik

Niestety nie udało mi się tego uruchomić. Program wygląda tak:

$crystal = 4000000
Dim Sekundy As Byte
Dim Dziesek As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Obs_wys As Byte
Dim Licz(3) As Byte
Dim Flaga1 As Byte
 
Config Portb = 255 : Portb = &B11111111 : Config Portd = &B1111100 : Portd = &B11111111
Config Timer0 = Timer , Prescale = 64
Config Timer1 = Timer , Prescale = 64
Enable Interrupts : Enable Timer0 : Enable Timer1
On Timer0 Co4ms
On Timer1 Cols
Start Timer0
Stop Timer1
S1 Alias Portd.0
S2 Alias Portd.1
 
 
 
Do
If Flaga1 = 1 Then
  Flaga1 = 0
 
  If S1 = 0 And S2 = 1 Then
    Incr Licz(1)
    If Licz(1) = 50 Then
      Licz(1) = 0
       Stop Timer1
Incr Minuty
If Minuty = 10 Then
Minuty = 0
Incr Godziny
If Godziny = 10 Then
Godziny = 0
End If : End If : End If
End If
  Else
    Licz(1) = 40
      End If
 
 
  If S1 = 1 And S2 = 0 Then
    Incr Licz(2)
    If Licz(2) = 50 Then
      Licz(2) = 0
  Stop Timer1
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Dziesek
If Dziesek = 10 Then
Dziesek = 0
 End If : End If : End If
  Else
    Licz(2) = 40
     End If
 
 
  If S1 = 0 And S2 = 0 Then
    Incr Licz(3)
    If Licz(3) = 50 Then
      Licz(3) = 0
         Start Timer1
    End If
  Else
    Licz(3) = 40
         End If
 
 
Loop : End
 
 
 
Co4ms:                                                      ' obsługa wyświetlaczy co 4,096ms
Set Flaga1
Incr Obs_wys : If Obs_wys = 4 Then Obs_wys = 0 : Portd = &B1111111
Select Case Obs_wys                                         ' obsługa wyświetlacza
Case 0:                                                     'wyświetl zawartość licznika jednostek minut
   Portb = Lookup(sekundy , Tabela) : Portd.3 = 0
Case 1:                                                     'wyświetl zawartość licznika dziesiątek minut
   Portb = Lookup(dziesek , Tabela) : Portd.4 = 0
Case 2:                                                     'wyświetl zawartość licznika jednostek godzin
   Portb = Lookup(minuty , Tabela) : Portd.5 = 0
Case 3:                                                     'wyświetl zawartość licznika dziesiatek godzin
   Portb = Lookup(godziny , Tabela) : Portd.6 = 0
End Select : Return                                         'koniec obsługi przerwania od T/C0
 
Cols:
Timer1 = 3036
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Dziesek
If Dziesek = 10 Then
Dziesek = 0
Incr Minuty
If Minuty = 10 Then
Minuty = 0
Incr Godziny
If Godziny = 10 Then
Godziny = 0
End If : End If : End If : End If : Return
 
 
 
Tabela:                                                     'potrzebna do wyświetlenia cyfr 0...9
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144

Portret użytkownika gosc

Sekundnik

Jakbyś mógł mi jeszcze wytłumaczyć o co chodzi z tą zmienną licz(x) to byłbym bardzo wdzięczny.

Portret użytkownika mirley

Re: licznik

Masz zmienną flaga która ustawia się co około 4ms w przerwaniu.... potem w głównej pętli masz sprawdzanie flagi i program goniący w pętli nic nie robi dopóki flaga nie będzie 1.... zwalnia to przerwanie od robienia głupot takich jak obsługa klawiatury lub wyświetlacz.... szczerze mówiąc w przerwaniu w tym przypadku powinno być tylko set flaga i nic więcej

Nie działa ci bo narobiłeś głupot.... wrzuciłeś byle jak do kodu polecenia ustawiające... skasowałeś na końcu do loop End if od flagi i teraz nie wiadomo którego ifa to dotyczy...... zacznij jeszcze raz od kodu który ci podałem..... wklej obsługę tak jak teraz ale zrób wcięcia w kodzie żeby był czytelny.... w pierwszym wklejonym fragmencie jest za dużo End if i program robi głupoty..... wzoruj się na tym co ci wysłałem, zapis i forma a będzie działało

Obsługa przycisków jest banalna..... jak są jednocześnie naciśnięty klawisz S1 a s2 nie to zwiększa się licznik od 40 który ustawia się zawsze jak nic nie naciskasz do 50 czyli liczy 10 x 4ms i reakcja na switch następuje pop 40ms, następna reakcja po trzymaniu będzie po 200ms bo jak przycisk jest trzymany to licznik się zeruje a nie ustawia na 40.

Zadumaj się nad ifami bo z bezmyślnego wklejania nic ci nie przyjdzie... podobnie jak z pisania komend jedna pod drugą bez żadnych wcięć

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika maly1238

Sekundnik

Poprawiłem program i dalej nic. Naciskanie przycisków nic nie zmienia. Dopiero od niedawna uczę się programować w BASCOMIE stąd tyle pytań, a ten układ muszę zrobić na zaliczenie I semestru pracowni. Ten program który wstawiłem za pierwszym razem zaproponował mi mój nauczyciel a tu dowiedziałem się że waity w do loop w ogóle nie powinny występować.

$crystal = 4000000
Dim Sekundy As Byte
Dim Dziesek As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Obs_wys As Byte
Dim Flaga1 As Bit
 
Dim Licz(3) As Byte
 
 Flaga1 = 0
Config Portb = 255 : Portb = &B11111111 : Config Portd = &B1111100 : Portd = &B11111111
Config Timer0 = Timer , Prescale = 64
Config Timer1 = Timer , Prescale = 64
Enable Interrupts : Enable Timer0 : Enable Timer1
On Timer0 Co4ms
On Timer1 Cols
Start Timer0
Stop Timer1
S1 Alias Portd.0
S2 Alias Portd.1
 
Do
 
If Flaga1 = 1 Then
  Flaga1 = 0
 
  If S1 = 0 And S2 = 1 Then
    Incr Licz(1)
    If Licz(1) = 50 Then
      Licz(1) = 0
       'akcja klawisza gdy S1 = 0 a s2 = 1
      Stop Timer1
          Incr Minuty
          If Minuty = 10 Then
          Minuty = 0
              Incr Godziny
              If Godziny = 10 Then
                   Godziny = 0
 
 
 
  End If
  Else
    Licz(1) = 40
    End If
          End If
              End If
 
 
 
 If S1 = 1 And S2 = 0 Then
    Incr Licz(2)
    If Licz(2) = 50 Then
      Licz(2) = 0
 
 
      'akcja klawisza gdy S1 = 1 a s2 = 0
         Stop Timer1
           Incr Sekundy
           If Sekundy = 10 Then
           Sekundy = 0
                Incr Dziesek
                If Dziesek = 10 Then
                Dziesek = 0
 
    End If
  Else
    Licz(2) = 40
           End If
                End If
 End If
 
  If S1 = 0 And S2 = 0 Then
    Incr Licz(3)
    If Licz(3) = 50 Then
    Start Timer1
      Licz(3) = 0
         'akcja klawisza gdy S1 = 0 a s2 = 0
           Start Timer1
 
    End If
  Else
    Licz(3) = 40
  End If
 
End If
Loop : End
 
 
Co4ms:                                                      ' obsługa wyświetlaczy co 4,096ms
Set Flaga1
Incr Obs_wys : If Obs_wys = 4 Then Obs_wys = 0 : Portd = &B1111111
Select Case Obs_wys                                         ' obsługa wyświetlacza
Case 0:                                                     'wyświetl zawartość licznika jednostek minut
   Portb = Lookup(sekundy , Tabela) : Portd.3 = 0
Case 1:                                                     'wyświetl zawartość licznika dziesiątek minut
   Portb = Lookup(dziesek , Tabela) : Portd.4 = 0
Case 2:                                                     'wyświetl zawartość licznika jednostek godzin
   Portb = Lookup(minuty , Tabela) : Portd.5 = 0
Case 3:                                                     'wyświetl zawartość licznika dziesiatek godzin
   Portb = Lookup(godziny , Tabela) : Portd.6 = 0
End Select : Return                                         'koniec obsługi przerwania od T/C0
 
Cols:
Timer1 = 3036
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Dziesek
If Dziesek = 10 Then
Dziesek = 0
Incr Minuty
If Minuty = 10 Then
Minuty = 0
Incr Godziny
If Godziny = 10 Then
Godziny = 0
End If : End If : End If : End If : Return
 
 
Tabela:
Data 144 , 128 , 248 , 130 , 146 , 153 , 176 , 164 , 249 , 192

Portret użytkownika mirley

Re: Program

Spróbuj tak......

$crystal = 4000000
Dim Sekundy As Byte
Dim Dziesek As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Obs_wys As Byte
Dim Flaga1 As Bit
 
mim licz(3) as byte
 
Flaga1 = 0
Config Portb = 255 : Portb = &B11111111 : Config Portd = &B1111100 : Portd = &B11111111
Config Timer0 = Timer , Prescale = 64
Config Timer1 = Timer , Prescale = 64
Enable Interrupts : Enable Timer0 : Enable Timer1
On Timer0 Co4ms
On Timer1 Cols
Start Timer0
Stop Timer1
S1 Alias Portd.0
S2 Alias Portd.1
 
Do
 
if flaga1 = 1 then
  flaga1=0
 
  if S1 = 0 and S2 =1 then 
    incr licz(1)
    if licz(1) = 50 then
      licz(1) = 0
      '*************************************************
      'akcja klawisza gdy S1 = 0 a s2 = 1
      Stop Timer1
      Incr Minuty
      If Minuty = 10 Then
        Minuty = 0
        Incr Godziny
        If Godziny = 10 Then
          Godziny = 0
        end if
      end if
      '*************************************************
    end if
  else
    licz(1) = 40
  end if
 
  if S1 = 1 and S2 =0 then 
    incr licz(2)
    if licz(2) = 50 then
      licz(2) = 0
      '*************************************************
      'akcja klawisza gdy S1 = 1 a s2 = 0
      Stop Timer1
      Incr Sekundy
      If Sekundy = 10 Then
        Sekundy = 0
        Incr Dziesek
        If Dziesek = 10 Then
          Dziesek = 0
        end if
      end if
      '*************************************************
    end if
  else
    licz(2) = 40
  end if
 
 
  if S1 = 0 and S2 =0 then 
    incr licz(3)
    if licz(3) = 50 then
      licz(3) = 0
      '*************************************************
      'akcja klawisza gdy S1 = 0 a s2 = 0
      Start Timer1
      '*************************************************
    end if
  else
    licz(3) = 40
  end if
 
end if
 
Loop : End
 
Co4ms:                                                      ' obsługa wyświetlaczy co 4,096ms
set Flaga1
Incr Obs_wys : If Obs_wys = 4 Then Obs_wys = 0 : Portd = &B1111111
Select Case Obs_wys                                         ' obsługa wyświetlacza
Case 0:                                                     'wyświetl zawartość licznika jednostek minut
   Portb = Lookup(sekundy , Tabela) : Portd.3 = 0
Case 1:                                                     'wyświetl zawartość licznika dziesiątek minut
   Portb = Lookup(dziesek , Tabela) : Portd.4 = 0
Case 2:                                                     'wyświetl zawartość licznika jednostek godzin
   Portb = Lookup(minuty , Tabela) : Portd.5 = 0
Case 3:                                                     'wyświetl zawartość licznika dziesiatek godzin
   Portb = Lookup(godziny , Tabela) : Portd.6 = 0
End Select : Return                                         'koniec obsługi przerwania od T/C0
 
Cols:
Timer1 = 3036
Incr Sekundy
If Sekundy = 10 Then
Sekundy = 0
Incr Dziesek
If Dziesek = 10 Then
Dziesek = 0
Incr Minuty
If Minuty = 10 Then
Minuty = 0
Incr Godziny
If Godziny = 10 Then
Godziny = 0
End If : End If : End If : End If : Return
 
 
Tabela:     
Data 144 , 128 , 248 , 130 , 146 , 153 , 176 , 164 , 249 , 192

Jak napisałem Ci w którym miejscu masz wrzucić fragment kodu, to nie rozumem czemu modyfikujesz inne fragmenty kodu wstawijąc end if w losowe miejsce. Patrz wyżej ..... nie masz prawa wyjść kodem poza te komentarze z gwiazdkami....

Sens z wcięciami jest taki że zawsze jak coś jest wcięte na dwie spacje to wewnątrz nie może być coś wcięte na jedną... to jest fizycznie niemożliwe.... potraktuj zewnętrzny if i wszystko co jest w środku jako "pojemnik", w tym "pojemniku" znajdują się instrukcje i może być drugi if "pojemnik".... nie jest możliwe aby wewnętrzny if kończył się instrukcją end if poza ifem zewnętrznym w którym się znajduje.... czyli:

if coś then
  instrukcja 1
  instrukcja 2
  if coś 2 then
    instrukcja 1a
    instrukcja 2a
    if coś 3 then
      instrukcja 1c
      instrukcja 2c
      ....  
    end if
  else
    instrukcja 3a
    .....
  end if
  instrukcja 3 

takie coś natomiast to jakiś bezsens i utrudnia analizę programu, będzie to działać o ile dobrze sa dane end if

if coś then
  instrukcja 1
  instrukcja 2
  if coś 2 then
    instrukcja 1a
    instrukcja 2a
if coś 3 then
  instrukcja 1c
  instrukcja 2c
   ....  
end if
  end if
  instrukcja 3 

To co napisałeś po zrobieniu poprawnych wcięć wygląda tak, więc działanie uległe cołkowitej zmianie.... co z tego że się przekompilowało jak trudno ocenc co to dokładnie zrobi:

  If S1 = 0 And S2 = 1 Then    
    Incr Licz(1)
    If Licz(1) = 50 Then
      Licz(1) = 0
      Stop Timer1
      Incr Minuty
      If Minuty = 10 Then
        Minuty = 0
        Incr Godziny
        If Godziny = 10 Then
          Godziny = 0
        End If
      Else
        Licz(1) = 40
      End If
    End If
  End If

Program który podałeś to pzykład z "Mikroprocesorowej oślej łączki" wydanej na łamach EdW, napisanej do płytki która jest w linku

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika maly1238

Sekundnik

Niestety dalej nic. Program nie reaguje na żadne naciśnięcie przycisku.

Portret użytkownika mirley

Re: Przyciski

Jasne że nie reaguje..... przoczyłem na początku zamiast:

S1 Alias Portd.0
S2 Alias Portd.1

daj:

S1 Alias Pind.0
S2 Alias Pind.1

czytanie trzeba zrobic z rejestru wejściowego a nie wyjściowego

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika maly1238

Sekundnik

Wszystko się zgadza tylko mi chodziło o to żeby startować Timer1 naciskając S1 i S2 a potem stopować Timer1 tymi samymi przyciskami.

Portret użytkownika mirley

Re: sekundnik

Teraz masz tak że staruje się dwoma naraz a naciśniecie ustawien wyłącza timer, zrób sobie jeszcze zmienną bitową

dim trun as bit

ustawiaj trun = 1 wszędzie tam gdzie timer 1 ustawiasz na start a trun=0 tam gdzie zatrzynmujesz timer... wostatnim przycisku będzie wtedy

if trun = 0 then
  Start Timer1
  trun = 1
else
  stop timer0
  trun = 0
end if

w przyciskach S1 i S2 wywal stop timer1

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.