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][atmega8] czy napisany program bedzie działać?

mati0102 24 Mar 2009 13:26 1609 5
REKLAMA
  • #1 6325524
    mati0102
    Poziom 11  
    Witam!

    Postanowiłem sam napisać program. Zastanawiam się czy bedzie działać w praktyce bo wydaje mi się że jest poprawny, ale ja jestem początkujący...

    Program ma za zadanie automatyczne włączać na 60s i wyłączać po 60s wentylator od PC (załaczany przekaźnikiem) w pętli nieskończonej.
    Gdy wciśnięty zostanie przycisk program ma zmienic na przeciwny stan portu, czyli zgasic lub zapalić diode led. (w programie 2 przyciski każdy obsługuje 1 z 2 diod led)

    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Portd = Output
    Config Pinb.0 = Input
    Config Pinb.2 = Input
    
    Set Portb.0
    Set Portb.2
    
    Do
    
    If Pinb.0 = 0 Then
       Waitms 25
       Toggle Portd.2
    End If
    
    If Pinb.2 = 0 Then
     Waitms 25
     Toggle Portd.4
    End If
    
    Do
     Toggle Portd.0
     Wait 60
    Loop
    
    Loop
    End


    Czy zadziała?
  • REKLAMA
  • REKLAMA
  • #3 6325693
    Maciek4141
    Poziom 22  
    Zobacz, że program w pętli nieskończonej będzie trafiał na wait 60 i tam się zatrzymywał, co uniemożliwi odczytanie stanów przycisków.
  • REKLAMA
  • Pomocny post
    #4 6325886
    LED5W
    Poziom 34  
    Gdy już usuniesz wewnętrzną pętlę do..loop to zwróć uwagę, że stan przycisku będzie sprawdzany raz na 60s. Możesz zrobić sprawdzanie np. tak (co 1 sek.):
    dim x as byte
    ...
    do
    'sprawdź przyciski
    if x=60 then
       x=0
       toggle ...
       end if
    wait1
    incr x
    loop
    end


    Albo wykorzystać timer lub przerwanie.
  • REKLAMA
  • #5 6325931
    mati0102
    Poziom 11  
    zrobiłem poprawki

    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Portd = Output
    Config Pinb.0 = Input
    Config Pinb.2 = Input
    
    Set Portb.0
    Set Portb.2
    
    dim x as byte
    
    Do
    
    If Pinb.0 = 0 Then
       Waitms 25
       Toggle Portd.2
    End If
    
    If Pinb.2 = 0 Then
     Waitms 25
     Toggle Portd.4
    End If
    
    If x=60 then
       x=0
       Toggle portd.0
    End If
    Wait 1
    incr x
    loop
    
    End
    
    


    czy teraz jest dobrze?
  • #6 6326007
    crazy_phisic
    VIP Zasłużony dla elektroda
    Zamiast się rozwodzić na forum proponuję własnoręcznie sprawdzić. Temat zamykam.
REKLAMA