Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

bit besleme (kaydırma)---

Başlatan ziyaretci, 24 Mart 2012, 15:24:54

ziyaretci

 Arkadaşlar

8 bitlik binary sayıyı bir bit sola kaydırdığımızda ,2. 8 bitlik binarynin 1.bitindeki bilgiyi ilk kaydırğımız 8 bitlik bilginin 8. biti ile nasıl beslerim hangi fonksiyon komut vs. ??

0b10001100;   // 8 bitllik bigiyi bir sola kaydırdık diyelim (0b00011001-1001101...); yani 2. 8 bitlik bilginin ilk       
                        //bitini 1. 8 bitlik bilginin 8. bitine beslemek istiyorum. olay bu 
0b11001101;

teşekkürler şimdiden

justice_for_all

#1
biraz daha acik anlatirmisin mumkunse bir ornekle..


(binary1<<1)>>7 || binary2;

veya binary1>>6 || binary2;

olmasi gerek
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

ziyaretci

 
   bilgi 1 == >      10111110           // ilk bilgiyi 1 bit sola kaydırdık yani ( 0111111)
   bilgi 2 ==>       11100010           // 2. bilgiyi 1 bit sola kaydırdık yani (11000101)
   bilgi 3 ==>       10111000           // 3. bilgiyi 1 bit sola kaydırdık yani (0111000...)

        şimdi ne oldu ;
     
       ilk bilgiyi sola kaydırdığımızda, ilk bilginin 8. biti  2. bilginin 1. biti  ile beslendi . 2. bilginin 8. biti ise 3 . bilginin 1. bitiyle beslendi yani bunu yapacak gerekli kod,komut vs.vs.  bilginiz varsa paylaşmanızı istiyorum.


ziyaretci

Alıntı yapılan: justice_for_all - 24 Mart 2012, 15:32:51
biraz daha acik anlatirmisin mumkunse bir ornekle..


(binary1<<1)>>7 || binary2;

veya binary1>>6 || binary2;

olmasi gerek

açıkçası tam anlam çıkaramadım yinede teşekkürler illa birisi bilir .

justice_for_all

#4
yada soyle bir mantikla yaparsin iki tane byte degiskenin var yani senin istediklerin

sayi1 sayi2 olsun

ilk once bunlari make16 ile 16 bitlk sayiya cevir daha sonra cevirdigin sayiyi 1 bit sola kaydir sonra kaydirdigin 16 bitlik sayiyi make8 komutu ile  eski degiskenlerine ayir.


mantigi soyle

sayi1 = 01110001
sayi2 = 01100011

sayi1 i 1 bit kaydirinca ne olur sayi1=11100010

olur simdi bu iki sayiyi 16 bit degisken yapalim sayi2 high nibble olacak sekilde

yeni sayimiz 01100011 01110001 olur.bunu 1 bit sola kaydirdigimiz zaman

sayimiz        11000110 11100010 olut goruldugu gibi 1. sayinin 8.biti 2. sayinin 1.bitini besledi.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

ziyaretci

evet mantıklı aslında 16 bitliği 8 lige nasıl bölücez sonra?

justice_for_all

ccs make8 fonksiyonu var onunla bolebilirsin.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

serdararikan

byte1=11001100
byte2=10001000

olsun

byte1byte2 şeklinde ardarda duran iki byte ı 1 sola kaydırmak istiyorsunuz anladığım kadarıyla yani

1100110010001000

sayısını 1 sola kaydırmak istiyorsunuz

byte1<<=1;
if(byte2 & 0b10000000) byte1|=1;
byte2<<=1;

şeklide bu işlemi gerçekleştirebilirisin.

ziyaretci

Alıntı yapılan: serdararikan - 25 Mart 2012, 16:57:14
byte1=11001100
byte2=10001000

olsun

byte1byte2 şeklinde ardarda duran iki byte ı 1 sola kaydırmak istiyorsunuz anladığım kadarıyla yani

1100110010001000

sayısını 1 sola kaydırmak istiyorsunuz

byte1<<=1;
if(byte2 & 0b10000000) byte1|=1;
byte2<<=1;

şeklide bu işlemi gerçekleştirebilirisin.


Teşekkürler.

CCS C kullanıyorum ama verdiğinizi demek istediğinizi anladım fakat bu beni çok uğraştırır.

Bugün serdar çiçeğin CCS C ile pıc programlama kitabında işime yarayacak komutu buldum. Örnek olarak;

int bilgi[]={0b00110011,0b00111010,0b11101100,0b10101010};
shift_left(bilgi,4,1); //bilgi dizisinin sadece 4 elemanını aralarında sola kaydırılacak "parantez içinde ki en sondaki "1"  ise 4. 8 bitin 8. bitinin besleneceği değeri belirtiyor.

Tekrar teşekkürler serdararikan ve cvp veren diğer arkadaşlar.

Pyrodigy

#9
Alıntı yapılan: erkantr67 - 24 Mart 2012, 15:42:38
 
   bilgi 1 == >      10111110           // ilk bilgiyi 1 bit sola kaydırdık yani ( 0111111)
   bilgi 2 ==>       11100010           // 2. bilgiyi 1 bit sola kaydırdık yani (11000101)
   bilgi 3 ==>       10111000           // 3. bilgiyi 1 bit sola kaydırdık yani (0111000...)

        şimdi ne oldu ;
     
       ilk bilgiyi sola kaydırdığımızda, ilk bilginin 8. biti  2. bilginin 1. biti  ile beslendi . 2. bilginin 8. biti ise 3 . bilginin 1. bitiyle beslendi yani bunu yapacak gerekli kod,komut vs.vs.  bilginiz varsa paylaşmanızı istiyorum.
