Eğitimler
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:
y: 01010111
x & y: 00000101
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:
y : 01010111
x | y : 11011111
Sol Shift (<<) operatörü, bir değeri belirtilen sayıda sola kaydırır. Örneğin:
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:
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 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
& 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:
& 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ı.