7 segment 0-9 sayıcı program hatası

Başlatan slckurl, 17 Ocak 2011, 20:10:59

slckurl

Merhaba arkadaşlar. Tuşa bastığımızda 7 segment 1 artacak bir program yazdım ama programı micro code studio da derlediğimde 21 tane hata verdi. programı ekte veriyorum. Yardımcı olabilirseniz sevinirim.
B0 VAR BYTE

	MAIN:

	B0=0

	GOTO START

	START:

	IF B0>=10 THEN MAIN

	END IF

	IF PORTA.1 THEN SAY     
	GOTO START

	END IF

	SAY:
	
	B0=B0+1

	PAUSE 60000

	GOTO SHOW

	SHOW:

	IF B0=1 THEN BIR

	END IF

	IF B0=2 THEN IKI

	END IF

    IF B0=3 THEN UC

	END IF 

	IF B0=4 THEN DORT

	END IF

	IF B0=5 THEN BES

	END IF 

	IF B0=6 THEN ALTI

	END IF

	IF B0=7 THEN YEDI

	END IF 

	IF B0=8 THEN SEKIZ

	END IF

	IF B0=9 THEN DOKUZ

	END IF 

	GOTO START

	BIR:

	LOW PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	LOW PORTB.3
	LOW PORTB.4
	LOW PORTB.5
	LOW PORTB.6
	GOTO START
	
	IKI:

	HIGH PORTB.0
	HIGH PORTB.1
	LOW PORTB.2
	HIGH PORTB.3
	HIGH PORTB.4
	LOW PORTB.5
	HIGH PORTB.6
	GOTO START
	
	UC:

	HIGH PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	LOW PORTB.4
	LOW PORTB.5
	HIGH PORTB.6
	GOTO START
	
	DORT:
	
	LOW PORTB.0
	LOW PORTB.1
	LOW PORTB.2
	HIGH PORTB.3
	HIGH PORTB.4
	HIGH PORTB.5	
	LOW PORTB.6	
	GOTO START
	
	BES:
	
	HIGH PORTB.0
	LOW PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	LOW PORTB.4
	HIGH PORTB.5
	HIGH PORTB.6
	GOTO START
	
	ALTI:

	HIGH PORTB.0
	LOW PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	HIGH PORTB.4
	HIGH PORTB.5
	HIGH PORTB.6
	GOTO START	
	
	YEDI:

	HIGH PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	LOW PORTB.3
	LOW PORTB.4
	LOW PORTB.5
	LOW PORTB.6
	GOTO START
	
	SEKIZ:

	HIGH PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	HIGH PORTB.4
	HIGH PORTB.5
	HIGH PORTB.6
	GOTO START	
	
	DOKUZ:

	HIGH PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	LOW PORTB.4
	HIGH PORTB.5
	HIGH PORTB.6
	GOTO START
END

POWER

birde hata mesajlarını yazsaydın süper olacaktı ama yazmamışsın.bu haliylede yazım hataları var. else if gibi.
TB6BKG

slckurl

IF B0=1 THEN -  ıf without a matching endif

END IF  -syntax error

bu satırların hepsinde bu hataları veriyor. Nasıl düzeltebilirim acaba yardımcı olabilirmisiniz ?

dombilik

IF-THEN komutların hatalı..
THEN ibaresinden sonraki yönlendirmeler yapılmamış.
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

slckurl

#4
Pıc konusunda çok yeniyim o yüzden programı nasıl düzeltebileceğim hakkkında bilgi verebilirmisiniz. Şimdiden teşekkkür ederim. Ayrıca programı güncelledim en son halinde sadece end ıf lere syntax error veriyor. Onları nasıl düzeltebilirm

malpaslan1979

#5
Dostum bir şeyi merak ettim neden bu kadar tabiri caiz ise komut hamallığı yapıyorsun.

HIGH PORTB.0
   LOW PORTB.1
   HIGH PORTB.2
   HIGH PORTB.3
   LOW PORTB.4
   HIGH PORTB.5
   HIGH PORTB.6
   GOTO START


bunun yerine porta bir defada hex formatında sekiz bitlik yeni sayıyı yollasan diyorum. hayır böyle basit programlarda problem olmaz fakat ileriki dönemlerde bu komut ve satır müsrifliğin aleyhine işler diye düşünüyorum.

not: bu arada unutmadan yukarıdaki uzuuuun komut dizini yazmak için diyez # işaretini kullanıp  aradaki boşluğa yazarsanız daha dikkat çekici ve kullanışlı olur. yani mesaj yazarken program komutlarını ekleyecekseniz # işaretini kullanıp program komutlarını aradaki parantezin içerisine yazınız lütfen

slckurl

Teşekkür ederim dediğim gibi pic e yeni başladım bir ödevim için onun için pek fazla bilmiyorum komutları falan. Yazdığım programda end ıf lerde hata veriyor. Nasıl düzeltebilirim acaba yardımcı olabilirmisiniz ?

malpaslan1979

bak sana güzel bir abi tavsiyesi ete dersler diye arattır bulursun sayın erol hocamızın picbasic dersleri var. istersen farklı yayınevlerini kitapları var. bence onları incele biz ne yaparsak yapalım kitap gibi olmaz. bak yeni başlıyorsan birşey çok önemli elektronikçi bence sadece havya lehim ölçü aleti ile iç içe olan adam olmamalıdır okumalıdır da kağıt ve kalem en önemli dostların olsun.

bu arada kendi adıma söylemem gerek ki basicden anlamam.

