rb sıfır kesmesi bekletilebilir mi?

Başlatan veli dayı, 07 Ocak 2013, 11:02:01

veli dayı

Ete hocam programda rb.0 kesmesi oluşturdum.ve kesme bölümünü de şöyle yazdım.
kesme:
while portb.0=0
sayac=sayac+1
wend
lcdout $fe,1,"sayac=",#sayac
pause 200
sayac=0

INTCON.1=0
Resume
Enable
End
böyle bir şey yazdım fakat benim merak ettiğim şu ?işlemciyi kısa bir süreliğine kesmeye gitti ve kesme sebebi de kesildi diyelim tekrar ana programa dönecek.peki biz kesmeye gittiğinde gecikme yapıp kesme sebebi ortadan kalksa bile pauselerle istediğim kadar kesme de tutabilirmiyiz işlemciyi hani flag bayarağını daha sıfırlamadık sonuçta kesmeden çıkılmaması lazım gibime geliyor ısıs simülasyonu da bunun mümkün olduğu izlenimi verecek şekilde simüle ediyor(fakat sayac=0 kodunu takmıyor kafasına)acaba ısıssin bir acizliği mi yoksa gerçekten de sayac=0 kodunu işlememesi doğal bir şeymi.
    özetle yapmaya çalıştığım portb.0 bağaldığım butona ne kadar basılı kalırsa o süreyi ekranda göstercek 200 milisaniye bekletecek ve sonra sayacı sıfırlayayım.

ete

Ekranda bir karekterin görülebilir olması için o karekterin en azından ekranda 40-50 ms süre ile kalması gerekir Aksi taktirde karketer değeri daha kısa sürede sürekli değişirse bir gölge görürsün bazen onu bile göremezsin.
Şimdi yazdıklarına bakarsak
while portb.0=0 satırında Tuşu basılı tuttuğun müddetçe bekle diyorsun Bu tuşa bastığın müddetçe program
sayac=sayac+1 komut satırını çalıştıracak ve sayaç değeri anında zaten 255 değerine ulaşacaktır. Sonra yeniden sıfır olacak ve bu sürekli tekrarlanacaktır. Bu sayma işlemi çok hızlı olur onu sabit bir değer olarak göremezsin sanırım.
Tuşu bırakır bırakmaz
lcdout $fe,1,"sayac=",#sayac komut satırı çalışacak ve o andaki sayaç değerini ekranda göreceksin.
pause 200  '200 ms bekleyecek ve
sayac=0  komutu ile sayaç değeri yeniden sıfırlanıp geçilecektir.
Bu arada Sayac=0 komutu işlenmekte ama sayma işlemi çok hızlı yapıldığı için sen onu işlenmemiş zannediyorsun gibime geliyor. Denemek için sayac=sayaC+1 komutundan sonra Pause 20 satırı ekle bakalım sonuç  ne olacak.

Sonuç olarak program yazdıklarını uygular. Senin öngöremediğin sürat meselesi seni aldatıyor sanırım.

Ete

veli dayı

dediğiniz gibi denedim oluyor demek ki sayac=0 yapıyor ama ben onu hiç bir şekilde göremiyormuşum.sonradan aklıma geldi sayac=0 dan sonra lcdout $fe,1,"sayac=",#sayac  pause 200 koydum ozaman gördüm benim kisi birazda dikkatsizlik oldu hocam.öyle ya sayacı sıfırladıktan sonra tekrar ekranda göster komutu kullanmassam göremem.dediğiniz gibi ekranda bekleme süreside koydum ozaman gösterdi teşekkür ederim. :)

ete

Mikrodenetleyicilerin hızına alışmak zaman alıyor. Başlangıçta bende benzer hataları epeyce yaptım. Aslında bir mantık hatasıdır bu.  Zamanla alışırsın.  Bu günden sonra aklından çıkarma bir şeyi görmek istiyorsan ekrana verdikten sonra yeterli görme süresi (bekleme süresi) varmıdır diye kontrol et aksi halde hiç bir şey göremezsin.

Zaman zaman led yakma konusunda da benzer mesajlar alıyorum. Bir ledi yakıp gerekli görme süresi vermeden tekrar söndürürseniz o led sönük olarak gözükür. Gelen mesajlarda bu led neden yanmıyor diye soruyorlar. Halbuki led yanıyor ama yeterli süre olmadığı için görülmüyor. Göz o kadar hızlı değişimi maalesef takip edemiyor. Göreceğin şey için yeterli görme süresi (en azından 50 ms) olup olmadığını daima kontrol edin.

Ete

Powered by EzPortal