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

[bascom][atmega88] przerwanie urxc

lukit 19 Lip 2011 08:41 2098 3
REKLAMA
  • #1 9733896
    lukit
    Poziom 12  
    Witam, proszę o pomoc w następującym problemie.
    Uproszczony przeklejony program w bascom działa w ten sposób że po przesłaniu określonych liter przez rs zapala RGB ledy w odopowiedni sposób.
    Przerwanie działa dobrze. Natomiast chodzi o procedure "zmieniaj" która to wywołana w przerwaniu działa, ale przerwanie nie powoduje wyjścia z niej. Musi wykonać sie cała bez reakcji na przerwanie. Chce aby była wykonywana ale jeśli przez rs przyjdzie odpowiednia komenda musi sie zakończyć i odpalać np inna procedurka.

    Proszę o poradę

    Cytat:

    ......

    Enable Urxc
    On Urxc Odbieraj

    Enable Interrupts

    Do

    'Pwm0a = 10
    'Pwm1a = 10
    'Pwm1b = 10

    Loop


    Sub Zmieniaj

    ..............
    'dluga procedura zmiany kolorow led
    ..............

    End Sub

    Odbieraj:


    Rx = Udr
    Select Case Rx


    Case 99 : 'c for clear
    Pwm1a = 0
    Pwm1b = 0
    Pwm0a = 0

    Case 115 's for zmieniaj
    Call Zmieniaj


    Case Else

    End Select

    Print "odebralem b:" ; Pwm0a ; " g:" ; Pwm1a ; " r:" ; Pwm1b

    Return


  • REKLAMA
  • #2 9733977
    xury
    Specjalista automatyka domowa
    Prosta rada to ustawiać flagę w przerwaniu od Uarta, a czyścić ją w pętli głównej. W podprogramie Zmieniaj przy każdym rozkazie sprawdzaj stan flagi i jeśli jest ona ustawiona to wychodź z niego przez Exit Sub.
    Można też inaczej poprzez sprawdzenie stanu stosu, ale wymagało by to pewnej wstawki asemblerowej,
  • REKLAMA
  • #3 9735245
    lukit
    Poziom 12  
    Dodałem flage, tylko problem w tym że po wywołaniu procedury "zmieniaj" pozostaje w pętli i tak jakby przerwanie nie dzialało:

    Cytat:

    Sub Zmieniaj(_odd As Integer , _doo As Integer , _delayy As Integer)
    Pwm1b = _odd

    Do
    If Kasowacz = 1 Then Exit Sub
    Incr Pwm1b
    Waitms _delayy

    If Pwm1b = 255 Then Pwm1b = 0
    Loop

    End Sub
REKLAMA