Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Bu kesme hatalı mı ?

Başlatan solidus, 13 Ekim 2006, 15:39:58

solidus

Arkadaşlar TMR0 kullanarak portb.1 e bağlı bir buton vasıtasıyla portc.3 teki bir ledi yakıp 5 sn sonra söndürmek istiyorum.Bu kesmeyi kullandığımda simülasyonda da reelde de  lamba yanmıyor ve RESET atıyor. Kesmeyi iptal ettiğimde normale dönüyor.Acaba kesmeyi yanlışmı kullanıyorum.
ADCON1=7
TRISB=%11001110 
TRISC.3=0 
INTCON = %10100000
OPTION_REG=%00000110
ON INTERRUPT GOTO KESME 
*
*
*
CUT VAR WORD
CUTBIT VAR BYTE
*
*
KESME:
DISABLE
if CUT=800 then
CUTBIT=1
CUT=0 
IF PORTB.1=0 THEN PORTC.3=1
INTCON.2=0 :goto KESME2 
endif 
CUT=CUT+1 
INTCON.2=0 
KESME2: 
resume 
enable
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

ibrsel

Kesme alt programında hata var gibi geldi bana:

Alıntı Yap
KESME:
DISABLE
if CUT=800 then
CUTBIT=1
CUT=0
IF PORTB.1=0 THEN PORTC.3=1
INTCON.2=0 :goto KESME2
endif
CUT=CUT+1
INTCON.2=0
KESME2:
resume
enable

Eğer TMR0 kesmesi kullanıyor isen B0 ucuna bağladığın butona basıp basmadığına bakmaksızın her TMR0 taşmasında kesme alt programına dallanma olur..Senin yazdığın programda her kesme alt programına dallandığında CUT değişkeninin değerini 1 arttırıyorsun..İf döngüsünde ise sadece değer 800 e eşit ise portb ye bağlı butona basılıp basılmadığını kontrol ediyorsun..Haliylede C3 teki ledi yaktıramıyorsun..Öncelikle kesme alt programındaki hataları düzeltmelisin..
İyi çalışmalar

solidus

Dostum nasıl bi değişiklik yapmalıyım ? Elinde örnekler varsa yardımcı olurmusun ? Bu devrede TMR0 kullanmak uygunmudur ?
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

ibrsel

Buradaki amacını tam anlayamadım..Amacın TMR0 kesmesini kullanıp zamanı saydırmak mı,yoksa B0 interupt tını kullanarak butona herhangi bir anda basılır ise LCD aydınlatmasını çalıştırmakmı..

Eğer zamanı hesaplatmak ise 5sn gibi kısa bir süre için TMR0 kesmesini kullanmana gerek yok diye düşünüyorum..Direkt döngü içerisinde bekleme yaptırarak istediğin bekleme süresini elde edebilirsin..(Döngü içerisinde bekleme yap dememdeki amaç;aynı zamanda döngü içerisinde diğer butonlara basılıp basılmadığını da kontrol edebilmen içindir.Yoksa direkt "pause 5000" (yani 5 sn bekle ) dersen bu 5 sn içerisinde diğer butonlardan gelen bilgilere micro denetleyicin cevap vermez..

solidus

Gördüğün gibi devrede 3 adet buton kullandım. Amacım butonlara herhangi bir anda basılır ise LCD aydınlatmasını çalıştırmak..
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

solidus

Gördüğün gibi devrede 3 adet buton kullandım. Amacım butonlara herhangi bir anda basılır ise LCD aydınlatmasını çalıştırmak.. Msn den haberleşebilirmiyiz ???
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..