CCS C kesmeler hakkında yardım

elkgazi

Paylaşımcı üye
Katılım
28 Şub 2007
Mesajlar
532
Puanları
126
Merhaba arkadaşlar,
CCS C kullanarak bir program yazıyorum ancak bir noktada tıkanıp kaldım. Programda B0 dış kesmesini kullanıyorum. Yapmak istediğim şey dış kesme gelince kesme programında yazdığım işlemlerin yapılması ve işlem bitince programın ana programdaki en son satıra gitmesi. Şuanda dış kesme gelince kesme programı çalışıyor ancak kesme programı bittikten sonra, program kesme nerede geldiyse o satıra gidip oradan sonrasını çalıştırmaya devam ediyor. Umarım yapmak istediğim şeyi iyi ifade edebilmişimdir. Yardımcı olabilirseniz sevinirim.
 
CCS c ve kesmeleri pek bilmiyorum ama;

if (kesmeGeldi)
{
goto ZIPLA;
}
... /* Kodlar */
...
ZIPLA : /* gelmek istediğiniz nokta */

yada if içinde return 0; deyip main den çıkarsınız.
 
Cevap için teşekkürler hocam ancak bahsettiğiniz olayın olabilmesi için ZIPLA etiketi ile programın aynı yerde yazılı olması gerekiyor. Kesme geldiğinde çalıştırılan kod ile asıl kodun yazılı olduğu yer (main) farklı farklı yerlerde olduğundan bahsettiğiniz olay çalışmıyor.
Ama return 0 olayını deneyeceğim.
 
bir tane global flag tutarsın,
kesme gelince fag i true yaparsın.
Daha sonra if (flag) de istediğini yaparsın.
 
Süpersin hocam hemen deneyeyim.
 
Kesme sırasında karşılaştığım asıl sorunu yazıp, sonra da nasıl çözüm bulduğumu anlatayım belki aynı sıkıntıyı yaşayan arkadaşlara fikir verir.
Asıl karşılaştığım sorun : Ana program icra edilirken -diyelim ki delay_ms(..) icra ediliyorken- kesme geldi. Farzedelim ki 20 saniyelik delay kullanmıştınız 10. saniyede kesme geldi. Bu durumda ne oluyor?? Program hemen yaptığı işlemi bırakıyor kesme programını oynatıyor daha sonra ana programa geri dönüp delaydan geriye kalan 10 saniyeyi daha işliyor ve yoluna devam ediyor. İşte benim problemim de bu noktada çıktı. Ben istiyordum ki delay çalışırken kaçıncı saniyede kesme gelirse gelsin kesme programı bittiğinde delay da sonlansın kaldığı yerden saymaya devam etmesin..

Benim çözümüm : Zamanlama işini delay yerine aşağıdaki şekilde yaptım. Kesme gelince kesme programının sonunda count değişkenine 100 değerini yüklettim ve istediğim işlemi gerçekleştirebildim.

for(count=0;count<100;count++){delay_ms(50);}

Ben amatörce uğraştığımdan bu işlemi yaptırabilmek için baya zaman harcadım sizlerde zaman harcamayın diye yazmak istedim.
Umarım birilerinin işine yarar..
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…