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

Kilka pytań o działanie niektórych rzeczy w BASCOM

wilkolaski 06 Cze 2009 00:55 1024 1
REKLAMA
  • #1 6621636
    wilkolaski
    Poziom 18  
    Witajcie.
    Mam kilka w chyba podstawowych pytań związanych z niektórymi rzeczami w BASCOMie.
    1. Pętla DO LOOP. Czy musi być użyta zawsze w programie i co powinno być objęte ta pętla ?
    2. WachDog wbudowany w ATMEGA 8. Jak jest ustawiony fabrycznie i w jaki sposób objawia się jego działanie kiedy jest uruchomiony tzn kiedy się włącza i co robi ?
    3. Które polecenie skoku lepiej używać GOTO czy GOSUB przy założeniu że nie potrzebuje powrócić po wykonaniu skoku ?
    4. Czy wielokrotne skoki GOSUB w różne miejsca programu bez powrotów mogą w którymś momencie spowodować błędne działanie programu ? Chodzi o odkładanie na stosie adresu powrotu który nie będzie wykorzystywany.
    5. Dlaczego czasami po dłuższym działaniu poniższego programu kiedy stan na lini PIND.1 się nie zmienia program potrafi mi wyskoczyć do etykiety Starter ? Programik jest przykładowy ale sposób jego działania jest podobny jak programu głównego który sobie skleciłem.

    
    $regfile = "m8def.dat"
    $crystal = 12000000
    
    Config Pind.1 = Input
    Linia Alias Pind.1
    
    Dim zmienna As String * 10
    Enable Interrupts
    
    Do
    Starter:
    Cls
    Gosub Obsluga_lcd
    
    Dalej:
    Wait 5
    zmienna="Dalej_1"
    Gosub Sprawdzenie
    
    Dalej_1:
    Wait 5
    zmienna="Dalej"
    Gosub Sprawdzenie
    
    Loop
    End
    
    Obsluga_lcd:
    Lcd "Poczatek"
    Return
    
    Sprawdzenie:
    If Linia = 1 Then 
     Lcd "jest"
     Gosub Dalej
    Else
     Lcd "nie ma"
     Select Case zmienna
      Case "Dalej_1" : Gosub Dalej_1
      Case "Dalej" : Gosub Dalej
     End Select
    End if
    Return
    


    Pozdrawiam i z góry dziękuję za każde info.
  • REKLAMA
  • #2 6621960
    ZbeeGin
    Poziom 39  
    wilkolaski napisał:
    1. Pętla DO LOOP. Czy musi być użyta zawsze w programie i co powinno być objęte ta pętla ?

    Nie trzeba używać DO..LOOP. Wtedy program będzie jednoprzebiegowy: uruchomi się i zakończy. I teraz od Ciebie zależy czy zakończy się poprawnie czy też przeleci przez to co nie powinien np. podprogramy, czy dane. Dlatego zawsze należy wskazać koniec programu poprzez END lub STOP jak korzystać będziesz z przerwań.

    wilkolaski napisał:
    2. WachDog wbudowany w ATMEGA 8. Jak jest ustawiony fabrycznie i w jaki sposób objawia się jego działanie kiedy jest uruchomiony tzn kiedy się włącza i co robi ?

    Watchdog w Mega8 nie jest uruchomiony domyślnie, o ile nie zmieniłeś stanu WDTON w fuse-bits. Jak będzie włączony - czy przez program czy przez WDTON - to zacznie zliczać, jak się przeliczy i nie doczeka się wyzerowania zresetuje procesor, a program uruchomi sie od początku.
    Reszta info w helpie i w nocie katalogowej.

    wilkolaski napisał:
    3. Które polecenie skoku lepiej używać GOTO czy GOSUB przy założeniu że nie potrzebuje powrócić po wykonaniu skoku ?

    ŻADNE z nich. Tak konstruuj program byś nie musiał po nim skakać.

    wilkolaski napisał:
    4. Czy wielokrotne skoki GOSUB w różne miejsca programu bez powrotów mogą w którymś momencie spowodować błędne działanie programu ? Chodzi o odkładanie na stosie adresu powrotu który nie będzie wykorzystywany.

    Jak najbardziej. Jeśli tak robisz to zastanów się czy dalej chcesz pisać programy.

    wilkolaski napisał:
    5. Dlaczego czasami po dłuższym działaniu poniższego programu kiedy stan na lini PIND.1 się nie zmienia program potrafi mi wyskoczyć do etykiety Starter?

    Patrz odpowiedź na pkt. 4.
REKLAMA