portb kesmesi

Başlatan styx75, 03 Nisan 2014, 09:16:34

styx75

selama arkadaşlar..
potb kesmesini programın ilk başında portb kesmelerinin birini çıkış yapıp kesmeyi iptal edip blokdan çıkarken tekrar giriş yapıp aktif edilebilirmi yada dogru teknikmidir
örnegin
dd:
   tirsb =11100000  --rb4 çıkış yapıldı---
   ıf porta.0=0 then hıgh portb.0
   pause 100
ff:
  trısb=11110000--rb4 giriş yapıldı
--------
--------
gibi



styx75

pardon şu şekilde
dd:
   tirsb =11100000  --rb4 çıkış yapıldı---
   ıf portb.4=0 then hıgh portb.0
   pause 100
ff:
  trısb=11110000--rb4 giriş yapıldı
--------
--------
gibi

ete

Verdiğin örneklerin kesme ile alakası yok gözüküyor yada sen anlatamıyorsun.
Bir pini program içinde giriş yada çıkış oalrak değiştirmek mümkün.
Bu işde çıkış yapmak için  OUTPUT portb.4   ve giriş yapmak için INPUT portb.4  şeklinde kullanmak yeterli olur.
Bazı komutlar pinin giriş yada çıkış olmasını değiştirebilir. Daha çok çıkış için kullanılan HIGH PORTB.4 komutu o pini önce Çıkış yapar ve sonra pini HIGH yapar (LOW PORTB.4 de aynı şekilde çalışır) .

Sonuçta bu pinleri PORTB değişiklik kesmesi için kullanıyor isen elinde PortB.4-PortB7 arasında 4 adet pin bulunur. Bunlardan hangisini giriş yapmış isen kesme o pinler için aktif olur.
Programın başında hepsini giriş yapıp kesme oluştuktan sonra bir veya ikisini çıkış pini olarak değiştirebilirsin.
Sonuçta kesme oluşumu Giriş olan pinlerin programın çalışması esnasında konum değiştirmesi ile oluşur. Bunu sağlamak içinde mutlaka pinlerin durumu hem programa başlarken hemde kesme içinde DURUM=PORTB veya DURUM=PORTB & %11110000 şeklinde okutulmalıdır. Bunu saklayan işlemci daha sonra bu pinlerde bir değişiklik olursa kesmeyi yaratır.

Ete

styx75

evet kesme tanımlamaları örnekte vermemişim.
yani kesmenin aktif olabilmesi için bütün bportunun giriş olmasına gerek yok anladıgım kadarıyla..hangisi giriş ise o aktif kesme yapabilir..aslında yapmak istediğim
rb4 ve rb5 portlarının kesmelerini aktif ederek deger arttırma ve azaltma tuşları olarak kullanmak  istiyorum.. ama programın ilk başlangıcında  ana program girmeden 5sn lik bir süre içerisinde bu tuşlara beraber basıldıgında kesme oluşturmadan başka bir altprograma girmesini istiyorum..bunun için sormuştum







ete

Tuş kontrolünde iki tuşun aynı anda basılması ile ayrı ayrı basılmaları farklı olaylardır ve bu basit bir mantıkla kolaylıkla yakalanabilir.
Tuşlar PORTB.4 ve PORTB.5 de bağlı iseler ve tuşlara basılınca ilgili pinler LOW oluyor ise;
TUSLAR=(PORTB & %00110000)>>4  ,  komut satırı ile tuşların durumu okunabilir.
TUSLAR=3 ise hiç birisi basılmamış
TUSLAR=2 ise yalnızca PORTB.4 basılı
TUSLAR=1 ise yalnızca PORTB.5 basılı
TUSLAR=0 ise her ikiside basılı demektir.

Geriye basılan tusa göre işlem yaptırmak kalır.

Ete

styx75

çok teşekkür ederim çok aydınlatıcı oldu..
peki diyelimki rb4,rb5, ve rb6 tuşlarında kesmeleri aktif yaptık bunlarda durum değişikliginde aynı kesme etiketine mi gider farklı kesme etiketi kullanılabilirmi..
kullanılamaz ise kesme etiketine gdince hangi porttan kesme oluştugunu hangi mantıkla çözeriz..

ete

#6
kesme etiketi daima tektir zaten. Bu durum değerlendirmesini kesme içinde yaparsın olur biter.
Ete

