RBCH kesmesi

Başlatan ORHANSAH, 02 Aralık 2008, 10:37:01

ORHANSAH

forumda arama yaptım ama bulamadım, RB4-7 kesmesi ile ilgili
LCD uygulaması olan basit bir program örneği verebilecek arkadaşlara
şimdiden teşekkür ederim.

ete

Aşağıdaki linkte hazırladığım basic dersleri var. 6.Dersi aç ve orada bu konu örnekli olarak işlenmiştir.

http://www.4shared.com/file/17435059/b7b33870/BASIC-DERS.html

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ORHANSAH

ETE hocam verdiğiniz ders notlarından yola çıkarak bir devre tasarladım ve isiste simule ettim . sayenizde rbch kesmesini öğrenmiş oldum.takıldığım bir nokta kaldı ; kesme sinyalini rb7 de oluşturdum. devre çalışırken, rb7'yi (+) 'ya götürdüğümde kesme oluşuyor fakat ben rb7'yi (-)'ye götürdüğümde kesme oluşmasını istiyorum. bunun için programda hangi ayarı yapmam gerekir. cevabınız için şimdiden teşekkür ederim.

Tagli

Yanlış bilmiyorsam söz konusu kesme RB4-RB7 bacaklarından herhangi birinde herhangi bir değişiklik olduğu zaman gerçekleşir. Bu durumda yapabileceğin tek şey kesme içinde söz konusu bacakları test edip istediğin şart sağlanmamışsa kesmeden işlem yapmadan (tabi kesme bayrağını indirmeyi unutmadan) çıkmaktır.
Gökçe Tağlıoğlu

ete

PortB-CH kesmesi tamamen port B nin 4-7 pinlerindeki bir değişkliği algılar.
Değişiklikten kastım bu 4 adet pinin her hangi birisinin konum değiştirmesini algılar. Dikkat edersen burada Low dan High'a yada High dan Low'a gibi bir ifade kullanmadım.
Temel kaide bu 4 adet pinin hepsinin giriş olarak ayarlanması gerekir. İçlerinden birisi Out yapılırsa kesme çalışmaz. İkinci temel şart da PortB 4-7 pinlerinin konumu program içinde bir değişkene okutulmalıdır.
Aynı işlem kesme kısmında da ayrıca yapılmalıdır.
Giriş olarak ayarlanmış pinlerin ya low da yada High da bekletilmeleri gerekir.
Sende öncelikle bu pinleri High da bekletecek ve içlerinden birisi Low olursa kesme oluşturacaksın.
Derslerde verilen örnekte DURUM=PORTB şeklinde bir komut var bu komutu normal programın içine de yerleştir istediğin olacaktır sanırım. Zira program içinde kesme oluşmadığı anda portB 4-7 pinlerinin konumu High olarak okunacak ve saklanacaktır. Bu durumda low oldukları anda kesme oluşacaktır.


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ete

Aslında program ilk çalışmaya başladığında port değeri sıfır olmakta ve sonradan pull-up lar devreye girince sıfır konumundan 1 konumuna geçiş gerçekleşmektedir. Buda ilk program çalıştığında bir hemen bir kesme oluşmasına sebep olmaktadır.
Bunu önlemenin iki yolu var. ILK VAR BIT şeklinde bir bit değişkeni kullanacak ve ilk kesme oluştuğunda şayet ILK=0 ise hiç bir işlem yapma deyip ILK=1 yapacaksın. Ondan sonrası normal çalışacaktır.
Yada örnekteki gibi bir led yakıyorsan led değerini programın başına HIGH olarak vereceksin. Program çalışır çalışmaz kesme oluşup LED=0 yapılacaktır ve sen ledin yandığını bile göremeyeceksin. Birinci yol daha akıllıca bir yol tabiiki.



Ete
DISABLE  'yeniden kesme oluşması önleniyor  
KESME: 'program buraya geldiğinde kesme oluşmuş demektir.
       if ilk=0 then CIK
       TOGGLE LED  'LED konum değiştirdi
       PAUSE 300
CIK:   
       ILK=1       
       DURUM=PORTB
       RBIF=0   'INTCON.0=0 yapıldı yani RB CHANGE Bayrağı (flag) silindi.
       Resume      'geldiğin yere dön.
	   Enable      'kesmeler yeniden aktif.
End
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ORHANSAH

ETE hocam son verdiğin örnek kodları kendi yazdığım programa uyarladım, istediğim sonucu aldım, yardımların için te
şekkür ederim.