kesme

Başlatan behcet.3, 20 Kasım 2013, 22:20:36

behcet.3

resume komutu ile kesme olduğu yere dönmesi sağlanıyor.istediğim yere gitmesi için ne yapabilirim.mesela programın en başına

behcet.3

Bu konu hakkinda yardımcı olacak kimse yokmu??

mg1980

Gideceğiniz yere bir etiket adı yazın.GOTO........diye gidin.

est32

Hayır goto ile olmaz stack(yığın bellek) taşar ve işlemci sapıtır.
Bir değişken tanımla, adı örneğin YER olsun. Böyle bir durumda her döngü içerisinde(basla.......goto basla gibi) IF YER=1 THEN GOTO XXXXX, IF YER=5 GOTO XXXXXX. gibi şartlar koy.
Kesme içerisinde duruma göre YER=3,YER=7 gibi durumları belirtirsen program gittiği satırdan sonra nerede bu şartla karşılaşırsa oraya gider.
Ama kesmeden sonra geri döndüğü satırda hiç işlem yapmaması ve hemen istediğin yere gitmesi gerekiyorsa iş zor.
Böyle bir durum varsa algoritma da sanırım ona göre olacak, ben de takip edeyim bakalım üstadlar ne diyecek böyle bir durum için...

ete

Bu işi yapmanın iki yolu var.
Birincisi kesme den çıkarken son iki komut şöyledir.
Resume
Enable
Burada görülen komut sizi geldiğiniz yere yollar. Normalde komut açıklamasında birde label (etiket) parametresi mevcut. Ancak şayet resume komutunu bir dönüş etiketi ile kullanırsanız stack taşması yaşayabilirsiniz. Resume etiket şeklinde kullanabilmeniz için çalıştığınız işlemcinin stack pointerine ulaşabilmeniz ve komutu vermeden önce onu sıfırlamanız gerekir. Bu işlem yalnızca 18f serisi işlemcilerde mümkün olabiliyor. Bunu sağlamak için programın başına ;
Define no_clear_stkptr_1
Şeklinde bir define komutu ilave etmeniz gerekir.

İkinci yolu ise bir işaretçi kullanmaktır.  Programda bir bit değişkeni tanımlayın,
Git var bit.  Şeklinde tanımladığınızı varsayalım.
Kesmeden çıkmadan önce
Git=1 şeklinde değişkeni set edin.
Ana program kısmında
If git=1 then
   Git=0
    Goto gidilecek etiket
Endif
Şeklinde bir komut verirseniz direk kesmeden değilde kesmeden çıkar çıkmaz yine istediğiniz adrese gitmiş olursunuz. Başkada yolu yok zaten.

Ete

Powered by EzPortal