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

Dziwne działanie, proszę o wyjaśnienie

bobo 03 Mar 2011 20:59 984 1
  • #1 9231442
    bobo
    Poziom 29  
    
    $regfile = "attiny2313.dat"                                 'informuje kompilator o pliku dyrektyw mikrokontrolera
    $crystal = 8000000
    
    Declare Sub Obie
    
    Config Pind.0 = Output
    Config Pind.1 = Output
    Config Pind.3 = Output
    
    Config Pind.2 = Input
    Config Pinb.2 = Input
    
    Portd.0 = 1
    Portd.1 = 0
    Portd.3 = 0
    
    '---------------------------------------------------
    Do
    If Pinb.2 = 0 Then
       Call Obie
    End If
    
    If Pind.2 = 0 Then
       'PRACA
       Portd.1 = 1                                              ' zielona=on
       Portd.0 = 0                                              ' czerwona=off
       Portd.3 = 1                                              ' pipcek=off
    Else
       'ALARM
       Pind.2 = 1                                               ' zielona=off
       Portd.0 = 1                                              ' czerwona=on
       Portd.1 = 0                                              ' pipcek=on
       Portd.3 = 0
    End If
    
    Loop
    
    '----------------------------------------------------
    
    Sub Obie
    Waitms 100
       Portd.1 = 1                                              'zielona=on
       Portd.0 = 0                                              'czerwona=of
       Portd.3 = 1
       Waitms 200
       Portd.1 = 0                                              'Zielona = Off
       Portd.0 = 1                                              'czerwona=on
       Portd.3 = 0
    End Sub
    

    Dlaczego procedura Obie działa tylko wtedy jeśli pinb.2=0 i pind.2=0, a nie działa, jeśli pind.2=1 i pinb.2=0 ?
    Czy możecie mi wytłumaczyć, bo już głupieję.
  • Pomocny post
    #2 9232804
    Nagus
    Poziom 27  
    Nie panujesz nad zakresem działania instrukcji w if-else...
    Po wywołaniu podprogramu Obie wykona ci się też kod za nią (ALARM/PRACA), który manipuluje przecież tymi samymi portami.
    Tak to powinno wyglądać (wtedy wykona się albo Obie albo kod za nią, a nie wszystko):
    
    Do
    If Pinb.2 = 0 Then
       Call Obie
    Else
       If Pind.2 = 0 Then
          'PRACA
          Portd.1 = 1                                              ' zielona=on
          Portd.0 = 0                                              ' czerwona=off
          Portd.3 = 1                                              ' pipcek=off
       Else
          'ALARM
          Pind.2 = 1                                               ' zielona=off
          Portd.0 = 1                                              ' czerwona=on
          Portd.1 = 0                                              ' pipcek=on
          Portd.3 = 0
       End If
    End If
    
    Loop
    
REKLAMA