PİC C komutlarını incelerken, bir örnekte PORTB=4 oldu yani PORTB=00000100 oldu.

ocomrun

Üye
Katılım
5 Eyl 2008
Mesajlar
74
Puanları
1
Konum
izmir
PİC C komutlarını incelerken, bir örnekte PORTB=4 oldu yani PORTB=00000100 oldu.
Bu nasıl hesaplanıyor? Yani, 4=00000100 eşitliği nasıl hesaplanıyor?
Teşekkürler.

Arkadaşlar bu sonuçları anlayamadım. Nasıl hesaplanıyor?
 
Moderatör tarafında düzenlendi:
decimal 4 = binary 00000100
matematikteki onluk ve ikilik sayı düzeni..

En sağ taraf 2 üzeri 0 dan başlar, en soldaki 2 üzeri 7 = 2^7 de biter.. Bu demek oluyor ki sadece en soldaki 1 olsaydı senin sayın 2^7=128 olacaktı.. En sağdaki 1 olsaydı 2^0=1 olacaktı.. Senin baytta sağdan 3.bit 1 olduğu için 2^(sağdan itibaren basamak sayısı-1) = 2^2 = 4 oldu..

Eğer en sağdaki de 1 olsaydı, yani 00000101 olsaydı bu da 2^2 + 2^0 = 5 olurdu..

Özetle senin bayt;
00000100 ise
0*2^7 + 0*2^6 + 0*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = decimal 4 oluyor
 
Son düzenleme:
PİC C komutlarını incelerken, bir örnekte PORTB=4 oldu yani PORTB=00000100 oldu.
Bu nasıl hesaplanıyor? Yani, 4=00000100 eşitliği nasıl hesaplanıyor?
Teşekkürler.

Bu gibi işlemler cebirsel işlemlerdir.
Bu işlemleri derleyiciler üstlenir.
Sonuçta hepsi hexadecimal sayı sistemine çevrilir.
Ve PIC program belleğine de 0 ve 1 bilgileri ile yüklenir...
Bütün derleyiciler bu şekilde çalışır.
Sayısal elektronikte, cebirsel dönüştürmeleri görmüşsündür sanırım.
Gerçi tahsilini bilmiyorum...
 
Merhaba
Okuduğumu yanlış anlamadıysam desimal 4 rakkamının BCD değeri olan 0100 şekline nasıl dönüştüğünü sormaktasınız.
Desimal dediğimiz(onlu tabana göre)bizim 4 rakkamını ikili tabana çevirebilmemiz için sürekli 2 ye bölerek bulabiliriz.Hemen başlayalım.4/2 kalan=0(en sağdaki ilk sıfırı bulduk) bölünen 4, bölen 2, bölüm 2 dir.Bölüm olan 2 yi tekrar 2 ye bolersek kalan =0 dır(ikinci sıfırı da bulduk)bölüm olarak 1 kalacaktır (üçüncü basamağı da bulduk)sonuç olarak,100 değeri bcd sistemde 00000100 gösterilir.Özetle 4 ü sürekli 2 ye bölersek 001 gibi bir sonuca varırız.Bunu da tersten yazarak 100 elde ederiz.Bu değerin soluna eklenecek sıfırlar desimal değerini değiştirmez. Binary Coded Decimal - BCD
TABLE ASCII COMPLETE : HEXA, DECIMAL, OCTAL, BINAIRE, CLAVIER, ETENDUE, ...
Google
 
Merhaba
Okuduğumu yanlış anlamadıysam desimal 4 rakkamının BCD değeri olan 0100 şekline nasıl dönüştüğünü sormaktasınız.
Desimal dediğimiz(onlu tabana göre)bizim 4 rakkamını ikili tabana çevirebilmemiz için sürekli 2 ye bölerek bulabiliriz.Hemen başlayalım.4/2 kalan=0(en sağdaki ilk sıfırı bulduk) bölünen 4, bölen 2, bölüm 2 dir.Bölüm olan 2 yi tekrar 2 ye bolersek kalan =0 dır(ikinci sıfırı da bulduk)bölüm olarak 1 kalacaktır (üçüncü basamağı da bulduk)sonuç olarak,100 değeri bcd sistemde 00000100 gösterilir.Özetle 4 ü sürekli 2 ye bölersek 001 gibi bir sonuca varırız.Bunu da tersten yazarak 100 elde ederiz.Bu değerin soluna eklenecek sıfırlar desimal değerini değiştirmez. Binary Coded Decimal - BCD
TABLE ASCII COMPLETE : HEXA, DECIMAL, OCTAL, BINAIRE, CLAVIER, ETENDUE, ...
Google

