Var byte var bit

Başlatan forsa1975, 28 Ağustos 2004, 15:28:27

forsa1975

Arkadaşlar bit olarak tanımlanmış bir değişkenle byte olarak tanımlanmış değişkeni işleme sokunca sonuç farklı , byte ve byte olaraak tanımlanmış iki değişkenin aynı işlemde çıkardıkları sonuç farklı.

Byte ve bit arasındaki farkın sadece alabildikleri en büyük değer ollduğunu düşünüyordum. Sanırım yanılmışım. Ama yanılgımın nedenini çözemedim. Bu konuda yardım ederseniz bunu açıklayabilirseniz sevinirim.


Ayrıca ;
c=%1100110011001011
bu c sayısının ilk dörtbitinden son dört bitine kadar olan yerini alıp
bir b sayısı oluşturmak istiyorum.  PBP bit operetörlerine baktım fakat birşey çıkaramadım. Matematiksel başka işlemlerde çok kasacak diye düşünüyorum.

 Dostlukla...

axanc

merhabalar,

bit dediğimiz şey sadece bir veya sıfır değerini alan ikilik sistemdeki tek basamaklık değerdir.. oysa bayt dediğimiz şey ise 0-255 arasında değer alabilen ve 8-bitten oluşan yapıdır.. yani ikilik sistemde bit, bir basamaktan oluşurken, byte, sekiz basamaktan oluşur...

örnek bit.. 0
örnek byte... 00110101



c=%1100110011001011

dediğin sayı Word tipinde (yani 2 tane byte)

c=%-11001100-11001011-

eğer "b" sayısını byte tanımlarsan, "c" sayısının sadce 8 bitini alacaktır ancak nasıl?.. b=c.byte0 dersen alt sekizliyi (sağ taraf), b=c.byte1 dersen üst sekizliyi (sol taraf) alcaktır.. senin yapmak istediğin orta sekizliyi almak değil mi?.. yani "1100-1100" kısmını almak istiyorsun... öyleyse "c" sayısını 4 bit sola kaydır... "c=c>>4" dediğin zaman sağa doğru 4 bit kayarak bu hali alacaktır... (not: eğer 4 bit kaydırınca fazla kaymış oluyorsa 2 bit kaydır, çünki derleyici bazen Word tipindeki değişlenlerde söylediğinin iki kaydırıyor, nedenini bilmiyorum.. deneyerek doğrula)

c=%-00001100-11001100-

farkettiysen almak istediğin sayı c'nin sağ taraftaki byte'ında toplanmış oldu, yani "b=c.byte0"... oldu bitti.. :)
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

ete

Merhaba,

Axanc arkadaşın açıklamalarına bir şey ilave etmek istiyorum.
Ben genelde bir Byte veya Word değişkeninden istediğim bir bölümü AND leyerek alırım. Bunu anlatabilmek için 2li sayı sisteminden 10 lu sisteme dönüştürme mantığına bir bakmak gerekir. Şöyleki;

A=%10010010  diye bir sayımız olsun
Bu sayının On tabanına göre karşılığı şu şekilde hesaplanır.

-----------------------------------------------------
  8  |  7  |  6  |  5  | 4 | 3 | 2 | 1|    Bit sırası
---------------------------------------
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1|     Bitlerin onluk karşılıkları
------------------------------------------
  1      0     0     1   0    0   1   0      Binary sayımız
-----------------------------------------
Şimdi 1 gördümüz hanenin onluk karşılıklarını toplarız
128 +16+2 = 146 demekki sayımızın onluk karşılığı 146 imiş.
Şimdi diyelimki soldan 4 adet biti alıp bir sayı oluşturacağız
yani 1001 bitlerini alıp sayıyı oluşturacağız.
Soldan itibaren 4 adet biti 1 kabul edin ve onluk değerini hesaplayın.
128+64+32+16= 240
Şimdi sayımızı 240 ile AND lersek yeni sayımızı elde ederiz. Yani
B=A (146) AND 240
Bu durumda B sayısı  1001 olarak elde edilecek buda 144 de eşit olacaktır.
Aynı usulle 16 bit veya daha fazla bitlerden belirli adetteki sayıları çekebiliriz.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

forsa1975

word tipi byt tipinden daha fazla değer alıyor.
bunu anlamış değilim sizin verdiğiniz bilgide benim düşüncemle aynı doğrultuda. Ama pbp farklı sonuç üretiyor.

c= yardımınız için sizlere teşekkür ederim.  :)
Kolay gele...

fsan

merhaba,

bir "bit" degiskeni sadece 1 veya 0 olabilir ("true" veya "false")
bir "byte" degiskeni ise 0..255 olabilir, yani 8 tane bit'den olusuyor

örnek:

flag var bit

if flag = 2 then...  dersek bu biraz mantiksiz olur,  
eger böyle bir sey olacaksa tabiki "flag" degiskeninin "bit" değil enaz "byte" türünden olmasi gerekirdi

devam..

c var word
c = %1100110011001011

b var word
b = c & %0000111111111111

yukarida yapilan islem su:

c = %   1100 110011001011  
&   %   0000 111111111111
        -----------------
b = %   0000 110011001011