bir diğer konu şu program yazarken şema kısmı da önemlidir. yani hangi bacağa neyi bağlayacaksın hangi programlanabilir entegreyi kullanacaksın

slckurl

Ete hocanın derslerini okudum ve bu kodu öyle yazdım. Microcode studioda kodu çalıştırdığımda sadece end ıf lerde hata veriyor. Yardımcı olabilecek birileri varsa memnun olurum..

malpaslan1979

#9
Hala picbasic bildiğimi söyleyemem peki nereden buldum bu komutları gökten  zembille inmedi tabi kitabın birisinin ekindeki cdromda vardı umarım buradaki komutlar işine yarar mantığı anlaman açısından bir konuyu atlamışsın hangi kontrolörcüyü kullanmak istiyorsun belirtmen kafandaki şemayı ise çizmen gerekirdi neyse umarım bu komutlar yol gösterici olur senin için

bu arada bir konunun altının çizmem lazım bir nokta dikkatimizden kaçmış bu komut dizimi sıra ile buton olmadan 0-9 sayıcıdır işin başına buton okutma senin yeteneğine kalmış

'---------------------------------------------------------
'Programın adı: Uyg_7_6.bas
'Programın işlevi: 7 segment display'de 0'dan 9'a kadar ondalık sayıları 1sn aralıklarla gösterir. 
'Tarih:11/07/2007	Uyarlama:1.00		Derleyici:PBP
'--------------Tanımlamalar-------------------------------
@ DEVICE pic16F877A, XT_OSC		' 4 MHz kristal osilatör 
@ DEVICE pic16F877A, WDT_OFF		' Watchdog Timer pasif
@ DEVICE pic16F877A, PWRT_ON		' Power-On Timer  aktif
@ DEVICE pic16F877A, BOD_OFF		' Brown-Out Detect kapalı
@ DEVICE pic16F877A, LVP_OFF		' Düşük ger. programlama yok
@ DEVICE pic16F877A, CPD_OFF		' Data belleği koruması yok
@ DEVICE pic16F877A, PROTECT_OFF	' Program kodu koruması yok

B1 var  byte
B0 var  byte
TRISB = %00000000	' PortB'nin tüm uçları çıkış
TRISA = %11111101	' RA1 çıkış diğerleri giriş
ADCON1 = 7		' PIC16F877A'nın A port'u dijital I/O

Dongu:	
For B1 = 0 To 9	' 0'dan 9'a say B1'e aktar.
B0 = B1		' Sayıyı çevrim tablosuna aktar.
CALL Cevir	' Sayıyı segment bilgisine çevir
PortB = B0	' Segment bilgisini display'a gönder.
PortA = %00000010	' İlk dijiti aktif yap.
Pause 1000	' 7 segment'te sayıyı 1 sn göster.
Next B1			' Sonraki sayı.
Goto Dongu		' Göstermeyi devamlı yap.

' B0'daki binary sayıyı LED'lerde gösterilecek segment bilgisine çeviren alt program.
Cevir: 
Lookup B0, [$3F,$06,$5B,$4F,$66,$6D,$7C,$07,$7F,$6F],B0
Return
;------------------------------------------------------------

dombilik

MAIN:
	B0=0
START:
	IF B0>=10 THEN MAIN
	IF PORTA.1=1 THEN SAY   
	GOTO START
SAY:
	B0=B0+1
	PAUSE 60000
SHOW:
	IF B0=1 THEN BIR
	IF B0=2 THEN IKI
	IF B0=3 THEN UC
	IF B0=4 THEN DORT
	IF B0=5 THEN BES
	IF B0=6 THEN ALTI
	IF B0=7 THEN YEDI
	IF B0=8 THEN SEKIZ
	IF B0=9 THEN DOKUZ
	GOTO START
BIR:
	LOW PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	LOW PORTB.3
	LOW PORTB.4
	LOW PORTB.5
	LOW PORTB.6
	GOTO START
IKI:
	HIGH PORTB.0
	HIGH PORTB.1
	LOW PORTB.2
	HIGH PORTB.3
	HIGH PORTB.4
	LOW PORTB.5
	HIGH PORTB.6
	GOTO START
UC:
	HIGH PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	LOW PORTB.4
	LOW PORTB.5
	HIGH PORTB.6
	GOTO START
DORT:
	LOW PORTB.0
	LOW PORTB.1
	LOW PORTB.2
	HIGH PORTB.3
	HIGH PORTB.4
	HIGH PORTB.5	
	LOW PORTB.6	
	GOTO START
BES:
	HIGH PORTB.0
	LOW PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	LOW PORTB.4
	HIGH PORTB.5
	HIGH PORTB.6
	GOTO START
ALTI:
	HIGH PORTB.0
	LOW PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	HIGH PORTB.4
	HIGH PORTB.5
	HIGH PORTB.6
	GOTO START	
YEDI:
	HIGH PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	LOW PORTB.3
	LOW PORTB.4
	LOW PORTB.5
	LOW PORTB.6
	GOTO START
SEKIZ:
	HIGH PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	HIGH PORTB.4
	HIGH PORTB.5
	HIGH PORTB.6
	GOTO START	
DOKUZ:
	HIGH PORTB.0
	HIGH PORTB.1
	HIGH PORTB.2
	HIGH PORTB.3
	LOW PORTB.4
	HIGH PORTB.5
	HIGH PORTB.6
	GOTO START
END

Birde yukarıdaki şekilde dene hata vermeyecektir.
PAUSE ile koyduğun zaman süresi sana sıkıntı yaratacaktır.
Arkadaşlarında bahsettiği gibi çok daha kısa ve öz olabilirdi.
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40