Eğer doğru anladıysam 3 defa bit kaydıracaksın. Bu dili hiç kullanmadım ama eğer kaynak koduna ASM ekleyebiliyorsan ve kullandığın PIC 8 bit veri yolu ile çalışıyorsan,aşağıdaki komut ile bitleri sola kaydırabilirsin. Her bir komut 1 saykıllık gecikme yaratır.
Eğer 16 bit veriyolu olan bir PIC Kullanıyorsan ASM kodu farklı olur.
RLF 	f,d
Rotate Left f   
f registeri içerisindeki sayıyı bir pozisyon sola kaydırır. Registerden taşarak Carry bayrağına yazılan bit, LSB'ye yazılır. Sonuç W veya f registerine yüklenir.
Persistance is the name of the game in this business....

ziyaretci

Alıntı yapılan: Pyrodigy - 26 Mart 2012, 11:39:08
Eğer doğru anladıysam 3 defa bit kaydıracaksın. Bu dili hiç kullanmadım ama eğer kaynak koduna ASM ekleyebiliyorsan ve kullandığın PIC 8 bit veri yolu ile çalışıyorsan,aşağıdaki komut ile bitleri sola kaydırabilirsin. Her bir komut 1 saykıllık gecikme yaratır.
Eğer 16 bit veriyolu olan bir PIC Kullanıyorsan ASM kodu farklı olur.
RLF 	f,d
Rotate Left f   
f registeri içerisindeki sayıyı bir pozisyon sola kaydırır. Registerden taşarak Carry bayrağına yazılan bit, LSB'ye yazılır. Sonuç W veya f registerine yüklenir.


Kardeşim çok sağol sen olmasan "hiç bir şeyi okumadan atlama" dersini öğrenemezdim. CCS C dilinde rotate_left() komutu var ben tabi okumadan benim işime bu yaramaz diye geçtim.Sen "rotate left" değince Allah Allah bir bakayım dedim evet gerçekten de aradığım buymuş.Teşekkürler.


Pyrodigy

Alıntı yapılan: erkantr67 - 26 Mart 2012, 18:27:51

Kardeşim çok sağol sen olmasan "hiç bir şeyi okumadan atlama" dersini öğrenemezdim. CCS C dilinde rotate_left() komutu var ben tabi okumadan benim işime bu yaramaz diye geçtim.Sen "rotate left" değince Allah Allah bir bakayım dedim evet gerçekten de aradığım buymuş.Teşekkürler.
Hayırlı olsun güle güle kullan.
Persistance is the name of the game in this business....

serdararikan

Alıntı yapılan: erkantr67 - 26 Mart 2012, 18:27:51

Kardeşim çok sağol sen olmasan "hiç bir şeyi okumadan atlama" dersini öğrenemezdim. CCS C dilinde rotate_left() komutu var ben tabi okumadan benim işime bu yaramaz diye geçtim.Sen "rotate left" değince Allah Allah bir bakayım dedim evet gerçekten de aradığım buymuş.Teşekkürler.

naçizane bir eleştrim olacak kabul ederseniz.

CCS-C picbasic  gibi derleyiciler insanları tembelliğe alıştırıyor.bir süre sonra yapabileceklerinizin derleyicinizin kütüphanesi ile sınırlı olduğunu anlıyorsunuz veya kütüphanede olmayan bişey yapmak zorunda kalırsanız yaşayacağınız sıkıntı Hitech gibi ansi derleyicleri öğrenirken yaşayacağınız sıkıntıdan çok daha büyük oluyor.bence yol yakınken ANSI-C üzerinize eğilmenizi tavsiye ederim.

ziyaretci

Alıntı yapılan: serdararikan - 26 Mart 2012, 19:10:18
naçizane bir eleştrim olacak kabul ederseniz.

CCS-C picbasic  gibi derleyiciler insanları tembelliğe alıştırıyor.bir süre sonra yapabileceklerinizin derleyicinizin kütüphanesi ile sınırlı olduğunu anlıyorsunuz veya kütüphanede olmayan bişey yapmak zorunda kalırsanız yaşayacağınız sıkıntı Hitech gibi ansi derleyicleri öğrenirken yaşayacağınız sıkıntıdan çok daha büyük oluyor.bence yol yakınken ANSI-C üzerinize eğilmenizi tavsiye ederim.


Çok haklısın kardeşim bu dile başlamadan önce birçok kişiden senin dediğin gibi tavsiyeler aldım.Ama kafamda
kolaydan başlamak en mantıklısı geldi.(Sıfırdan başladığım için kolay olanın mantığını çözmek istedim ilk önce)
  Zaten Türk insanı bir şeyi yaşamadan anlamıyor.Örneğin kendim , ileride mutlaka dediğiniz gibi bir sıkıntılar yaşıyacam bundan eminim ama başta kafaya koyduk bir kere..
 
    Teşekkür Ederim tavsiyeniz için