Pic'te Tuş Kullanımı

Başlatan Serk@n, 25 Haziran 2013, 16:48:19

Serk@n

Öncelikle şunu belirteyim.  Pic'e benim gibi yeni başlayanlar için ve henüz 'kesme' kullanmaya çekinenler için pratik bir bilgi vereceğim. Fakat bu konuda daha tecrübeli olan arkadaşlar lütfen benim vereceğim bilgiyi ya teyit etsinler veya hatalı olduğum hususları uyarsınlar...  (Veya çok gereksiz bir bilgiydi de diyebilirler, darılma-gücenme yok. :) )

Basit bir devre... Bir anahtar, bir LED ve Pic...

Basit bir program...

TRISA=0 'A portu çıkış olarak ayarlandı
TRISB=%00000001 'B.0 pini giriş diğerleri çıkış olarak ayarlandı.
SYMBOL TUS= PORTB.0 ' PortB.0 pinine sembol ismi olarak TUS adı verildi.
SYMBOL LED= PORTA.0 ' PortA.0 pinine sembol ismi olarak LED adı verildi.

BASLA:
IF TUS=1 THEN ' Anahtar kapalı ise
HIGH LED ' LED'i yak
ELSE ' Değilse
LOW LED ' LED'i söndür
ENDIF ' IF sorgulaması sonu
GOTO BASLA ' BASLA isimli etikete git.
END

Peki, burada anahtar değilde bir tuş bağlı olsaydı durum ne olurdu? Tuş'a bastığımızda LED yanacak ve bıraktığımızda sönecekti.

Tuşa basıp bıraktığımızda LED yansın ve yanmaya devam etsin, tekrar basıp bıraktığımızda LED sönsün ve sönmeye devam etsin istersek ne yapmalıyız?
Ben bu soruna şöyle çözüm buldum, sizinle paylaşmak istedim:

TRISA=0 'A portu çıkış olarak ayarlandı
TRISB=%00000001 'B.0 pini giriş diğerleri çıkış olarak ayarlandı.
SYMBOL TUS= PORTB.0 ' PortB.0 pinine sembol ismi olarak TUS adı verildi.
SYMBOL LED= PORTA.0 ' PortA.0 pinine sembol ismi olarak LED adı verildi.
TUSABASILDI VAR BIT
TUSABASILDI=0

BASLA:
IF TUS=1 THEN ' Anahtar kapalı ise
TUSABASILDI=1
ENDIF ' IF sorgulaması sonu

IF TUS=0  AND TUSABASILDI=1  THEN ' Anahtar açık ve daha önce tuşa basılmış ise
TUSABASILDI=0
TOOGLE  LED ' LED yak/söndür.
ENDIF ' IF sorgulaması sonu
GOTO BASLA ' BASLA isimli etikete git.
END

Yani tuşa basıp bıraktığımızda LED yanıyorsa sönük, sönükse yanıyor durumuna geçiyor.  Bu yöntemle bir çok program yazdım ve sorunsuz çalışıyor. Vebu  programlarda 'Kesme'  kullanmaya da gerek görmedim.  Bunu arkadaşlarla paylaşmak istedim... Herkese iyi çalışmalar.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

est32

Bu kadar çok komut yazmak yerine sadece TOGGLE LED demek yeterdi.
Bellekte yer varsa sorun değil belki ama bazen insan öyle sıkışıyor ki sadece 1 word yüzünden program sığmıyor, bunu hesabını yapıyorum, çok başıma geldi.
örneğin;
HIGH PORTB.0 ile PORTB.0=1 demek çok farklı oluyor, HIGH daha fazla bellek harcıyor.

Serk@n

Yok benim bahsettiğim anahtar yerine tuş kullanmak. Eğer vaktin olursa ayrıntılı inceler misin? Yorumlarınız benim için önemli.
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Serk@n

Bir soru daha takıldı kafama :)

Program hafızada kapladığı yeri nasıl tespit ediyoruz? Mesele hex dosyası bilgisayarda kaç Kb alan kaplıyor, diye bakarak mı anlaya biliriz? Yani 500 satır program yazdı diyelim. Daha ne kadar yazabilirim diye tahmin yürütmek için...
Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

ete

Derleme esnasında derleyiciler programın ne kadar word yer kapladığını söyler.
Mesela Basicde sol alt köşede   Success: xxx word used  şeklinde bir ibare çıkar. Burada gösterilen xxx kadar word programın işlemci hafızasında kapladığı yeri ifade eder.
İşlemciler 14 bit core denilen sınıf (16F628 gibi)  her bir hafıza bir word (14 bit) yer anlamına gelir. diyelimki 320 word yer kapladı program o halde hafızadan 320 si kullanıldı anlamına gelir.

Ete

Serk@n

Bildiklerimize göre hareket edersek bilmediklerimizi de öğrenebiliriz.

Powered by EzPortal