BitMask

Bit maskeleri, bir bayt veri içindeki belirli bitlere erişmek için kullanılır. Bu genellikle yineleme yöntemi olarak yararlıdır, örneğin tek bir pinden seri olarak bir bayt veri gönderirken. Bu örnekte, iletilecek bayttaki her bit için pimin durumunu yüksekten alta doğru değiştirmesi gerekir. Bu, bitsel işlemler ve bit maskesi olarak bilinen şey kullanılarak gerçekleştirilir.

Bitsel işlemler, bit düzeyinde etkili olan mantıksal işlevleri gerçekleştirir. Standart bitsel işlemler arasında AND (&) VEYA (|) Sol Kaydırma (<<) ve Sağ Kaydırma (>>) bulunur.

AND (&) operatörü, her iki giriş değerinin 1 olduğu her bit pozisyonunda 1 ile sonuçlanacaktır. Örneğin:

x:  10001101
    y:  01010111
x & y:  00000101
[Kodu Al]

OR (|) operatörü (Kapsayıcı Or olarak da bilinir), her bir bit konumunda giriş değerlerinden birinin 1 olduğu bir 1 ile sonuçlanır. Örneğin:

x : 10001101
y : 01010111
x | y : 11011111

Sol Shift (<<) operatörü, bir değeri belirtilen sayıda sola kaydırır. Örneğin:

y = 1010
x = y << 1
verim : x = 0100

Bayttaki tüm bitler bir konum sola kaydırılır ve sol uçtaki bit düşer.

Sağ Shift (>>) operatörü, değeri belirtilen sayıda sağa kaydırması dışında, sola kaydırma ile aynı şekilde çalışır Örneğin:

y = 1010
x = y >> 1
verimler : x = 0101

Bayttaki tüm bitler bir konum sağa kaydırılır ve sağ uçtaki bit düşer.

Pratik bir örnek için, 170, ikili 10101010 değerini alalım. Bu değeri pim 7'den çıkarmak için kod aşağıdaki gibi görünebilir:

bayt iletimi = 7 ; // iletim pinimizi tanımlayın
bayt verileri = 170 ; // iletilecek değer, ikili 10101010
bayt maskesi = 1 ; // bitmaskimiz
bayt bitDelay = 100 ;

geçersiz kurulum ( )
{
pinMode ( iletim , ÇIKIŞ ) ;
}

void loop ( )
{
için ( maske = 00000001 ; maske > 0 ; maske << = 1 ) { // bit maskesi ile yineleme
if ( data & mask ) { // bitwise AND doğru olarak çözülürse
digitalWrite ( iletim , YÜKSEK ) ; // 1 gönder
}
else { // bitwise ise ve false değerine çözümlenirse
digitalWrite ( iletme , DÜŞÜK ) ; // gönder 0
}
delayMicroseconds ( bitDelay ) ; // gecikme
}
}

Burada, bit maskesi değerini yinelemek için bir FOR döngüsü kullanıyoruz ve bu değer her döngüde bir konum sola kaydırılıyor. Bu örnekte, ifadeyi sıkıştırması dışında tam olarak << işlecine benzeyen << = işlecini kullanıyoruz

00000001
& 10101010
________
00000000

Ve çıkış pinimiz 0'a ayarlandı. İkinci kez maskeyi = 00000010 döngüye sokar, bu yüzden operasyonumuz şöyle görünür:

00000010
& 10101010
________
00000010

Ve çıkış pimimiz 1 olarak ayarlanır. 1, 8 bitin ucundan sola kaydırılıncaya ve maskemiz = 0 oluncaya kadar, döngü maskedeki her bit boyunca tekrarlamaya devam edecektir. Sonra 8 bitin tamamı gönderildi ve döngümüz çıktı.