Not: ders-6 da gerekli değişikliği yapıp yeniden kayıt ettim.


styx75

kesme dersinizde şöyle bir ifade var
Bu kesme tipinde RB4-RB7 bacaklarının mevcut konumlarında oluşacak bir değişiklik
sonucunda da kesme oluşturulmaktadır. Bu kesme PORTB nin RB4-RB7 arası
bacaklarının tamamının giriş yapılması halinde geçerlidir. Bacaklardan birisi çıkış yapılır
ise kesme iptal olur.
yani  biz kesme için sadece rb5  kullansak bile  RB4-RB7 tamamı giriş olacak..dogrumu anladım..

ete

O bilgi yanlış. Pinlerin tamamı giriş olması gerekmiyor. Hangisi giriş ise kesme onun üzerinden çalışıyor.
O bilgiyi düzelteceğim .

Ete

styx75

anladım bu konuyla ilgili bir sorumdaha olcak..
diyelim kesme oluştu ..kesme etiketine gitti..program kesme bitiminde otomatik olarak kesmenin gerçekleştigi komutsatırndan sonrasına dönecek peki kesme etiketinde kesmenin hangi komut satırından geldigini sorgulaya biliyormuyuz,..

ete

Bu şekilde sorgulama yapamazsın. Ancak kendin bir şey yapabilirsin.
Bir değişken tanımla. (SATIR VAR BYTE)
Her satıra SATIR=SATIRNUMARASI şeklinde numara ver.
Kesme içinde SATIR=? ise o satırdan gelmiştir.

Ete

styx75

#11
 pekiştirme amaçlı yazdım programı ama çalışmadı sorun ne olabilir

@ DEVICE pic16F877A, XT_OSC 	' 4 MHz osilatör kullanılacak 
@ DEVICE pic16F877A, WDT_OFF ' Watchdog Timer kapalı
@ DEVICE pic16F877A, PWRT_ON    ' Power-On Timer açık
@ DEVICE pic16F877A, BOD_OFF    ' Brown-Out Detect kapalı
@ DEVICE pic16F877A, LVP_OFF    ' Low-Voltage Programlama kapalı
@ DEVICE pic16F877A, CPD_ON    ' Data belleği kod korumalı değil
@ DEVICE pic16F877A, PROTECT_OFF ' Program belleği kod korumalı değil
DEFINE OSC 4
ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%0000000'dahili Pull up dirençleri aktif edildi ayrıca pullup direncine gerek yok.
INTCON=%10001000 'Tüm Kesmeler aktif ve RB0/INT kesmesi aktif

ADCON1=7
TRISB=%11110111
TRISC=%11111111
TRISD=%00000000
TRISE=%000
TRISA=%00000000
SYMBOL MENU=PORTB.4
odasec=0
basla:
    ıf odasec=1 then hıgh porta.0
    ıf odasec=2 then hıgh porta.1
    ıf odasec=2 then hıgh porta.2
     ıf odasec=3 then hıgh porta.3
    ıf odasec=4 then hıgh porta.4
goto basla
DISABLE
  KESME:

  IF MENU=0 THEN ODASEC=ODASEC+1
  WHILE MENU=0
  WEND
  PAUSE 100
  IF ODASEC>8 THEN ODASEC=0

INTCON.0=0
  resume 
  Enable 
  End

ete

877A da komparatör var. CMCON=7 komutu ilave etmen gerek.
Pograma bakılırsa PORTB değişiklik kesmesi açılmış. Bu kesme PORTB.4-PortB.5-Portb.6 ve PortB.7 pinleri için geçerlidir.
Şem aolmadığı için kim ne için çalışıyor belli olmuyor.
Buna yorum yapmam çok zor. Ne bekliyordun da ne yapmadı bilemiyorum.
Ben sadece olması gerekenleri söyleyeyim en iyisi.
CMCON=7 programın başında olması gerek.
DURUM=PORTB şeklinde BASLA satırından evvel PortB nin durumu okunmalı
AYnı şey Kesme içinde ve kesemden çıkmadan evvel de yapılmalı.
başka kusur yok.

Ete

styx75

EVET ÇALIŞTIRDIM..AMA RESET YAPINCA ŞAŞIRIYOR

Powered by EzPortal