genelde bu (bitwise) yöntemlerle:
istenilen bit leri 0/1 (set/clear) yaparak degistirdikten sonra yukarida axanc in da bahsettigi gibi gerekirse saga/sola (shift right/shift left) kaydirmalarla istedigimiz her seyi yapabiliriz.

veya ETE hocanin yaptigi gibi daha prof. bir yöntem ile de olabilir tabiki :)

Basarilar..

axanc

@ete 'nin yaptığı yöntemde de kaydırma gerekli, ortaki 8 bit'i almak için önce diğerlerini sıfırlamak için 0x0FF0 ile AND ,'leriz.. sonrasında benim anlattığım gibi kaydırarak alırız..
c = %   1100 1100 1100 1011  
&   %   0000 1111 1111 0000 
        ----------------- 
b = %   0000 1100 1100 0000
kaydırınca
b = %   1100 1100


@fsan nasılsın??
MAIN:
	HSEROUT	["AT",13]
	HSERIN	300, FAIL, [WAIT("OK")]

	LCDOUT	$FE, 1, "CONNECTED.."
	
	HSEROUT	["ATE",13]
	HSERIN	300, FAIL, [WAIT("OK")]
	
	HSEROUT	["AT",13]
	HSERIN	300, FAIL, [WAIT("OK")]

	HSEROUT	["AT+CMGF=1",13]
	HSERIN	300, FAIL, [WAIT("OK")]

en son bağlantı yapmak için bir tane nokia 2100 yakmıştım, şimdi infrared ile yaptım sistem çalıştı.. şimdi güzel bir ".net" programı hazırlıyıp bilgisayar arabirimi yapıcam, dil öneriniz var mı??
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

fsan

merhaba axanc,
saglik olsun dostum, bir sansizlik olmuş demekki.
 
Sonradan ögrendigime göre PIC software serial komutlari kullanilir ise rs232 level konvertere ihtiyac olmadan pic ile telefon (tx/rx hatlari) direk birbirlerine baglana biliyormus, ama serial hardware port ve HSER in/out.. komutlar kullanirsak mutlaka tx/rx signallerin invert edilmesi gerektigini okumustum.

ayrica bazi telefonlarin rx (tx) hatlari +3V mu destekliyormus ne, sen bu konuyla ilgili kullandigin telefon hakkinda bir arastirma yapmismiydin?

PC interface programini istersen VB deki dahili mscomm control modul ile yapabilisin. PIC ile PC arasinda software serial komutlar kullanirlir ise PIC rx girisine bir 22K seri direnc baglamak yeterli oluyor.

kusura bakmayin mesaj konusunu yine saptirdik :P

iyi calismalar..

axanc

yok ben şansımı fazla zorlamıştım bu telefon konusunda ondan yandı, hem de MBUS'ı yaktım.. neyse..

bi yerde rastladığım kadarı ile adamlar PIC ile PC arasında 7404 ile max232'nin yaptığını yapmışlardı..

ben sofware serial port yerine hardware olanını tercih ediyorum genelde, araya bir 7404 koyunca oluyor.. yeni aldığım telefona infrared port ile bağlanıyorum, direk kablo bağlantısı yapmaya tırsar oldum artık.. telefonlarla ilgili manuel bulma konusunda sıkıntılarım var, en azından nokia 2100'ınkini bulamamıştım.. bu sebepten telefonların +3 volt olayını bilmiyorum ancak bildiğim şey 3.6*2=7.2 besleme kullanıyorlar.. aslında onları birer transistör ile devreden soyutlamak daha iyi olur.. senin bu iş için tavsiye edebileceğin bir entegre var mı?.. optokuplor kullanmak için devreyi nasıl bağlayacağımı bilmiyorum da.. zira telefonu soyutlarsam yakma şansızlığım azalacak..

bu arada @forsa1975 arkadaşım umarım kusra bakmıyorsundur, senin konunu hallettik diye bunları konuşuyoruz... :)
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

fsan

Alıntı yapılan: "axanc"yeni aldığım telefona infrared port ile bağlanıyorum, direk kablo bağlantısı yapmaya tırsar oldum artık..

Sevgili axanc,
bu yeni aldigin telefonun markasi/modeli ne peki?
PinOut/Cable semasini bulup inceleyebilirsek, bir yorum yapmak daha kolay olurdu..

axanc

Nokia 7250i, kablo bağlantılarında merak ettiğim bir konu var, eski bilgisayarların seri port gerilimi 13volt'tu; yenilerinde bu gerilim değişikmiş galiba..
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

fsan

Nokia 6610, 7210, 7250, 7250i
9 pin Nokia special connector  at the mobile phone

2 Gnd    
3 MBUS    
4 Vpp    
7 Rx    
8 Tx

yalniz telefonun bir sekilde  rx/tx hatlarina kolay bil sekilde baglanabilmen icin herhalde bir data kablosuna ihtiyacin olacak :)

http://www.developershome.com/sms/howToUseHyperTerminal.asp
http://www.developershome.com/sms/howToSendSMSFromPC.asp

Telefonun bu sekilde kablo üzerinden "AT commands" destekleyip desteklemediginide ögrenmis olursun. ;)

axanc

tşk.. :).. zira artık telefonu yakmaya kıyamam...
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP