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] "Sub" itp

I.T.I 26 Maj 2009 21:08 2319 14
REKLAMA
  • #1 6578577
    I.T.I
    Poziom 16  
    Witam odrazy mówię ze dopiero zaczynam programować i juz mam problem. Musze (chce) napisać program który będzie narzazie sterował pinami z 4 przycisków a ma to wyglądać ta

    Pierwszy przycisk (porty b pin 4 akcja za pomocą dawania stanu niskiego 0 ) służył będzie do wybierania pinu jakim chcemy sterować (piny b0 i b1)

    Przycisk 2; 3 i czwarty (pin b7 b6 i b5) będą służyły do wywoływania rożnych stanów na porcie wybranym wcześniej czyli będzie ustawiał stany wysokie i niskie zmieniające się z rożna częstotliwością zależnie od tego jak jaki przycisk został "zaprogramowany"

    no i tu mam problem bo jakoś nie mogę tego zrobi narazie mam to
    a i nie proszę o napisanie tego lecz o (no napisać tez możecie) ale tarze wyjasnienie jak to zrobić


    Test napisałem i działa jak należy
      $regfile = "m8def.dat"
        $crystal = 1000000
    
           Config Portb = &B00001111
                 Portb = &B11110000
    
    
                Declare Sub X1
                 Declare Sub X2
                  Declare Sub X3
    
    
                                Do
                            Portb = &B11110000
                              If Pinb.7 = 0 Then X1
                                  If Pinb.6 = 0 Then X2
                                   If Pinb.5 = 0 Then X3
                              Loop
    
                              End
    
                              Sub X1
                               Portb = &B00000011
                              Waitms 0.40
                               Portb = &B00000000
                              Waitms 20
                              End Sub
    
    
    
                              Sub X2
                              Portb = &B00000011
                             Waitms 1
                              Portb = &B00000000
                             Waitms 20
    
                              End Sub
    
                              Sub X3
                               Portb = &B00000011
                                Waitms 2
                               Portb = &B00000000
                                Waitms 20
    
                               End Sub     


    i to co próbowałem napisać

            $regfile = "m8def.dat"
        $crystal = 1000000
    
           Config Portb = &B00001111
                 Portb = &B11110000
    
    
               Declare Sub Z1
               'Declare Sub Z2
    
    
                       Declare Sub X1
                   Declare Sub X2
                   Declare Sub X3
    
                        Do
                            Portb = &B11110000
                             If Pinb.4 = 0 Then Z1
                               'If Pinb.4 = 1 Then Z2
    
                               Loop
    
                               Do
                               Sub Z1
                               Portb = &B11110000
                                If Pinb.7 = 0 Then X1
                                 If Pinb.6 = 0 Then X2
                                  If Pinb.5 = 0 Then X3
    
                                 Loop Until Pinb.5 = 0
                                     End Sub
    
    
                                 Sub X1
                               Portb = &B00000010
                              Waitms 0.40
                               Portb = &B00000000
                              Waitms 20
                                 Portb = &B11110000
                              End Sub
    
    
    
                              Sub X2
                              Portb = &B00000010
                             Waitms 1
                              Portb = &B00000000
                             Waitms 20
    
                              End Sub
    
                              Sub X3
                               Portb = &B00000010
                                Waitms 2
                               Portb = &B00000000
                                Waitms 20
    
                               End Sub
     



    Mam nadzieje ze po tych moich "programach" zakapujecie o co chodzi.to

    to jest tak specjalnie żeby na razie skompilować dla testów (dodane jest (') przed wiersz jak by ktoś nie zauważył ) >>
    'Declare Sub Serwo2
    'If Pinb.4 = 1 Then Serwo2

    Proszę poprawić treść wiadomości - regulamin p.15
    [zumek]
  • REKLAMA
  • REKLAMA
  • #3 6579244
    I.T.I
    Poziom 16  
    "Waitms" Komeda służąca do zatrzymania programu na pewien czas końcówka ms oznacza ze wartości będą milisekundami czyli waitms 0.40 oznacza ze program zatrzymany zastanie na 0.40 ms i to działa bo w programie Test działa!!! jak nie wierzysz to sprawdź ale wiem można użyć Komedy waitus która użyję raczej w programie ostatecznym

    A co do programu to chodzi o to ze ma być na początku możliwy wybór pinu którym chcemy sterować a jak już wybierzemy to wybieramy jedna 3 trzech możliwości jak chcemy nim sterować KPW.


    Ps. Możliwe jest takie coś żeby

    If Pind.7 = 0 Then X1

    zastąpić i żeby działało??

    If portd = &B011111111 Then X1
  • #4 6579534
    wader_669
    Poziom 28  
    Ja radze: kupic ksiazke, pogoladaj pare przykladowych kodow, zrozum podstawy.
    Tez moze staral bym sie tobie pomoc ale troche nie jasno opisales co dokladnie ma robic twoj procek i z kodu ciezko to wywnioskowac
  • #5 6579554
    dawid512
    Poziom 32  
    If Pinb.7 = 0 Then X1 
    Jeżeli deklarujesz podprogram o nazwie X1 to pasowałoby go wywołać lub do niego wskoczyć. Po za tym proponuję zrobić sobie zmienną np. x i inkrementować ją za pomocą twojego klawisza wybierajacego dany pin. Nastepnie proponuje skorzystać z Select Case i w zaleznosci ktory pin zostal wybrany wykonywać odpowiednie operacje.
  • #7 6580348
    slawko_k
    Poziom 35  
    I.T.I. napisał
    Cytat:
    "Waitms" Komeda służąca do zatrzymania programu na pewien czas końcówka ms oznacza ze wartości będą milisekundami czyli waitms 0.40 oznacza ze program zatrzymany zastanie na 0.40 ms i to działa bo w programie Test działa!!!


    jaką ty masz wersję bascoma że na to pozwala.

    help z 1.11.9.0

    Action
    Suspends program execution for a given time in mS.
    Syntax
    WAITMS mS
    Remarks
    The number of milliseconds to wait. (1-65535)
  • REKLAMA
  • #8 6582109
    I.T.I
    Poziom 16  
    Dobra to wytłumaczenie inaczej na podstawie obrazka poniżej
    Bascom [ATmega8] "Sub" itp

    1. przycisk 1 niewciśnięty przycisk 4 wciśnięty dioda 1 zaświeci się na 2ms i zgaśnie na 20ms

    2. przycisk 1 wciśnięty przycisk 4 wciśnięty dioda 2 zaświeci się na 2ms i zgaśnie na 20ms

    3. przycisk 1 niewciśnięty przycisk 3 wciśnięty dioda 1 zaświeci się na 1ms i zgaśnie na 20ms

    4. przycisk 1 wciśnięty przycisk 3 wciśnięty dioda 2 zaświeci się na 1ms i zgaśnie na 20ms

    5.przycisk 1 niewciśnięty przycisk 2 wciśnięty dioda 1 zaświeci się na 0.40ms i zgaśnie na 20ms

    6. przycisk 1 wciśnięty przycisk 2 wciśnięty dioda 2 zaświeci się na 0.40ms i zgaśnie na 20ms

    "Objaśnienie"
    Wciśnięty oznacza ze na pinie pojawi się stan niski 0
  • #9 6582263
    wader_669
    Poziom 28  
    dobra to juz w miare rozumiem tylko jeszcze 2 pytania: te diody maja mrugac? i czy musi to byc idealnie taki czas jak podajesz czy ok. ? (bo jak idealnie to musisz to zrobic na timerze. Jest to duzo roboty wtedy tobie nie pomoge bo mi sie nie chce, jak ma byc to okolo to mozesz zrobic na waitach)
  • #10 6582288
    slawko_k
    Poziom 35  
    a jak puścisz przyciski to ma przestać chodzić czy ma cały czas generować te impulsy?
  • #11 6582325
    I.T.I
    Poziom 16  
    tak ja się puści to ma przestać mrugać a te diody mogą migać tak nie dokładnie jak na waitach to nic nie robi bo jak mówiłem "test" który napisałem 1 program od góry spełnia swoje zadanie tylko ze steruje tymi dwoma diadami na raz bez możliwości wyboru.

    Aha i te diody to tylko tak dla przykładu są bo naprawdę to co innego odbiera te impulsy
  • REKLAMA
  • Pomocny post
    #12 6582546
    sp3ots
    Poziom 38  
    Witam !
    
    do
    dioda1 = 1
    If przycisk1 = 1 and prycisk4 = 0 then
    dioda1 = 1
    waitms 2
    dioda1 = 0
    waitms 20
    end if
    loop
    

    itp. to początek resztę spróbuj sam
    Powodzenia życzę Stefan . GG6293398
  • #13 6582683
    I.T.I
    Poziom 16  
    Dziękuje bardzo koledze sp3ots program już napisany wystarczyło ze dowiem się ze jest takie coś jak "and" (w "helpie" nie było nic o tym) i już mam program napisany :D
  • #14 6582707
    sp3ots
    Poziom 38  
    and to po prostu i jak Irena

    jeśli przycisk1 = 0 i przycisk2 = 1 to ......
  • #15 6582939
    I.T.I
    Poziom 16  
    Wiem ze "and" oznacza porostu "i" ale nie pomyslałem ze rozwiązanie może być takie proste.
REKLAMA