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

Problem ze Switch[atmega8][bascom]

Lukaszinfer 23 Mar 2009 16:12 1347 6
REKLAMA
  • #1 6321385
    Lukaszinfer
    Poziom 12  
    Witam,

    nauczylem sie troszeczke podstaw do jezyka BASCOM, ale niestety nie wiem jak napisac taki program:

    Chce aby podłączony switch do np. portb.0
    po 1 naciśnięciu tylko na pc5 bylo 1 (dioda włączona)
    po 2 naciśnięciu tylko na pc4 bylo 1 (dioda włączona)
    i tak dalej idąc do pc0

    jak to zrobić?
    za pomoc moge odwdzieczyc sie punktami
  • REKLAMA
  • #2 6321508
    dawid512
    Poziom 32  
    Najpierw ustaw dane końcówki jako we/wy a następnie skorzystaj z debounce. Następnie inkrementuj jakąś zmienną a potem skorzystaj z select case.
  • REKLAMA
  • #3 6321595
    Lukaszinfer
    Poziom 12  
    czy mógłbyś podac mi jakis latwy przyklad
  • REKLAMA
  • #4 6322132
    Scofield1
    Poziom 11  
    Tak na szybkiego coś na bazgrałem. Diody podłączasz anodą do + a kadotdą do mikrokontrolera.

    $regfile "m8def.dat"
    $crystal = 8000000
    
    Config Pinb.0 = Input                                       'Do tego portu podłączamy switcha
    Config Portd = Output                                       'Do pinów tego portu będą podłączone diody
    
    Set Portb.0                                                 'Włączenie rezystora podciągającego
    Switch Alias Pinb.0                                         'Zamiast wpisywać Pinb.0 wpisujemy Switch
    Dim Licz As Byte                                            'Deklarujemy zmienną pomociczą -Licz- jako byte wartości od 0 do 255
    Portd = &B11111111
    Licz = 5
    
    
    Do
    If Switch = 0 Then
    Do
    Portd = &B11111111
    Portd.licz = 0
    Decr Licz
       If Licz = 0 Then
       Exit Do
       End If
    Waitms 50
    Loop Until Switch = 1
    End If
    
    If Licz = 0 Then
    Wait 1
    Exit Do
    End If
    
    Loop
    End


    Nie daje gwarancji, że on będzie działał poprawnie. Jeżeli coś nie będzie działało to pisz.

    Program gdy dojdzie do 0 to kończy program i uruchomienie go z powrotem jest tylko możliwe przez odłączenie zasialania od procka i podłączenie go z powrotem
  • REKLAMA
  • #5 6322138
    wader_669
    Poziom 28  
    
    config pinb.0 = input
    s1 alias pinb.0
    set portb.0
    
    config portc = output
    portc=&b00100000
    
    do
    
    if s1=0 then
    waitms 45
    bitwait s1, set
    
    if portc.8= 1 then
    portc.8=0
    portc.5=1
    end if
    
    rotate portc, right
    end if
    
    loop
    end
    


    masz przyklad reszta twoja.
    _____________________________________________________________
    Wlasnie widze, ze ktos byl pierwszy

    Dodano po 22 [minuty]:

    moim zdaniem kod wczesniejszy jes ok, tylko troche bym pozmienial

    
    Do
    If Switch = 0 and licz<=5 and licz>=0 Then
    waitms 45
    bitwait switch, set
    
    Portd = &B11111111
    Portd.licz = 0
    Decr Licz
    End If
    
    If Licz = 0 Then Exit Do
    
    Loop
    End
    
  • #6 6322309
    LED5W
    Poziom 34  
    Ja też dam przykład, mimo że już są, ponieważ wydaje mi się, że jest bliższy oczekiwaniom autora i nie zmienia stanu pc6...8.
    Musisz tylko zmienić używane w tym programie porty.
    Dim Stanled As Byte , Hlp As Byte
    Config Portb = 255
    Portd = 1                                            'podciągnięcie dla przycisku
    Do                                                          'pętla nieskończona
    Debounce Pind.0 , 0 , Proceduradozrobienia , Sub
    Loop
    End                                                         'tu jest koniec programu głównego
    
    Proceduradozrobienia:                                       'nazwa procedury zakończona dwukropkiem
    If Stanled = 0 Then
          Stanled = &B100000
       Else
          Shift Stanled , Right
       End If
    Hlp = Portb And &B11000000
    Portb = Hlp + Stanled
    Return                                                      'powróć do pętli
  • #7 6323222
    Lukaszinfer
    Poziom 12  
    wilekie dzieki kazdy otrzymuje po 15pkt
REKLAMA