Fonksiyonel Bir Program Oluşturmak

Başlatan ceyhun.topcuoglu, 20 Nisan 2015, 19:17:30

ceyhun.topcuoglu

Merhabalar;
Bir programla uğraşmaktayım. Program o anki durum için sürekli  LCD ile bilgi vermesi gerekli. Dolayısıyle LCDOUT komutunu bir çok kez tekrarlamak zorunda kaldım. Bu da kullandığım Mikro Denetleyisinin kapasitesini aştı. Kullandığım denetleyici 16F877A MicroCode Sudio ile derlerken. 2122 words used. diyor ve birkaç hata listeliyor. Ne kadar çok programı uzatırsam o kadar çok hata çıkıyor. Derlenmiş olarak gösteriyor fakat hex' de bir değişme olmuyor.
Örnek Resim :

Lookup komutuyla bir karakter tablosu oluşturdum ve oradan X[0]..... X[15] tarzından ASCII karakterleri çağırarak LCD'ye bastım sonuç değişmedi programda bir azalma olmadı. Yazıları kısaltma gibi bir şansım yok, o yüzden Çok sayıda aynı şeyi tekrarlayan komut dizilerini Tek'e indirmeye çalışıyorum fakat bunu da başarabilmiş değilim.

Mesela bu şekilde alt programlarım var :
SetDegistir:
gosub menucikis

LCDOUT $FE,$80,">SETSURE:",#setgecikme,"ms"
        LCDOUT $FE,$C0," RestSre:",#resetgecikme,"ms"

    if degerP=0 then : setgecikme = setgecikme + 250
    if degern=0 then : setgecikme = setgecikme - 250
    if setgecikme> 65250 then : setgecikme=0
pause 200
toggle menuled

    if menusec=0 then
    while menusec=0
    wend
    hangisinde = 1
    goto menukontrol
   
endif
goto setdegistir


Bir başka benzer KOD :
ReSetDegistir:
gosub menucikis

LCDOUT $FE,$C0,">RestSre:",#resetgecikme,"ms"
        LCDOUT $FE,$80," SETSURE:",#setgecikme,"ms"
    if degerP=0 then : Resetgecikme = resetgecikme + 250
    if degern=0 then : resetgecikme = resetgecikme - 250
    if resetgecikme> 65250 then : resetgecikme=0
pause 200
toggle menuled

    if menusec=0 then
    while menusec=0
    wend
    hangisinde = 2
    goto menukontrol
   
endif
goto Resetdegistir


Bunları tek bir alt program haline getirmeye çalışıyorum. Kullandığım değişkenlerin hepsi WORD tipinde. Fonksiyonel programlama konusunda yardıma ihtiyacım var. Visual tabanlı bilgisayar dillerinde çok basit bir şey fakat iş Mikroişlemcilere gelince mantığım durmuş vaziyette. Teşekkürler, Selametle kalın.

ete

Verilenler hata mesajı değil ikaz mesajıdır. Pic program hafızası 2048 byte lık bloklar halindedir. Siz şu ana kadar 3 blok geçmişiniz. Son bir blok daha kalmış onuda geçerseniz hafıza kapasitesini aşmış olacaksınız.

Bence yazmaya devam edin ve sonuçta derleme yapılıyormu yapılmıyormu bakın. Şayet hafıza kapasitesini geçmiş iseniz o zaman çare düşünelim. Blok aşılması BRANCH isimli komutu ilgilendiren bir husus dur. Ben hiç kullanmadım şimdiye kadar .Şartlı dallanma komutu olan bu komutda  Şayet gidilecek etiket önceki banklarda kalmış ise tedbir almak gerekiyor. (bank seçimi yapmak gibi) . Değilse işin diğer kısmını derleyici halleder siz yazmaya devam edin.

Verdiğiniz örnek bir birinin aynı gibi gözüksede en azından değişkenler bazında farklıklıklar var. Bir ortak değişken gurubu kullanarak o satırlar teke düşürülebilir. Ama belkide daha fazla hafıza harcamak zorunda kalabiliriz. Bu nedenle programın bütününe bakarak teke düşürülecek satırları seçmekte yarar görürüm.

Ete

ceyhun.topcuoglu

Cevabınız için çok teşekkürler hocam. Her zaman sorduğum soruya en hızlı şekilde cevap vererek yardımlarınızı esirgemiyorsunuz.
Teşekkürler

Powered by EzPortal