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

[ATmega32][BASCOM] Prośba o sprawdzenie kodu.

bar_bur 20 Maj 2010 22:28 1768 5
REKLAMA
  • #1 8100331
    bar_bur
    Poziom 9  
    Witam!
    Mam problem z tym programem. Nie chce się skompilować. Wywala mi trzy błędy:

    123 (linia: 0) - END IF expected , in File:
    7 (linia: 0 ) - IF THAN expected[92], in File:
    130 (linie: 92 i 88) - niewłaściwa/y numer(ilość) parametrów. Ilość parametów musi być[ 1], in File: C:\program\prog.bas

    Możecie mi pomóc? Z góry wielkie dzięki za wszelką pomoc!!!

    inventco.eu - post edytowałem, program umieszczamy w znacznikach code

    
    
       $crystal = 8000000
       $regfile = "m32def.dat"
    
       Led1 Alias Portc.1
       Led2 Alias Portc.2
       S1 Alias Pinb.0
       S2 Alias Pinb.1
       S3 Alias Pinb.2
       Pp Alias Pinc.7
       Lp Alias Pinc.6
       Lt Alias Pinc.5
       Pt Alias Pinc.4
       A1 Alias Portd.0
       A2 Alias Portd.1
       B1 Alias Portd.2
       B2 Alias Portd.3
       Ena Alias Portd.4
       Enb Alias Portd.5
    
       Ddra = &B00000011
       Ddrd = &B00111111
       Ddrb = &B00000000
       Ddrc = &B00000110
    
    
       Portd = &B00000110
       Porta = &B00000000
       Portc = &B00000000
       Portb = &B11111111
    
       'Dekleracja funkcji i procedur
       Declare Function Sharp_odczyt() As Word
       Declare Sub L_do_przodu(byval Szybkosc As Byte)
       Declare Sub L_do_tylu(byval Szybkosc As Byte)
       Declare Sub P_do_przodu(byval Szybkosc As Byte)
       Declare Sub P_do_tylu(byval Szybkosc As Byte)
       Declare Sub L_stop
       Declare Sub P_stop
    
       'Konfiguracja przetwornika analogowo-cyfrowego
       Config Adc = Single , Prescaler = Auto , Reference = Avcc
       Start Adc
    
       'Konfiguracja PWM dla silnikow
       Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
    
       'Konfiguracja timera dla programu, przerwanie co ~2ms
       Config Timer0 = Timer , Prescale = 64
       On Timer0 Przerwanie
    
       Enable Interrupts
    
       'Deklaracja zmiennych
       Dim Czas As Byte
       Dim Czas2 As Byte
       Dim Linie As Byte
       Dim Namierzony_sharp1 As Bit
       Dim Namierzony_sharp2 As Bit
       Dim Stan As Byte
       Dim Obrot As Word
    
    
       'Program glowny
    
       Linie = 0
       Led1 = 1
       Wait 1
       Led1 = 0
       Bitwait S1 , Reset
       Led1 = 0
       Wait 5
       Enable Timer0
    
    
       'Petla glowna
    
       Do
          If S1 = 0 Then
             Stop Timer0
             Call L_stop
             Call P_stop
             Do
             Loop
          End If
    
    
          If Czas2 = 12 Then
             If Sharp_odczyt(0) > 145 Then
                Namierzony_sharp1 = 1
             Else
                Namierzony_sharp1 = 0
                   If Sharp_odczyt(1) > 145 Then
                Namierzony_sharp2 = 1
             Else
                Namierzony_sharp2 = 0
                End If
             End If
          End If
    
          If Czas2 = 13 Then
             Czas2 = 0
          End If
    
          Select Case Stan
          Case 1
          Gosub Pucieczka
          Case 2
          Gosub Tucieczka
          Case 0
             If Namierzony_sharp1 = 1 Then
                Gosub Gon
             Else
                If Namierzony_sharp2 = 1 Then
                Gosub Gon1
                Else
                Gosub Szukaj
                End If
             End If
          End Select
    
    
       Loop
    
       Przerwanie:
          Incr Obrot
          Incr Czas2
          If Czas = 0 Then
             Czas = 1
          End If
          Decr Czas
          Linie.0 = Lp
          Linie.1 = Lt
          Linie.2 = Pp
          Linie.3 = Pt
    
          Select Case Linie
          Case 14
             Stan = 1
             Czas = 250
             Call P_do_tylu(255)
             Call L_do_tylu(255)
          Case 13
             Stan = 2
             Czas = 250
             Call P_do_przodu(255)
             Call L_do_przodu(255)
          Case 11
             Stan = 1
             Czas = 250
             Call P_do_tylu(255)
             Call L_do_tylu(255)
          Case 7
             Stan = 2
             Czas = 250
             Call P_do_przodu(255)
             Call L_do_przodu(255)
          Case 5
             Stan = 2
             Czas = 250
             Call P_do_przodu(255)
             Call L_do_przodu(255)
          Case 10
             Stan = 1
             Czas = 250
             Call P_do_tylu(255)
             Call L_do_tylu(255)
          Case 12
             Stan = 3
             Call P_do_przodu(255)
             Call L_do_tylu(255)
          Case 3
             Stan = 3
             Call P_do_tylu(255)
             Call L_do_przodu(255)
          End Select
       Return
    
       Szukaj:
          Led1 = 1
          If Obrot > 800 Then
          Call P_do_przodu(65)
          Call L_do_tylu(65)
          Else
          Call P_do_przodu(90)
          Call L_do_przodu(90)
          End If
          If Obrot = 2000 Then
          Obrot = 0
          End If
       Return
    
       Gon:
          Call P_do_przodu(255)
          Call L_do_przodu(255)
          Led1 = 0
          Obrot = 0
       Return
       Gon1:
          Call P_do_tylu(255)
          Call L_do_tylu(255)
          Led1 = 0
          Obrot = 0
       Return
    
       Pucieczka:
       If Czas > 0 And Czas < 128 Then
       Call P_do_tylu(255)
       Call L_do_przodu(255)
       End If
       If Czas > 129 Then
       Call P_do_tylu(255)
       Call L_do_tylu(255)
       End If
       If Czas = 0 Then
       Stan = 0
       End If
       Obrot = 0
       Return
    
    
       Tucieczka:
       If Czas > 0 Then
       Call P_do_przodu(255)
       Call L_do_przodu(255)
       Else
       Stan = 0
       End If
       Obrot = 0
       Return
    
    
       Function Sharp_odczyt(byval Kanal As Byte) As Word
       Stop Timer0
       Sharp_odczyt = Getadc(kanal)
       Start Timer0
       End Function
    
       Sub P_do_przodu(byval Szybkosc As Byte)
       A1 = 1
       A2 = 0
       Pwm1a = Szybkosc
       End Sub
    
       Sub P_do_tylu(byval Szybkosc As Byte)
       A1 = 0
       A2 = 1
       Pwm1a = Szybkosc
       End Sub
    
       Sub L_do_przodu(byval Szybkosc As Byte)
       B1 = 1
       B2 = 0
       Pwm1b = Szybkosc
       End Sub
    
       Sub L_do_tylu(byval Szybkosc As Byte)
       B1 = 0
       B2 = 1
       Pwm1b = Szybkosc
       End Sub
    
       Sub P_stop
       A1 = 0
       A2 = 0
       End Sub
    
       Sub L_stop
       B1 = 0
       B2 = 0
       End Sub
    
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #3 8104779
    wicy
    Poziom 22  
    f S1 = 0 Then
             Stop Timer0
             Call L_stop
             Call P_stop
             Do
             Loop
          End If 

    No i tu program zakończy swoje działanie po spełnieniu warunku S1=0. Nie wyjdzie z pętli Do...Loop do pętli głównej.

    Aha... i jeszcze Case deklaruje się z dwukropkiem
    Select Case Stan
          Case 1: Gosub Pucieczka
          Case 2: Gosub Tucieczka
          Case 0:
             If Namierzony_sharp1 = 1 Then
                Gosub Gon
             Else
                If Namierzony_sharp2 = 1 Then
                Gosub Gon1
                Else
                Gosub Szukaj
                End If
             End If
          End Select 
  • REKLAMA
  • #4 8108067
    bar_bur
    Poziom 9  
    Witam!
    Dzięki za odpowiedzi. Już kompiluje, ale jak zawsze trzeba jeszcze troche poprawić aby działało dobrze. Jeszcze mam takie pytanie nie związane z kodem. O co chodzi z tym narastającym napięciem przy kwarcu?
    Co jest tu nie tak?
    Stan =(linia_pt * 1) +(linia_pp * 2) +(linia_lp * 4) +(linia_lt * 8)
    
  • REKLAMA
  • Pomocny post
    #5 8110423
    LED5W
    Poziom 34  
    bar_bur napisał:
    Jeszcze mam takie pytanie nie związane z kodem. O co chodzi z tym narastającym napięciem przy kwarcu?
    Nie łapię o co chodzi.

    bar_bur napisał:
    Co jest tu nie tak?
    Stan =(linia_pt * 1) +(linia_pp * 2) +(linia_lp * 4) +(linia_lt * 8)
    
    Bascom akceptuje jedynie pojedyncze działania.
  • #6 8111625
    bar_bur
    Poziom 9  
    Chodziło mi o SUT1 i SUT0
    Dzięki za pomoc!!!!
REKLAMA