Hex Hesaplaması nasıl yapılır?

Başlatan Farukc, 29 Ocak 2014, 19:29:08

Farukc

GPIOD->ODR= 0x00000000


Arkadaşlar takıldığım bir yer var. Yukarıda ki kodda HEX olan bölümdeki sayıları(harfleri) nasıl bulacağız. Örneğin PortD12    1 olsun istiyorum bunun hesabını nasıl yapmalıyım.

Bayramsumbul

#1
Öncelikle merhaba.
PD.12=1 için :
GPIOD->ODR|=0x1000;
   yada
GPIOD->ODR|=0b0001000000000000;

PD.12=0 için :
GPIOD->ODR&=!0x1000;
yada
GPIOD->ODR&=!0b0001000000000000;


mesaj birleştirme:: 29 Ocak 2014, 20:24:03

Biraz kısa oldu pardon.
İlk önce şunu bilmek gerekiyor;
16'lık tabanda her basamak 15 adet değer alır;
10'luk tabanda->0-9 arası sırası ile : 0,1,2...,9 10-15 arası sırası ile : A,B,C,D,E,F
2'lik tabanda->0-15 arası sıra ile ; 0=0,1=1,2=10,3=11,4=100,5=101,6=110,7=111,8=1000,9=1001,10=1010,11=1011,12=1100,13=1101,14=1110,15=1111 şeklinde.
Yani A=1010,B=1011,C=1100,D=1101,E=1110,F=1111 olur.

Biz hangi bitleri aktif yapmak istiyor isek o bitlerin değerlerini topluyoruz.Mesela 2. ve 3. bitleri aktif kılacağız,o zaman 2.bitin değeri "4" ve 3.bitin değeri "8" şimdi ikisini aktif kılacak isek toplamlarını alacağız yani 4+8=12.Programda biz GPIOA->ODR=12 şeklinde kullanabiliriz.
Ama çoğu programcı bunu GPIOA->ODR=12 şeklinde yazar.zaten ODR yazmac'ı 16 bitlik GPIOA->ODR=65535 yazmak zor olurdu.

