pcbway

18f452 interrupt kullanımı

Başlatan teknoman19, 25 Ağustos 2011, 01:14:37

teknoman19

kesmenin çalışma mantığında ana program çalışırken pic kesmeye gittiğinde kesmedeki programları çalıştırıp ana programdan kaldığı yerden devam ediyor
benim sorunum şu ki program kesmeye gitsin ve kesmeden çıktıktan sonra ana programımda istediğim yerden başlasın
pic kaldığı yeri stack(yığın) kaydedicisine yazıyor ve ordan başlıyor, stack kaydedicisinin içeriği değiştirilebilir mi ? veya farklı çözüm yolları ne olabilir ?

yazici67

Programsal olarak yığın değiştirebilirsin (Assembly ile). Ama diğer yollarını denemeni öneririm.
Tek bitlik ( Bool ) bir değişken belirlersin. Mesela adı \" kesildiMi \" olsun.
Program başlangıcında kesildiMi ye False aktarırsın. Kesme fonksiyonunda kesme bitince kesildiMi ye True aktarırsın. Programda işlem bloklarına başlamadan önce kesildiMi yi kontrol edersin. False ise devam et. True ise işlemi yapma.
Eğer her kesme gerçekleşmesi için bir kez işlem yapmak istiyorsan program kesme rutininden geri dönmeden \" goto \" komutu ile istediğin adrese yönlendirirsin.

teknoman19

programda kod bloğuna denetleme kısmını başa yazdık varsayalım ama bloğun yarısında iken kesme geldiğinde kesmeye gidip tekrar  döndüğünde programın yarısından devam edeceği için  program bloğunu baş kısmına gelene kadar kodları işlemeye devam ediyor kesme de ise goto komutunu kullamama izin vermiyor programı CCS C ile yazıyorum tek çözüm yolu stack in içeriğini değiştirmekte yatıyor diye düşünüyorum

genelde kesmeler anlatılırken şöyle denir mesela film izliyorsun telefon çaldı filmi durdurursun telefonla konuşursun ve tekrar filmi izlemene devam edersin diyelimki telefonla konuştun ve aldığın bilgi film izlemekten daha önemli filmi izlemeyi boşverip o işe gidersin filmin bitmesini beklememen gerekir. :)

yazici67

Tamam o zaman CCS de Assembly komutları yazmayı biliyorsan kolay. 18F452 \' nin data sheetinde assembly için gerekli bilgirler verilmiş. Datasheet \' i bir incele sonra C \' de kesme rutininin sonuna yerleştir.

Tagli

Bunu hiç tavsiye etmem. Derleyicinin stack ile ne yaptığını bilmiyorsun çünkü. Stack\'i kurcalaman yazılımı tamamen göçertebilir. Bu tür şeyleri saf assembly ile kod yazarken deneyebilirsin sadece.

Öte yandan, burada sorulması gereken soru şu: Bunu yapmaya gerçekten ihtiyacın var mı? yazici67\'nin de bahsetmiş olduğu gibi başka yol arayışı daha mantıklı gözüküyor.

Yine de şansını denemek istersen, ihtiyacın olan asm komutu \"POP\". Bu komut stack\'in tepesindeki adresi siliyor. Daha önce PicProje forumunda bir başlıkta önermiştim ve kullanan arkadaş bunun işini gördüğünü söylemişti. Ama yanlış hatırlamıyorsam, kullandığı derleyici Basic\'ti.

yazici67

Dil farketmez ama dereyicinin syntax dizimi fark edebilir. Söylediğim gibi alternatif bir yol bulmak daha mantıklı.

teknoman19

Assembler dilini fazla kullanmadım basit programlar yapmıştım
stack le ilgili komutlar yazmakta basit görünmüyor bende alternatif çözüm yollarıyla yapmaya çalıştım
ilginiz için teşekkür ederim :)

yazici67