Bildiklerim karıştı şimdi benim.. :) BCD displaylerdeki 4bit->7bit kodlaması değil miydi? Bu arada verdiğiniz ilk linkte altta, örnek olarak 25 sayısını vermiş.. Soruya göre yanlış bir örnek sanırım..

Bu arada pc nin hesap makinesi de çeviriyor, böyle uğraşmaya gerek yok aslında.. :) F5 hex modu, F6 decimal, F7 octal ,F8 binary mod.. Decimalde(F4) iken 4 yazdığınızda F8 e basınca binary halini 100 yazar.. :)
 
Bence arkadaş sadece ondalık-ikilik sayı sistemine dönüştürmeyi sormuş.
Kıscası ilk sorulan sorunun cevabı şudur arkadaşım:

Onluk sayı: İkilik(binary) karşılığı:
0 0000 0000
1 0000 0001
2 0000 0010
3 0000 0011
4 0000 0100
 
Arkadaşlar konuyu dağıtırsak, soruyu soran arkadaşın kafası daha da karışır...
BCD ayrı bir sayı sistemi, Decimal ayrı bir sayı sistemi.
Hatta BCD bir kodlama sistemidir.
PIC'te olsun, ARM'da olsun hatta Windows'ta olsun.
Çalıştırılmak istenen kod hexadecimal hale getirilir, ondan sonra çalıştırılır.
Ve bu dönüştürmede BCD diye bir şey yoktur...

Binary : 00100011
Octal : 43
Decimal : 35
Hexadecimal : 23
ASCII : '#'
 
Cevap yazan tüm arkadaşlara, çabalarından dolayı çok teşekkür ederim.
Siz kurtların, biz kuzuları aranıza almanız bir lütuf :D
Konu anlaşılmıştır.
 
selamlar
benımde bir sorum olacak bilgisi olan arkadaslar yardımcı olursa sevinirim.
asm dilinde program yazıyorum ve programın bir yerinde pbp kullanmam gerekti(cok büyük rakamların carpılıp bölünmesi,büyük kücük yoklaması yapılması gerekiyordu).pbp da programı ayrı sekılde yazıp calıstırabılıyorum.bunun ıcın ıkı adet INCLUDE "PROJE1A.MAC" ve INCLUDE "PBPPIC14.LIB" seklinde dosya eklemem gerekıyor.bu dosyaları ekledıgım zaman bu eklemelerı org 000h adresıne yazıyor.ınclude dosyalarını nasıl ileri satırlara atabilirim.cünki ilk satırlarda reset vektor ve ınterrup kısmını kullanıyorum.
 
selamlar
benımde bir sorum olacak bilgisi olan arkadaslar yardımcı olursa sevinirim.
asm dilinde program yazıyorum ve programın bir yerinde pbp kullanmam gerekti(cok büyük rakamların carpılıp bölünmesi,büyük kücük yoklaması yapılması gerekiyordu).pbp da programı ayrı sekılde yazıp calıstırabılıyorum.bunun ıcın ıkı adet INCLUDE "PROJE1A.MAC" ve INCLUDE "PBPPIC14.LIB" seklinde dosya eklemem gerekıyor.bu dosyaları ekledıgım zaman bu eklemelerı org 000h adresıne yazıyor.ınclude dosyalarını nasıl ileri satırlara atabilirim.cünki ilk satırlarda reset vektor ve ınterrup kısmını kullanıyorum.

PBP hiç kullanmadığım için işin ayrıntılarını bilmiyorum.
Ancak genel bir öneri olarak şunu önerebilirim:
Include edeceğin kodları işlevsel hale yani fonsiyonel hale getir, ondan sonra include et.
Ana programdan sadece fonksiyon olarak çağır.
Böylelikle programında da daha tertipli olmuş olur...
 

Forum istatistikleri

Konular
129,864
Mesajlar
930,851
Kullanıcılar
452,726
Son üye
ugur Göktürk

Yeni konular

Geri
Üst