CCS C - PIC Birden fazla işlevi olan buton?

bagztov

Üye
Katılım
5 Nis 2018
Mesajlar
175
Puanları
6
Yaş
25
Herkese merhabalar, iyi forumlar.
Ben CCS C ve PIC16F877A kullanarak Proteus programında bir proje geliştirmeye çalışıyorum (ÖDEV v.s değil, tamamen gömülü sistemler üzerinde kendimi geliştirmeye çalışıyorum.)

Ben CCS C'de ADC kullanarak LM35'in çıkışından aldığım veriyi sıcaklık olarak LCD ekrana yazdırıyorum. Burada şimdilik bir sorun yok.

Devrede şu an 5 adet buton var.
RB0 - Bu buton benim menüye giriş için kullanmak istediğim buton. RB0 kesmesi ile butona bastığım zaman LCD'de <--- Menu ---> yazıyor. (Ancak daha menü tasarlayamadım. Yani geçiş falan yok, bu konuda da yardıma ihtiyacım var.)

RB4 - Bu buton benim 1. Motoru çalıştırmak için kullandığım buton. RB4-RB7 kesmesi ile bu butona bastığım zaman C portunda ilgili yerleri lojik-1 yapıyorum. Tekrar bastığım zaman lojik-0 yapıyorum.
RB5- RB4 ile aynı sadece C portunda farklı pinler lojik-1/lojik-0 oluyor.
RB6 - RB4 ile aynı sadece C portunda farklı pinler lojik-1/lojik-0 oluyor.
RB7 - Bu butona motor veya C portuyla ilgili bir şey bağlı değil. Sadece tasarlayacağım menüde yaptığım değişiklikleri kaydedip mikrodenetleyicinin hafızasına yazması için (Hafıza olayı hakkında da hiçbir fikrim yok maalesef. Adım adım ilerlemeye çalışıyorum.)


Şimdi ben LM35 ile sıcaklık okuyup LCD'ye yazdırdığım esnada RB4-7 pinleri ile motorları manuel çalıştırıyorum. RB0'a bastığım zaman LCD'de menü yazıyor ve ben bu esnada RB4-7 pinleri ile motorları açıp kapatmayı değil, menü arasında gezinmeyi ve tanımlayacağım değişkenlerin değerlerini arttırmak veya düşürmek için kullanmak istiyorum. Bunu nasıl yapabilirim acaba?

Denediğim yollar;

1- Dış kesme meydana geldiğinde INT_RB kesmesini disable yapmak.
Sonuç: Menü de motorlar çalışmadı ancak dış kesme içinde yazdığım buton okuma işlemleri de çalışmadı. Dış kesme içinde B portunu yeniden giriş olarak tanımlasam da B portundaki girişleri okuyamadım.

Birkaç şey daha denedim, mesela goto ile RB_0 kesmesi meydana geldiğinde goto komutuyla farklı bir alt programa geçmeyi denedim. O da olmadı.
menu isminde int8 tipinde bir değişken tanımladım. Switch case ile belki menü arasında dolaşırım diye düşündüm o da olmadı.

Şu menü olayını, menü'de LCD'ye yazdığım sıcaklık değerine menüden yeni değer atamayı ve atadığım değeri hafızaya yazmayı öğrenmem lazım. Bir de menüde süre değişkenini değiştirip motorların çalışma sürelerini de değiştirmeyi öğrenmem lazım.
Çok işim var çooook... :)


Şimdiden yardımlarınız için teşekkür ederim. Umarım ilgilenenler olur. Gerekirse devre şeması ve kodu yazabilirim.
 
Kesmelerle fazla kafayı bozmuşsun. Ortada kesmelik birşey yok. Rahat ol. Pic senin düğmeye bastigini yakalayacak kadar hızlı.
 
Kesmelerle fazla kafayı bozmuşsun. Ortada kesmelik birşey yok. Rahat ol. Pic senin düğmeye bastigini yakalayacak kadar hızlı.
Cevap verdiğiniz için teşekkür ederim. Aslında kesmelerle alt program oluşturduğum için programı parçalara bölmüş oluyorum. Bu da programın anlaşılır hale gelmesini sağlıyor. (Ya da ben öyle sanıyorum.) Yarın kesmesiz yapmayı deneyeceğim. Tekrardan teşekkürler.
 
Silvestir hocam daha iyi bilir fakat IF komutlarıyla istediğini yapabilirsin.

Sadece işlemciyi DELAY yada gereksiz döngülerle fazla meşgul etme ki
senin IF komutlarını yakalayabilsin.
 
Evet. İlla delay gerekiyorsa delay küçük parçalara bölünebilir.

a=100;
while(a--) { butonabasildi_mi();
delay(10);
} // 1 saniye gecikme


gibi
 
Silvestir hocam daha iyi bilir fakat IF komutlarıyla istediğini yapabilirsin.

Sadece işlemciyi DELAY yada gereksiz döngülerle fazla meşgul etme ki
senin IF komutlarını yakalayabilsin.
Cevap verdiğiniz için teşekkür ederim. Üstünde çalışıyorum.
Evet. İlla delay gerekiyorsa delay küçük parçalara bölünebilir.

a=100;
while(a--) { butonabasildi_mi();
delay(10);
} // 1 saniye gecikme


gibi
Cevabınız için teşekkür ederim. Bunu deneyeceğim bugün.
 

Forum istatistikleri

Konular
127,957
Mesajlar
913,907
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst