BİR PROGRAMDAKİ KOMUT SAYISI ?

Başlatan victor, 21 Şubat 2005, 12:13:33

victor

PİC 16F84 'e picbasicte yazılacak bir programda kullanılacak
komut sayısı maximum nedir ?kaç satır yazılabilir?veya belirli bir sınırlaması mutlaka vardır ama bu sınır kaçtan aşağı değildir.
yazılan program karmaşık birşey değil
ardarda "portb=%00011101" ve arkasından "pause 150" komutu geliyor
sürekli farklı kombinasyonlardaki verileri portb'den elde etmek istiyorum.
programı az çok yazdım kodlarda birtaskım değişiklikler yapacağım.
programda alt program sayısı 40 civarı
programda satır sayısı 950 civarı (daha tamalanmamış hali)
ancak
programı derleyip pic'e yüklediğimde üçüncü alt program başlayacakken
tekrar başa dönüp birinci altprogramdan devam ediyor.(kısır döngü olayı)
bilmediğim birşey mi yoksa gözümden kaçan bir şey mi var.bilmiyorum
belkide bir sınırlama vardır diye düşünüyorum
haliyle bu program ne programı diye düşünebilisiniz?
bu program hani 7 veya 8 adet ledle yapılan bir saat var
cihaz döndükçe havada bir saat beliriyor.onun gibi birşey ben saat değilde yazı yazdırmak gibi bir işe kalkıştım.
ancak program daha tamamlanmadı.düzenek şu an için yok
fakat olsa bile yazının ilk iki harfi görünür.
programı isterseniz çok uzun olduğu için bir kısmını gönderebilirim
verebileceğiniz bilgi veya tavsiyeler varmı ?
teşekkür ederim
kolay gelsin...

( gerçi başka yollar  var ama ;devre içerisinde pic sayısını arttırmak istemiyorum)

kayatech

selam arkadaşım. 16f84 komut sınırı diye bir olay yok. PICBASIC PRO komutlarının hepsini kullana bilirsin fakat anladığım kadarıyle programda çok fazla pause komutu kullanmışsın pause komutu için bir alt program yap ve şunları yaz

Bekle:
pause SURE
return

sure eğer 255 ms den büyük ise komutu şöyle değiştirebilirsin

pause SURE*10 veya *100 gibi degerler vererek zamanı uzatabilirsin
ayrıca çıkışları PORTB=%11000000 yerine portb=3 yazabilirsin. eğer artan
sırada bir çıkışın varsa mesela kısa bir program

trisb=%00000000
sure var byte
deger var byte
sure=0
deger=0
SAYIM VAR WORD


basla:
SAYIM=SAYIM+1

IF SAYIM< 100 THEN SURE=100     '10*100 MS NE ALDINDA SURE 100 MS
IF SAYIM>=100 THEN SURE=50      
CIKIS=CIKIS+3                            'ÇIKIŞ DEĞERLERİNİ 3 ER ARTIR

IF CIKIS>=255 THEN CIKIS=255    '255  DE DUR

gosub bekle


GOSUB CIKIS

PAUSE 10

goto basla






BEKLET:

PAUSE SURE
RETURN



CIKIS:

portb=DEGER

                          ' veya *1 veya çarpan katları ile tek bir alt program ile
                          ' halledebilirsin
return


TAMAMEN ORNEKTIR BU GIBI KISALTMALAR İLE PROGRAM DAHADA KÜÇÜLECEKTİR

ete

Program içinde satır sayısı kısıtlaması olmaması gerekir. Kısıtlama yalnızca kullandığın PIC'in program hafızasındadır. Dolayısıyla Basic kullandığın Pic'e bakar ve derleme esnasında rpogram hafızasını geçip geçmediğini kontrol eder.

Örnek verecek olur ise 1 adet 16F84 içine 1024 Word yazabilirsin. Bunun anlamı şudur. Pic 14 bit olduğundan 8+6 bit bir word sayılıyor.
1 adet 16F628 'e 2044 word yazabilirsin. 1 adet 16F877'ye  8192 adet word yazabilirsin.
Şayet yazdığın program pic program hafızasını geçer ise altta exceed memory limit şeklinde bir hata mesajı alacaksın.

Senin programında muhtemelen gosublar çok fazla kullandın ve bunlar arasında da geçir var ise return yeri bulunamamkta ve program sonsuz döngüye girmektedir. Programı görmeden daha fazlasını söylemk mümkün değil.

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

victor

