F

kesmeler ?

Başlatan ferdi0435, 06 Aralık 2011, 15:25:38

ferdi0435


kesmlerede kesme programı uygulandıktan sonra ana döngüde kaldığı yerden devam ediyor peki bunun yerine kesme oluştuktan sonra kaldığı yerden değilde ana döngünün en başına gelmesini nasıl sağlayabiliriz ???

menduh

kardeş geçenlerde bende sordum ETE hocaya bu durumu sağlıklı olmayacağını söyledi kayıtçılar yüzünden yani pic kilitlenebiliyor onun yerine kesme içinde değişkenlerden birine değer atayıp basla etiketinden hemen sonra sıfırlayacak şekilde ayarlayabilirsin,
yani diyelimki a diye bi değişken var kesme aktif olduğunda a=1 gibi bir komut yazabilirsin ana döngü içindede muhtelif satırlara IF a=1 then goto basla şeklinde bir komut ekleyerek durumu çözebilirsin ETE hocamız bu şekilde fikir vermişti bana gayette mantıklı ve sorunsuz bi çözüm.. bu arada başla etiketinden hemen sonra a=0 ;)

ete

Kesmeden farklı bir yere gitmek mümkün ama stack problemi doğruyor bu işlem.
Bu nedenle en güzeli bir işaretçi kullanmak. Kesme oluunca bir değişkeni set edersin (POZ=1)  daha sonra ana program döngüsünde IF POZ=1 then GOTO ISTEDIGINYER  dersin hatta olası bir gecikmeden kaçınmakiçin bu komutı bir kaç yere yerleştirirsen program senin istediğin yere gider. Oraya gidince POZ=0 demeyide ihmal etmezsin olur biter.

Ete

ferdi0435

hocam ornegın bır bant sıstemı var start butonuna bastık ve sistem çalışmaya başladı  bunla ılgılı ıstenmedık bır durum olustu ve kesme butonuna bastık (acil butonu) sistem durdu tekrar start komutunu beklenmesı gerekıyor bunu nasıl saglıyacagım her komuttan sonra kesmedekı degıskenımı kontrol ettırecem ????

ete

Bu şekilde yardımcı olamam. Program üzerinden konuşalım. Ama yinede fikrimi söyleyeyim.
Program elbette bir yerlerde iken kesme oluşturacak bir butona bastın (PortB.0 kesmesi diyelim). Program kesme oluşturdu ve oraya gittin. orada POZ=1 dedin ve program geldiği yere döndü.
Şayet geldiği yer uzun bir program parçası ise en uygunyeri kendin bulman gerek. Bantın çalışmaya başladığı yerde bir şeyleri kontrol etmen gerek elbette. Oraya koyarsın POZ=1 ise önce POZ=0 olsun sonra Goto başla dersin olur biter zormudur bu iş?
Başka çareniz yok zaten.

Ete

ferdi0435


M_B

Alıntı yapılan: ferdi0435 - 06 Aralık 2011, 22:06:16
hocam ornegın bır bant sıstemı var start butonuna bastık ve sistem çalışmaya başladı  bunla ılgılı ıstenmedık bır durum olustu ve kesme butonuna bastık (acil butonu) sistem durdu tekrar start komutunu beklenmesı gerekıyor bunu nasıl saglıyacagım her komuttan sonra kesmedekı degıskenımı kontrol ettırecem ????
Hocam;  Eger program baştan başlayacaksa o zaman Pici resetlemek en kolay yolu olmaz mı?
Veya en kotu ihtimalle picin beslemesine ters calısan buton konularak ta resetleme yapılamaz mı?


ete

Pic resetlemek her zaman iyi sonuş doğurmaz. Diyelimki program içind ebazı değişkenlerinizi set ettiniz. Reste atarsanız bütün değişken değerleriniz kaybolur. EN azında pek çoğu kaybolur. Halbuki programı en baştan başlatmak en iyi çözümdür.
Anlayacağınız istenen veya yapılan şey duruma göre değişir.

Konu resetlemek ise bu kesme içinden de yaptırılabilir. Programda WDT sayacını açık tutarsınız ve kesme oluşunca programı sonsuz döngüye sokarsınız. Wdt anında siresi dolunca işlemciye reset atar. Hiç butona falan basmanız gerekmez otomatik reset gibi bir şey.

Ete

ferdi0435

#8
ete hocam  ozamn şöyle bir şey yapsam olur heralde kesme işleminde  wdt ile reset attırırım ondan önce değişken değerlerimi eeproma yazarsam olur heralde ???

Powered by EzPortal