avatar_Burak

USART KESMESI

Başlatan Burak, 07 Eylül 2013, 17:14:03

Burak

Merhaba Hocam ;

16F628a mikrokontrolörü ile bir USART kesmesi uygulaması yaptım ve başarı ile çalıştırdım .. Ama Programın alıcı devresinin kod kısmı için bir takım sorularım olacak . 14. dersi güzelce okudum anladım fakat programın bir kısmındaki kod satırlarına anlam veremedim .


DISABLE

INT:

GIE=0
HSERIN ,5,JUMP,[WAIT("LBG"),B1]
JUMP:
temp=RCREG
GIE=1
Resume

enable


Birinci sorum ; Yukarıdaki kod parçacığına gelince neden kesme kısmında global kesmeleri disable ediyoruz . Zaten DISABLE - ENABLE bayrakları arasında tekrar bir kesme oluşması mümkün değildir diye biliyorum ben . ????

Bir ikinciside  RCREG değerini READ ederek USART kesmesi bayrağını mı clear etmiş oluyoruz ? Yoksa başka bir sebepten mi bu kayıtçıyı okutuyoruz ? neden sadece PIR1.5=0 diyerek işimize devam etmiyoruz ?

Şimdiden yardımlarınız için teşekkürler hocam ...
Ω Gens Una Sumus Ω

ete

Aslında Disable komutu global kesmeyi kapatmaktadır. Bunu pek çok programda bu şekilde kullanıyorum. Ancak bazı programlarda nedendir bilinmez global kesmeyi kapatmaz isem bazı aksaklıklar çıkıyor. Aslında bu aksaklık çıkınca global kesmeyi kapatıp yeniden deniyorum. Genelde program yazarken önceden benzer konuda yazdığım programlardan satır kopyalar ve yapıştırırm. Orada global kesmeyi kapatmamın iki nedeni olacak ama biri geçerlidir mutlaka. Ya kopyala yapıştırdan geliyordur yada gerçekten gereklidir.

Usart kesme bayrağı direk ulaşılabilir bir flag değildir. Yani onu flag=0 şeklinde temizleyemezsiniz. Çözüm rcreg registerini okumaktan geçiyor. Böylece flag otomatik temizlenmektedir.
Bunlar data sheetlerde açıklanmış durumdadır.

Ete

Powered by EzPortal