ETE
TAM DEDİĞİN GİBİ
PROGRAMDA FAZLA SAYIDA GOSUB KULLANDIM
VE PROGRAM İLK 2 ALTPROGRAMI ÇALIŞTIRIYOR
DAHA SONRA KISIR DÖNGÜYE GİRİYOR
BEN PROGRAMI EN YAKIN ZAMANDA GÖNDERİCEM

Veli B.

register içeriklerini görebiliyorsan
yığın kaydedicisine bir bak.
sanırım 8 seviyeden fazla yığın oluştuğu için program sorun çıkartıyor.

victor

arkadaşlar programı copy / paste yapayım mı ?
sizin gibi ustalardan yazdığım bu basit programı kıskandığımı düşünmeyin sakın
çok basit bir program ama
çok uzun bir program.
bir kısmını gönderiyorum
geri kalan boşluklar ( altprogramlar ) doldurulabilir.

TRISB = 0
PORTB = 0
SURE CON 150
PROG:
GOSUB HARFA
GOSUB HARFB
GOSUB HARFc
GOSUB HARFD
GOSUB HARFE
GOSUB HARFF
GOSUB HARFG
GOSUB HARFG2
GOSUB HARFH
GOSUB HARFI
GOSUB HARFI2
GOSUB HARFJ
GOSUB HARFK
GOSUB HARFL
GOSUB HARFM
GOSUB HARFN
GOSUB HARFO
GOSUB HARFO2
GOSUB HARFP
GOSUB HARFR
GOSUB HARFS
GOSUB HARFS2
GOSUB HARFY
GOSUB HARFU
GOSUB HARFU2
GOSUB HARFV
GOSUB HARFY
GOSUB HARFZ
GOTO PROG

HARFA:
'=============================
'=== A HARFİ   
'=============================
PORTB = %00011000
GOSUB GECIKME
PORTB = %00100100
GOSUB GECIKME
PORTB = %01000010
GOSUB GECIKME
PORTB = %10000001
GOSUB GECIKME
PORTB = %11111111
GOSUB GECIKME
PORTB = %10000001
GOSUB GECIKME
PORTB = %10000001
GOSUB GECIKME
PORTB = %00000000
GOSUB GECIKME
return
HARFB:
'=============================
'=== B HARFİ 
'=============================
PORTB = %11111110
GOSUB GECIKME
PORTB = %10000001
GOSUB GECIKME
PORTB = %10000001
GOSUB GECIKME
PORTB = %11111110
GOSUB GECIKME
PORTB = %10000001
GOSUB GECIKME
PORTB = %10000001
GOSUB GECIKME
PORTB = %11111110
GOSUB GECIKME
PORTB = %00000000
GOSUB GECIKME
RETURN
..
...
...
...
.
.
.
GECIKME:
pause SURE
RETURN


PROGRAM BU ŞEKİLDE AKIP GİTMEKTE
BU PROGRAM ÇALIŞIYOR.
AMA DEDİĞİM GİBİ İLK İKİ ALT PROGRAMDAN SONRA
KISIR DÖNGÜYE GİRİYOR
PİC'E YÜKLERKEN HERHANGİ BİR HATA YOK
DERLERKENDE BİR HATA YOK
FAKAT DEDİĞİM GİBİ BİR SORUN VAR

KABUL EDİYORUM
ÇOK ACEMİCE YAZILMIŞ BİR PROGRAM AMA
YENİ BAŞLADIM
BASİT PROGRAMLAR YAZMAYA ÇALIŞIYORUM
BU KONU HAKKINDA BİR FİKRİ OLAN VAR MI ?
YARDIMCI OLURSANIZ SEVİNİRİM...

mmengi

Görünürde stack taşması yok gibi ama sen yinede bu programı derleyip hex ini isite bir dene orda stack ları izleyip sorun varmı yokmu görebilirsin.

kayatech

slm. programda bir hata bende göremedim. ama pic16f84 yerine birde 16f628 ile bir dene. Bu tip hatalar f84 te bazen olabiliyor. birde programın en sonuna  END konmutunu eklemeyi ve artı ile eksi arasına 100nf kondansatör atmayı unutma.

victor

kayatech
tam dediğin gibi
başka bir pic'te kullanmak daha mantıklı gibi gözüküyor
şu an elimde f84 var
bir arkadaşıma gönderip denettirmem gerek
onda 628 vardı yanlış hatırlamıyorsam
bildiğim kadarıyla onun hafızası daha yüksek

aslında 628 kullanmak daha mantıklı
denettirdikten sonra
olumlu veya olumsuz olan sonucu
sizinle paylaşacağım.
belki bu durum diğer başka kişilerinde başına gelebilir
başkalarınada bir emsal oluşturabilir.
teşekkürler