CCS C Bit ve Byte İşlemleri Komutları

PIC mikrodenetleyicisi ile çalışırken kullandığımız CCS C derleyicisine özel bit ve byte birimleri üzerinde işlem yapmamıza olanak sağlayan komutlar oldukça önemli bir yere sahiptir. Port ve pinler üzerinde işlem yaparken giriş ve çıkış işlemlerinde kullandığımız komutları kullanırken, bit ve byte ile çalışırken daha çok tanımlamış olduğumuz değişkenler üzerinde işlem yapıyoruz.

Sırasıyla aşağıdaki komutları açıklayarak bit ve byte işlemlerinde kullandığımız komutları açıklayalım.

BIT_SET() Komutu

Bu komut ile istediğimiz değişkenin istediğimiz bitini 1 olarak değiştirebiliriz.

int x;
x = 3;
bit_set(x,3);

Yukarıdaki kodda integer (tamsayı) veri tipinde bir x değişkeni tanımladık. Bu x değişkenine 3 (0011) değeri verdik. Daha sonra bit_set(x,3) komutu ile x sayısının 3.bitini 1 yaptık. x değişkenimizin yeni hali 0111 oldu. Yani 7 oldu.

BIT_CLEAR() Komutu

Bu komut ise bit_set() komutunun tersine istenilen biti 0 yapar. Bu sayede bit_set() de olduğu gibi değişkenlerin bitlerini değiştirebiliriz.

int y;
y = 7;
bit_clear(x,2);

Yukarıdaki kodda tanımladığımız y değişkenini 7 (0111) tamsayısına eşitledik. Daha sonrasında 2. bitini 0 ile değiştirerek değişkenimizin yeni değerini 0101 yaptık. Bu da 10’luk sistemde 5 sayısına eşittir.

BIT_TEST() Komutu

İsminden de anlaşılacağı üzere bu komut ile değişkenler üzerinde bit testi yapılır. Yani istenilen sıradaki bitin 1 veya 0 olup olmadığı sorgulanır.

x = 01010101;
y = bit_test(x,5);

Yukarıdaki kodda tanımladığımız x değişkeninin 5. bitini sorgulattık. Dolayısıyla y değişkenimiz 1’e eşit. Çünkü x değişkeninşn 5. biti 1’e eşit.

SWAP() Komutu

Bu komut ile değişkenimizin düşük bit grubuyla yüksek bit grubu yer değiştirir.

int z;
z = 0x35;
swap(z);

Yukarıdaki kod ile 0011 0101 değeri 0101 0011 değerine dönüşür. 35 sayısı 53 sayısı olur.

SHIFT_LEFT() Komutu

Bu komut bir yapının belirtilen elemanları arasında belirtilen miktarda sola bit kaydırma yapar.

int8 bilgi[]={0x20, 0x33 ,0xAD, 0X34, 0X58, 0X43);
shift_left(bilgi,4,1);

SHIFT_RIGHT() Komutu

Shift_left() komutunun tersine bu komutta sağ tarafa aynı şekilde bit kaydırma yapar.

int8 bilgi[]={0x20, 0x33 ,0xAD, 0X34, 0X58, 0X43);
shift_left(bilgi,4,1);

ROTATE_LEFT() Komutu

Bu komut ile belirtilen parametreler doğrultusunda sol tarafa bit döndürme işlemi yapılır.

int8 bilgi[]={0xA5, 0x53 ,0xB2, 0x81, 0xF5};
rotate_left(bilgi,4);

ROTATE_RIGHT() Komutu

Bu komut ile rotate_left() komutuna ters olarak sağ tarafa bit döndürme işlemi gerçekleşir.

int8 bilgi[]={0xF5, 0xD2, 0x20, 0xF6, 0xAA};
rotate_left(bilgi,4);

MAKE8() Komutu

make8() komutu ile 16 veya 32 bitlik değerlerin istenilen kısımlarından 8 bitlik kısmı alınır.

int8 y;
int32 z;
z = 0xA35D82EF;
y = make8(z,0);

Yukarıdaki kod ile z değişkenini kısımlara ayırarak y değişkenine 0xEF olarak atamış olduk.

MAKE16() Komutu

Bu komut iki tane 8 bitlik değeri alarak tek bir tane 16 bitlik değer oluşturur.

int8 x,y;
long a;
x = 0x16;
y = 0x12;
a = make16(x,y);

Yukarıdaki kod ile sonnuca vardığımızda x ve y değişkenleri birleşerek 0x1612 değerini a değişkenine atar.

MAKE32() Komutu

Bu komut ile parantez içerisine yazılan değerler birleştirilerek 32 bitlik yeni bir değer elde edilir. Burada dikkat edilmesi gereken en önemli husus parantez içerisine yazılan değerlerin bitleri toplamı 32 bit olmalıdır.

int8 a;
int16 b;
int32 c;
int32 d;
a = 0xAB;
b = 0x34DE;
c = make32(a,b,a);
d = make32(b,a);

Yukarıdaki kod ile c değişkenin son durumu 0xAB34DEAB olurken d değişkenimizin son hali 0x0034DEAB olur. Böylelikle farklı bit boyutlarına sahip değerlerden 32 bitlik değerler oluşturulur.