Goto ve Gosub komutları

Başlatan oyhan, 23 Şubat 2005, 12:19:09

oyhan

Bu dallanma komutları hakkında neler söyleyebilirsiniz. Herhangi bir şekilde labellar arasındaki dallanmalarda nelere dikkat edilmeli? Kaç kez bu komutlar kullanılabilir. Yada içiçe nasıl kullanılabilirler? Yazdığım bir kodda işlemci asimetrik olarak kendini resetliyor. Sanırım bu türden bir hata yapıyorum. Kodu biraz toparladım düzeldi gibi ama henüz emin değilim. Kullandığım xtal 20 MHz lik. Kristallerin hızlarının artmaları durumlarında devre üzerinde nelere dikkat edilmeli hangi frekanslarda ne gibi tedbirler alınmalı sizce? Bu konularda aydınlatmanızı bekliyor Saygılar sunuyorum.
BİRLİKTEN KUVVET DOĞAR:

Salih

Mikroişlemcilerde Goto; Jmp(Atla) komutuna , Gosub 'da Call(Çağrı) komutuna karşılık gelir. Goto komutunda işlemci sadece belirtilen adresi Pc(Program counter) yükler, dolayısıyla işlemci yeni adrese dallanır. Geri dönüş bilgisi ve işlemi yoktur. Gosub'da ise işlemci bulunulan adresi Yığın(Stack) denilen bir bellek bölgesine FILO (İlk giren son çıkar) mantığını kullanarak saklar. Bundan dolayı programda, sadece return yazarak mikroişlemciyi çağrıldığı adrese gönderebiliriz. İç içe çağrı kapasitesi tamamen yığın bellek kapasitesine bağlıdır. Bu bilgiye kullandığınız Pic'in veri katolağından ulaşabilirsiniz.
Kolay gelsin.

Veli B.

Bir küçük ekleme;
Yığın kaydedicisi ni hesaplarken kesmelerinde seviyeyi doldurduğunu göz önüne alın.
sadece içiçe dallanmalar değil, kesmelerle hesaplayın.

oyhan

Peki interrupt kullanılan bir programda basic programlarında zamanı nasıl hesaplayacağız önceden mlap similatörü ile zaman kavramını dilediğim gibi kontrol edip bunun kontrolünüde similatör ile yapıyordum. Şimdi proton basic ile yapamıyorum. Ayrıca microde stud... gibi bir real time debuging de yapılamıyor. Basicde kodların ve aldığı sürelerin bir karşılığı (zaman olarak) varmı? Umarım ifadem net ve açık olmuştur.
İyi çalışmalar...
BİRLİKTEN KUVVET DOĞAR:

oyhan

Şöyle Sorsam iyi olacak sanırım. Eğer GoSuB ile her hangi bir alt programa gidip geri dönmeden işlem yapsam mesela GoTo gibi bir komut ile programı başka etiketllere yönlkendirsem hata yapmış olurmuyum. Gosub ile geldiğim yere mutlaka dönmek zorundamıyım. Yazmış olduğum kod içerisinde butür bir mantık kullandım. Yani GoSuB ile alt programlara dallanıp daha sonra GoTo ile  yola devam ettim. Seyrek de olsa bazen resetleniyor işlemci acaba bir alakası varmı. Resetlenmede şöyle bir ifade kullanabilirim. Asimetrik düzensiz zamanlarda gerçekleşiyor. Belli bir anını yakalayamadım. Yani rastgele bir anda butonlar ile oynarken resetleniyor işlemci. (Pic Mcu)  bana bu konuda yardımcı olursanız çok memnun olurum. Gosubtan sonrasında bir değer geri döndürmeyeceksem ve goto ile başka yerlere dallanır ise program ne olur?
İyi çalışmalar
BİRLİKTEN KUVVET DOĞAR:

kayatech

slm arkadaşım. Seninde aynen söylediğin gibi  GOSUB komutunu kullandıktan sonra program bu etikete yönlenir ve return komutunu bekler
sen eğer bu return komutunu es geçer ve programı başka bir satıra dallandırırsan program sapıtmaya başlar. ilk RETURN komutunu gördüğü yerde çağrı yaptığın ilk satıra geri döner. bu gibi durumlarda en iyisi GOTO kullanmak veya ESAS olan işlemler için GOSUB komutunu kullanmak. EĞER çok kısa bir bir program parçası ise tekrar tekrar yazman bence daha akıl karı ve daha sağlam olur.


taxxin2002

GOTO İLE BİR LABELE DALLANIRSIN
GOSUB İLE İSE GİDER RETURN KOMUTU İLE GERİ DÖNERSİN
GOSUB İLE GİTTİGİN YERDE DE GOSUB İLE BAŞKA BİR YERE GİDEBİLİRSİN(16F877 İÇİN 4--- 18F452İLE 27 KEZ )FAKAT HER GOSUB KENDİ RETURN UNA DÖNER GOSUB İLE GİTTGİN BİR YERDEN GOTO İLE ÇIKTIN DİYELİM ÇIKTIGIN YERDE RETURN KOYMAZAN 16F877 DE RETURN SUZ 4 GOSUB U GEÇTİGİNDE PİC RESETLENİR

oyhan

Aynen böyle oluyor ve pic resetleniyor idi. Bu problemi aştım bahsettiğiniz şekilde dengeli kullandım gosub ları ve goto larıda yerinde kullandım. İlginiz için Teşekkürler...
BİRLİKTEN KUVVET DOĞAR: