Port' un istenilen pinlerini değişkene atamak ve karar vermek

Başlatan toutatis, 22 Nisan 2015, 00:07:32

toutatis

Merhaba arkadaşlar. Herhangi bir portun istediğimiz bitlerini bir değişkene atayıp, bunun üzerinde yorumlama şansımız var mı ? Nasıl yapabiliriz.
Lütfen hepsinden kontrol etmemi önermeyiniz. Aynı portun bazı pinlerini çıkış olarak kullanacağım.

omereliusuk

int1 level;
level = input_state(pin_A3); //PİNİN durumunu değiştirmeden (giriş çıkış olması önemsiz) durumunu öğrenir.

veya
hepsinin durumunu öğrenmek için giriş çıkışları bozmadan değerlendirme yapmak için:
#define tum_port_b 0x06  //PİNİN durumunu değiştirmeden (giriş çıkış olması önemsiz) durumunu öğrenir.
                                          //pic16f628a için b portunun adresi 0x06; a portunun adresi 0x05
level=*(tum_port_b);


z

Farklı yollardan yapılabilir.

Yollardan birisi;

Söz konusu portu tek hamlede oku ve bir değişkene yaz.

Portu okudun ve diyelimki A değişkenine yazdın.

4. ve 7. bitler giriş diğerleri çıkış olsun.

A=A & 0x90; işlemi yaparsan 7 ve 4 nolu bitlerin haricindekileri sıfır yapmış olursun.
Artık A değişkeni sadece input pinlerindeki değerleri saklar.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

toutatis

Alıntı yapılan: omereliusuk - 22 Nisan 2015, 09:54:12
int1 level;
level = input_state(pin_A3); //PİNİN durumunu değiştirmeden (giriş çıkış olması önemsiz) durumunu öğrenir.

veya
hepsinin durumunu öğrenmek için giriş çıkışları bozmadan değerlendirme yapmak için:
#define tum_port_b 0x06  //PİNİN durumunu değiştirmeden (giriş çıkış olması önemsiz) durumunu öğrenir.
                                          //pic16f628a için b portunun adresi 0x06; a portunun adresi 0x05
level=*(tum_port_b);


Bilgilendirme için teşekkür ederim. Fakat benim 3 adet biti bir değişkene atayıp değerlendirmem gerekiyor.
Tek bitlik örnek üzerinden nasıl çözerim bilemedim. 4 bitlik bir değişken oluşturup en düşük değerlikli 3 bitine istediğim b4,b5,b6 bilgisini aktarıp işlem yapmalıyım.
Bunu nasıl yapabilirim ? 0x06 adresinde b portunun yüksek değerlikli b4 b5 b6 bitlerini ya da bu mümkün değilse yüksek değerlikli 4 bitini b4 b5 b6 b7 bitlerini bir değişkene aktarıp kontrol ettirmek istiyorum. Muhakkak bununla alakalı bir çözüm var.

toutatis

Alıntı yapılan: z - 22 Nisan 2015, 10:05:24
Farklı yollardan yapılabilir.

Yollardan birisi;

Söz konusu portu tek hamlede oku ve bir değişkene yaz.

Portu okudun ve diyelimki A değişkenine yazdın.

4. ve 7. bitler giriş diğerleri çıkış olsun.

A=A & 0x90; işlemi yaparsan 7 ve 4 nolu bitlerin haricindekileri sıfır yapmış olursun.
Artık A değişkeni sadece input pinlerindeki değerleri saklar.

Çok teşekkür ederim. Kesinlikle çok mantıklı ! Ve işlemi sağolsun.

omereliusuk

#define tum_port_b 0x06  //PİNİN durumunu değiştirmeden (giriş çıkış olması önemsiz) durumunu öğrenir.
                                          //pic16f628a için b portunun adresi 0x06; a portunun adresi 0x05
level=*(tum_port_b)>>4;//4 bit sağa kaydır. b4 b5 b6 ve b7 pinleri direkt level in değeri olur.

kolay gelsin

ayhani

Portun degerini bir degiskene ata. Bu degiskeni 11111111 degeri ile VE islemine tut. İslem sonucu 1 ise o bit 1 demektir
En iyi bildiğim şey hiçbir şey bilmediğimdir.

sadogan

         if(input(pin_b4))degisken|=0B00000001
         else degisken&=~0B00000001
         if(input(pin_b5))degisken|=0B00000010
         else degisken&=~0B00000010
         if(input(pin_b6))degisken|=0B00000100
         else degisken&=~0B00000100

Bu şekilde de olabilir.

RaMu

Asıl-gerçek senaryo ne?
Nerede ne amaçla kullanılacak?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

toutatis

Çok değerli cevaplar aldım. Bunlar benim için yeterlidir. Çok teşekkür ederim herkese.
Allah razı olsun.