En sonunda... PORTB.0 Kesmesi

Başlatan solidus, 13 Aralık 2006, 20:54:59

solidus

On Interrupt Goto KESME
TRISB=%11001111
OPTION_REG = %00111111
INTCON = %10010000
.
.
.

DISABLE       'kesme rutini  devre dışı
KESME:         'kesme  dogusu adı
PORTB.7=1    'kesme halinde ledi yak
>>>>>pause 500<<<<<<
PORTB.7=0    'süre sonunda ledi söndür
INTCON.1 = 0  'Clear interrupt flag
RESUME        'programa dön
ENABLE        'kesme rutini  yeniden devrede.

şeklinde bi yordam ile port b0 kesmesini yapmayı başardım.Fakat genede bana bi sorun varmış gibi geliyor. ISIS simülasyonunda butonlardan birine basar basmaz lcd aydınlatması yanıyor ama PAUSE 500' e takılıyor. Bunu çözmenin bi yolu varmıdır ?
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

Lütfi AYYILDIZ

Pic basic pro nun da bu kötü yanı var. Bir kesme oluşursa o anda hangi komuttaysa onu işler ve kesmeye gider. Hele birde programında pause komutları varsa işin zor, komut işleninceye kadar bekler.

solidus

Yapabileceğimiz herhangi bişey yokmu yani ?
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

paradox

cobra07 ;

bu her programda böyle değilmidir.pic assemblyi tam bilmiyorum ama onda da öyle olması gerekir.program kesme geldiği satırı tamamlar ve kesme alt yordamına gider.ordan sonra bi alt satırdan devma eder.başka bir çeşidi varmı ?

Ziya

rbif i değil external interrupt flagi sıfırlayacaksın.

Edit: yanlış yazmışım kusura bakma....
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

XX_CİHAN_XX

Arkadaşlar işte bu yuzden picbasic i hiç bir zaman beğenmem , önermem.
Asm de de o anki komut satırı işleniyorsa tamamlanıp oyle kesmeye gidilir fakat asm de bir komut en fazla 2 komut saykılı zaman kaybına neden olur.Basic te ise böyle değil malesef.örneğin pause 500 satırı bir komut gibi görünsede esasında bir fonksiyon(bir paket programcık) dır.Yanı pause 500 komutu tek komut satırını asm dekı herhangı bır komut satırı ıle kıyaslıyamazsınız.basic tekı bu komut satırı 500ms lik komut gecıkmesı saglar.Dolayısıyla kesmeye gıtmek ıcın bu sureyı beklemek zorundasınız 8O
asm de ise en gec 2 komut saykılı(4mhz xt varsa 2mikorosaniye gibi)
C de asm deki kurallara daha uygun oldugundan ondada basic teki bu sacmalık yok.Ama tabiiki en hızlısı herzaman asm dir.
Dolayısıyla önce asm , sonrada C dilini öneririm.Amatör işler yapıcaksanız basic ile çalışabilirsiniz tabi :D
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

solidus

Alıntı yapılan: "XX_CİHAN_XX"Amatör işler yapıcaksanız basic ile çalışabilirsiniz tabi
XX_CİHAN_XX hocam,
Haklı olma ihtimaliniz çok yüksek. Fakat 6 ay gibi bi sürede PBP ile acemi sayılmayacak işler becerdim. Buraya gelince tıkandım kaldım. Galiba Bunu çözmenin bi yolu yok. Ne dersiniz ?
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

XX_CİHAN_XX

Alıntı yapılan: "solidus"
Alıntı yapılan: "XX_CİHAN_XX"Amatör işler yapıcaksanız basic ile çalışabilirsiniz tabi
XX_CİHAN_XX hocam,
Haklı olma ihtimaliniz çok yüksek. Fakat 6 ay gibi bi sürede PBP ile acemi sayılmayacak işler becerdim. Buraya gelince tıkandım kaldım. Galiba Bunu çözmenin bi yolu yok. Ne dersiniz ?
Eger cok yuksek hıza ihtiyacın yoksa picbasicde herşeyi yapabilirsin yapılmaz diye birşey yok.
gecıkme saglamak ıcın pause fonksıyonunu kullanma for next dongulerı ıle gecıkme olustur.Boylelıkle ana programında kesme gelırse daha hızlı bır sekılde kesmeye gırer.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

ftsahin

Pause süresi çok önemli değilse bunun yerine kendi yazdığın bir altrutin kullanabilirsin. Bu alt rutin bir döngüden oluşur ve içerisinde kesme kontrolü yapılır. Kesme olduğunda döngüden çıkabilir.

Edit : Bir önceki mesajla aynı zamana denk gelmiş göremedim.

rree

Pause komutu donanım kesmesi kullanıyorsa ikisini bir arada kullanamazsın.

piedos

Sanırım aptal CCS de delay_ms() içinde interruptları kapatıyor
Einstein: "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former."

Lütfi AYYILDIZ

For ...Next döngüsü yaparak bir geciktirme yaparsanız programınız kesmelerde daha sağlıklı çalışır.

XX_CİHAN_XX

Alıntı yapılan: "piedos"Sanırım aptal CCS de delay_ms() içinde interruptları kapatıyor
Bildiğim kadarıyla ccs de oyle bır sorun yok.O yuzden basic i esheple kınıyorum :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

sitenindelisi

basic tabanlı çalışan arkadaşlar, INT ler için proton, mikrobasic vb dilleri kullanırsanız, donanımsal kesme desteğini de kullanabillirsiniz. PBP için ne yazık ki bu geçerli değil.

solidus

Alıntı yapılan: "cobra07"For ...Next döngüsü yaparak bir geciktirme yaparsanız programınız kesmelerde daha sağlıklı çalışır.
Sevgili cobra07 bunu nasıl yapabileceğimi açıklayabilirmisiniz ?
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..