Ben ilk başlarda parmaklarımı kullanıyordum (gerçi hala kullandığım oluyor :) ).Yani serçe parmaktan işaret parmağa kadar 0-3 bitleri oluyor.
Şimdi serçe parmağın değeri=1,yüzük parmağının=2,orta parmağın=4,ve işaret parmağının=8.(Hatta üzerine yazabilirsiniz.)
Aktif kılmak istediğiniz bitlerin ait olduğu parmağı açın diğerleri kapalı kalsın ve üzerindeki değerleri toplayın.
Sonrada çıkan sayıyı 16'lık tabana çevirin ve bitti bu kadar.
Sadece şunu bilmek gerekiyor:Yazmaç kaç bitlik ise 4'e bölerek 16'lık tabanda kaç basamak yer kapladığını bulmak.Yani her basamak(16'lık tabanda)4 biti temsil eder.En sonda ise 0-3,sondan ikinci 4-7,sondan üçüncü 8-11 gibi.Buraya kadar umarım doğru anlatabilmişimdir.

Örnek verdiğim:"...|=...","...&=!..." değili terimleri ise C'ye ait.Burada "|=" örneğin a|=b demek a=a|b yani a'yı b ile veya işlemine tabi tut ve sonucu a'ya yaz.Yine aynı şekilde "&=!..." örneğin a&=!b demek a=!(a&b) yani a'yı b ile ve işlemine tabi tut sonra değilini al ve sonucu a'ya yaz olur.Burada değilini alma sebebimi istediğimiz bitleri pasif kılmak.

Umarım burayı da anlatabilmişimdir.Biraz daha devam etmek isterdim ama çıkmam gerekiyor sonra ekleme yaparım.İyi çalışmalar.
Bir Elektronik Meraklısının Serüveni...


Farukc

#3
Alıntı yapılan: Bayramsumbul - 29 Ocak 2014, 19:49:04
Öncelikle merhaba.
PD.12=1 için :
GPIOD->ODR|=0x1000;
   yada
GPIOD->ODR|=0b0001000000000000;

PD.12=0 için :
GPIOD->ODR&=!0x1000;
yada
GPIOD->ODR&=!0b0001000000000000;


mesaj birleştirme:: 30 Ocak 2014, 10:24:03

Biraz kısa oldu pardon.
İlk önce şunu bilmek gerekiyor;
16'lık tabanda her basamak 15 adet değer alır;
10'luk tabanda->0-9 arası sırası ile : 0,1,2...,9 10-15 arası sırası ile : A,B,C,D,E,F
2'lik tabanda->0-15 arası sıra ile ; 0=0,1=1,2=10,3=11,4=100,5=101,6=110,7=111,8=1000,9=1001,10=1010,11=1011,12=1100,13=1101,14=1110,15=1111 şeklinde.
Yani A=1010,B=1011,C=1100,D=1101,E=1110,F=1111 olur.

Biz hangi bitleri aktif yapmak istiyor isek o bitlerin değerlerini topluyoruz.Mesela 2. ve 3. bitleri aktif kılacağız,o zaman 2.bitin değeri "4" ve 3.bitin değeri "8" şimdi ikisini aktif kılacak isek toplamlarını alacağız yani 4+8=12.Programda biz GPIOA->ODR=12 şeklinde kullanabiliriz.
Ama çoğu programcı bunu GPIOA->ODR=12 şeklinde yazar.zaten ODR yazmac'ı 16 bitlik GPIOA->ODR=65535 yazmak zor olurdu.

Ben ilk başlarda parmaklarımı kullanıyordum (gerçi hala kullandığım oluyor :) ).Yani serçe parmaktan işaret parmağa kadar 0-3 bitleri oluyor.
Şimdi serçe parmağın değeri=1,yüzük parmağının=2,orta parmağın=4,ve işaret parmağının=8.(Hatta üzerine yazabilirsiniz.)
Aktif kılmak istediğiniz bitlerin ait olduğu parmağı açın diğerleri kapalı kalsın ve üzerindeki değerleri toplayın.
Sonrada çıkan sayıyı 16'lık tabana çevirin ve bitti bu kadar.
Sadece şunu bilmek gerekiyor:Yazmaç kaç bitlik ise 4'e bölerek 16'lık tabanda kaç basamak yer kapladığını bulmak.Yani her basamak(16'lık tabanda)4 biti temsil eder.En sonda ise 0-3,sondan ikinci 4-7,sondan üçüncü 8-11 gibi.Buraya kadar umarım doğru anlatabilmişimdir.

Örnek verdiğim:"...|=...","...&=!..." değili terimleri ise C'ye ait.Burada "|=" örneğin a|=b demek a=a|b yani a'yı b ile veya işlemine tabi tut ve sonucu a'ya yaz.Yine aynı şekilde "&=!..." örneğin a&=!b demek a=!(a&b) yani a'yı b ile ve işlemine tabi tut sonra değilini al ve sonucu a'ya yaz olur.Burada değilini alma sebebimi istediğimiz bitleri pasif kılmak.

Umarım burayı da anlatabilmişimdir.Biraz daha devam etmek isterdim ama çıkmam gerekiyor sonra ekleme yaparım.İyi çalışmalar.

Süper olmuş çok teşekkürler.

mesaj birleştirme:: 30 Ocak 2014, 08:32:52

Alıntı yapılan: emekli - 29 Ocak 2014, 20:47:44
faruk bey  https://www.picproje.org/index.php/topic,35721.0.html burada hesaplayıcı var

Ama hesaplayıcı biraz daha kolay geldi bana.

Bayramsumbul

#4
Hesap aracını kullana kullana ögrenirsiniz.
Sonra aklınızdan yaparsınız.

mesaj birleştirme:: 30 Ocak 2014, 10:08:53

Hesap aracını kullana kullana ögrenirsiniz.
Sonra aklınızdan yaparsınız.
Bir Elektronik Meraklısının Serüveni...