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

[ATmega8] [Bascom]Problem ze zminą funkcji za pomocą swich-a

ARASOBOLEK 14 Cze 2008 10:19 1644 5
  • #1 5244594
    ARASOBOLEK
    Poziom 15  
    Witam



    Na wstępie musze przyznać się do tego, że jestem początkującym w tej dziedzinie elektroniki.

    Chciałbym uzyskać kilka funkcji świecenia 4 diod LED.


    Problem tkwi w tym że nie mogę znaleźć rozkazu który by zmienił funkcje niezależnie od tego w którym momencie jest dana funkcja. Gdy funkcja jest krótka to nie ma problemu ze zmianą, jednak problem jest gdy funkcja jest dłuższa wtedy musze poczekać aż się skończy i "wstrzelić się" swich-em w jej koniec bo jak nie to funkcja jest wykonywana od początku i ponownie musze czekać na jej zakończenie. Próbowałem na wile sposobów z rozkazem FUNKTION z pod programami ale nie przyniosło to nic pozytywnego

    Oto program:

    $regfile = "m8def.dat"
    
     $crystal = 8000000
    
     Config Portd = Output
    
     Config Pinb.0 = Input
    
     Dim A As Byte
    
    
     Przycisk Alias Pinb.0
    
     Set Portb.0
    
     Portd = &B11111111
    
    
    
     If Przycisk = 0 Then
    
    
     Waitms 50
    
     End If
    
     If Przycisk = 0 Then
    
     Waitms 50
    
    
     End
    
    
     End If                                                  
     Do
    
     If Przycisk = 0 Then
    
     Waitms 50
    
     A = A + 1
    
     End If
    
    
     If A = 1 Then                                              ' Pierwsza funkcja
    
    
     Portd = &B11111111
     Waitms 30
     Portd = &B11110000
     Waitms 6
    
    
    
     Elseif A = 2 Then                                          'Druga funkcja
    
    
     Rotate Portd , Left
     Waitms 5
    
    
     Elseif A = 3 Then 'Trzecia funkcja
                                                             
    
     Rotate Portd , Right
     Waitms 10
    
    
    
     Elseif A = 4 Then                                          'Czwarta funkcja
    
    
     Waitms 7
     Portd = &B11111110
     Waitms 7
     Portd = &B11111101
     Waitms 7
     Portd = &B11110111
     Waitms 7
     Portd = &B11111011
    
    
     Elseif A = 5 Then                                          'Piąta funkcja
    
    
     Portd = &B11111110
     Waitms 23
     Portd = &B11111011
     Waitms 23
     Portd = &B11110111
     Waitms 23
     Portd = &B11111101
     Waitms 23
    
    
                                                            
     Elseif A = 6 Then  'Zapętlenie - powrót do pierwszej funkcji
    
     A = 1
    
     End If
    
    
    
     Loop
    
     End 
    


    I problem jest przy 5 funkcji ponieważ jest ona dłuższa



    Musze przyznać że naprawdę wiele godzin spędziłem przy tym by zrozumieć to i nadal się uczę jednak stoję w tym martwym punkcie juz dłuższy czas, a ja chcę rozwijać się, nie stać :)


    Pozdrawiam i mam nadzieje że ktoś mi pomoże



    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
  • #2 5244646
    madart
    Poziom 26  
    Możesz użyć przerwania. Przycisk podpinasz np. do INT1 w procku i niezależnie od miejsca w programie skoczysz do przerwania w którym możesz zmienić tą funkcje.
    Zobacz do helpa bascoma config>int
  • #3 5245122
    dawid512
    Poziom 32  
    Mały przykład dla ciebie:

    Config Int0 = Falling                                      'przerwanie po wystapieniu opadajacego zbocza syg.
                                                                  
    On Int0 Pobor   'Podczas przerwania int0 skok do pobor
    


    Do końcówki INT0 podpinasz sobie zwykłego switcha i w momencie wystąpienia opadającego zbocza sygnału (np. 0 ) następuje przerwanie w którym jest wykonywany podprogram "Pobor".

    Zrób sobie kilka testów i daj znać.

    Pozdrawiam Dawid.
  • #4 5247813
    ARASOBOLEK
    Poziom 15  
    Bardzo dziękuje za zainteresowanie w tygodniu zobacze czy to się uda, niestety teraz mam egzaminy i nie mam za bardzo na to czas ale przy wolnej chwilce zobaczę i dam znać :)
  • #5 5272686
    ARASOBOLEK
    Poziom 15  
    Witam

    Już zaopiekowałem sie tematem jednak chyba przerwanie nie jest dobrym pomysłem. Może zacytuje treść help-a:


    "Gdy procesor jest w trakcie wykonywania procedury przerwania, następne przerwanie nie będzie przyjęte, gdyż procesor (nie kompilator!) zeruje flagę globalnego zezwolenia na przerwania."


    A ja chciałbym żeby niezależnie od tego jaka jest funkcja, program został przerwany. Z tego co koledzy piszecie wynika, że jak użyje przerwania to gdy dana procedura przerwania będzie wykonywana (czyli funkcja) to już nie będę mógł zrobić kolejnego przerwania ... tak wynika z help-a

    Bardzo proszę o pomoc
REKLAMA