if endif komutları

Başlatan erdogan2734, 27 Eylül 2011, 17:15:33

erdogan2734

    Arkadaşlar basic programını bayadır kullanıyorum. Bugun bir program yapayım dedim ancak ıf ve endıf komutlarında sorun yasıyorum nerede hata yapıyorum programa bakarmısınız?
'****************************************************************
'*  Name    : dnm2 .BAS                                      *
'*  Author  : [erdogan]                    *
'*  Notice  : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 27.09.2011                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

TRISA=255
symbol tus=PORTA.4

PORTB=0

BASLA:
        if tus=0  then gosub Flash
        else gosub flash2
        endif
        pause 250
        return

    FLASH:
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   100
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   100
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   100
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   100
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   300
           
goto flash
    flash2:
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            pause   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   100

goto flash2
END
 

Bildiğim tek şey henüz hiç bir şey bilmediğim...

satilla

sorunu ayzsanız daha iyi olurdu
derleyicide büyük küçük harf ayrımı olabilir
programınızda Flash'a git denmiş ama FLASH adında bir etiket görüyorum

erdogan2734

kopyalarken öyle oldu normalde etıketler bır bırını goruyor tamamlıyor yanı...
Sorunum derleme yaptıgımda sıstem su hatayı werıyor...

C:\USERS\TEVFIK\DESKTOP\ERDGN\YP\TUS DNM 2\UNTITLED.PBP ERROR Line 19: Syntax error.
C:\USERS\TEVFIK\DESKTOP\ERDGN\YP\TUS DNM 2\UNTITLED.PBP ERROR Line 20: ENDIF without a matching IF..THEN.
Bildiğim tek şey henüz hiç bir şey bilmediğim...

-Hasan-

if tus=0  then gosub Flash
else gosub flash2
endif


Böyle olması lazım:

if tus=0 then
gosub Flash
else 
gosub flash2
endif

desman

#4
TRISB=%00000000
Koymamışsınız yani portb çıkış olarak ayarlanmamış.
Ondan olabilir.,

TRISA=1
TRISB=0
PORTA=0
PORTB=0
symbol tus=PORTA.4
BASLA:
if tus=0  then 
goto Flash
else 
goto flash2
endif
pause 250
GOTO BASLA

    FLASH:
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   100
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   100
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   100
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   100
            PORTB.0=1
            PAUSE   100
            PORTB.0=0
            PAUSE   300
           
goto BASLA
    flash2:
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            pause   30
            PORTB.1=1
            PAUSE   30
            PORTB.1=0
            PAUSE   100

goto BASLA
END

Dneyin bakalım.Ben derledim bi sorun yok.
A freshman at YTU

erdogan2734

Hasan bey dediğiniz gibi de yaptım anck yine aynı sonuç acaba programda mı bir sıkıntı var siz bunu bi derlemeye çalışırmısınız acaba sizde bir sıkıntı vercekmi? Eger sorun olmazsa programı kaldırıp tekrardan kurayım...
Bildiğim tek şey henüz hiç bir şey bilmediğim...

-Hasan-

Hocam ben de oluyor. Micro Code Studio programında PBP ' nin yerini doğru gösterdiğinizden eminmisiniz?

erdogan2734

hasan bey siz hangi sürümü kullanıyorsunuz acaba ben kaldırayım bu programı yenisini kurayım?
Bildiğim tek şey henüz hiç bir şey bilmediğim...

desman

Sizin verdiğiniz koddaki
GOSUB
Komutunu
GOTO
yaptım sorunsuz derledi.
A freshman at YTU

-Hasan-

PBP 2.47
Micro Code Sdutio Plus 2.3.0.0

kullanıyorum.

erdogan2734

dessman sizinki gibi yaptım oldu hayret :) tesekkur ederım...
Bildiğim tek şey henüz hiç bir şey bilmediğim...

desman

Neden şaşırdınız anlamadım ama, bişey değil hocam :)
A freshman at YTU

erdogan2734

 okuldayken tezımde gosub kullanmıstım ıf ıle beraber hıc sıkıntı wermemıstı sımdı nasıl oldu ona hayret ettım..
Bildiğim tek şey henüz hiç bir şey bilmediğim...

ete

#13
Desman senin önemli bir hatanı düzeltti ama sen farkında değilsin. O nedenle açıklamakta yarar görüyorum.

Basla satırından sonra yer alan tuş kontrolü hatalı yazılmış. Else kullanılan if komutlarında THEN den sonra bir şey yazılmaz.
Yani şart doğru ise IF...THEN satırından sonraki satıra yazılır. Altına ELSE konur ve Else den sonrada bir şey yazılmaz.
Daha sonrada şartın yanlış olduğu komutlar ELse satırından sonra yazılıp Endif ile komut dizisi kapatılır.

Bu komutlardan sonra yer alan RETURN komutu orada yanlış yazılmış. Zira bir satırın sonuna RETURN yazdınmı o blok etiketine GOSUB ile gelmen gerekir. Basla etiketine gosub ile gelmediğine göre RETURN olmaması gerekiyor idi ve Desman bunu düzeltti.
Return yerine Goto Basla demen yeterli oluyor.

Ayrıca Flash alt programlarına gosub ile gidip Goto ile tekrar flash etiketine dönüyorsunki buda yanlış Gosub ile gidilen yerden bir şekilde RETURN ile dönülmsi gerekir. Goto ile gidilen yerden başka bir yere gidilecek ise yine Goto ile dönülmesi gerekir .

Bu programda eksik şeyler var. Mesela
- Sigorta komutları yok. Bu nedenle program hangi işlemci için yazılmış belli değil.
- Define OSC 4 (veya başka bir frekans değeri) şeklinde verilen çalışma frekansını belirleyen komut yok.
- PortB ye ait TRISB registerine değer verilmemiş.
Tabiiki işlemci bekirlenirse ilave komutlarda gerekebilir. Örneğin işlemci 16F628 ise programa birde CMCON=7 komutunu ilave etmek gerekir.

Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

erdogan2734

   Ete hocam basic dilini sizin derslerinizden öğrendim... Ama demekki pek iyi öğrenememişim. Sizin yazdığınız her yorum bana onur verir hocam dikkate alıcam...
Bildiğim tek şey henüz hiç bir şey bilmediğim...