8 Bitlik Değişkene bit düzeyinde erişmek

Başlatan westcoast, 01 Ekim 2006, 15:11:52

birkan

Alıntı yapılan: "tatlisukurnazi"
Alıntı yapılan: "bilgehansahin84"Bir dakika şimdi!
11111101 değerini sola kaydırınca 11111011 olmuyormu?
senin dediğine göre sağa kaydirinca oluyor. Yanlışmı anadım?
şöyle yapsak demek istediğime gelirmi:
sonu=sonu<<1;

Hocam C'de "CARRY FLAG" diye bişey yok en azından Carry üzerinden kaydır diye bir komut yok.

Bu durumda C'de  << kulanımı sonrası sizin yukarıda beklediğiniz durum oluşmaz.

11111101 << 1
11111010 olur, yani soldan düşen bit kaybolur, sağdan ise 0 değeri girer.

Hi-Tech C de CARRY flag kullanılabiliyor, ben bir çok programımda kullandım.

gidenkomut>>=1;
if(CARRY==1)TRISB2=1; //giriş

işte programımdan bir alıntı. Problemsiz çalışıyor.

aYe

Çözümü yok demedim hocam, gerekirse kaydırmayla ilgili kısım asm olarak da yazılabilir.

Kasdettiğim Carry ile kaydır diye birşeyin C de olmadığı.

Derleyici yazdığınız kodu yorumlarken << yada >> görünce Caryy'siz kaydırma komutu varsa onu kullanır, eğer yoksa önce Carry bitini temizler.

Ha gönül isterdiki; atıyorum "<c<" gibi bir kaydırma komutuda C'de olsun ama malesef yok, sebep ansi standartları...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

CoşkuN

gidenkomut>>=1;
if(CARRY==1)TRISB2=1; //giriş


Bunun sorunsuz çalışması için derleyicinin CARRY'i temizlememesi gerekmiyor mu? Görülen o ki temizliyor.O zaman nasıl olacak bu iş?

westcoast

Derleyici Carry bitini otomatik olarak temizliyorsa yukarıdaki kodun çalışmaması gerekiyor öyle değil mi?

Yada Hi-tech ayarlarında bununla ilgili bir opsiyon mu var gözden kaçan?

aYe

Arkadaşlar karıştırdığınız bir nokta var;

Porta atılan, C'deki değer kayma sonrası değişkenden düşen bit, yani o caryy'e gitmiş zero flag'a gitmiş uzayda kaybolmuş C'için(bizim için demiyorum dikkat edin) önemli değil.

Derleyici giren değerin sıfır olmasını sağlamak zorunda, bunun için carry'siz kaydırma komutu yada carry'i temizleyip ondan sonra kaydırma komutu gibi bir kaç alternatiften biri seçilebilir.

Ha pic'de çalışan bu kod başka mcu da çalışmayabilir, zira carry üzerinde kaydırma komutu olmayan mcu da olabilir, bu durumda derleyici düşen biti Carry'e atıcam diye bir kasıntıya asla girmeyecektir, o da ayrı bir konu..
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

bilgehansahin84

Allah'a aşkına bu kodda nerde yanlışlık yapıyorum arkadaşlar?
Amaç: 'veri' değilkeninin içerisindeki verileri 'yedek' değişkeninin içerisine atmak.

for (tekrar=0;tekrar<=7;tekrar++)
{
   veri=DATAM[tekrar];
                     // 'veri' değişkenine bir diziden  veriler alınıyor.
   yedek1=veri&&0B00000001;            // ilk bit 1 mi?
  if (yedek1==0x01)
   {                                                   // evet ise
     RB0=1;                               // yedek değişkeninin 0. bitini bir yap.
              DelayMs(100);              //eğer yedek bir önceki işlemden '111001110' ise
        // şimdi '111001111' oldu.
      else{        
              RB0=0 ;                                // hayır ise
   DelayMs(100);                       //
      yedek=yedek&&0B00000000; // son biti (0. biti) '0' yap.
  }
   yedek=yedek<<1;
}
Önceki kullanıcı adım : bilgehansahin84  ALLAH (c.c) kimseye kaldıramayacağı yükü yüklemez. İnsan bu düşünce ile hareket ederse, 'PES' etmek üzere olduğu tüm işlerinden başarıyla ayrılabilir.

Ziya

Alıntı yapılan: "bilgehansahin84"yedek=yedek&&0B00000000; // son biti (0. biti) '0' yap.
  }
}
yedek 0 olmuş. son biti değil hepsi.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

bilgehansahin84

Hocam haklısın. Hemen düzelttim çalışıyor şimdi. Fakat bir o sorun yokmuş, '&&' yerine '&' ve '||' yerinede '|' kullanmam gerekiyormuş. Şimdi hatasız çalışıyor program.
Önceki kullanıcı adım : bilgehansahin84  ALLAH (c.c) kimseye kaldıramayacağı yükü yüklemez. İnsan bu düşünce ile hareket ederse, 'PES' etmek üzere olduğu tüm işlerinden başarıyla ayrılabilir.

SENAY

Peki arkadaşlar word tipinde bir veri tanımlasak ve bu veriyi 16 kez sağa veya sola kaydırsak , bu işlem sırasında carry nasıl bir görev üstlenecek veya kaydırma komutu düzgün bir şekilde çalışacakmı?