第4章: 組み込みシステム

ハードウェアを直接制御する技術をマスターしよう

進捗: 0%

4.1 ビット演算とは

マイコンのスイッチ(レジスタ)は、1バイト(8ビット)の中に「LEDのON/OFF」「モーターの回転方向」などの情報が詰め込まれています。ビット演算を使えば、特定のビットだけを操作できます!

主要なビット演算子

演算子 名前 動作
& AND (論理積) 両方が1なら1 1010 & 1100 → 1000
| OR (論理和) どちらかが1なら1 1010 | 1100 → 1110
^ XOR (排他的論理和) 違うなら1 1010 ^ 1100 → 0110
~ NOT (否定) 0と1を反転 ~1010 → 0101
<< 左シフト 左にずらす(×2) 0011 << 1 → 0110
>> 右シフト 右にずらす(÷2) 0110 >> 1 → 0011
重要!

左シフト(<<)は2倍、右シフト(>>)は半分になります。つまり 5 << 15 * 2 = 10 と同じ!

4.2 ビット演算計算機

🔧 ビット演算シミュレーター

演算結果

A & B (AND)
A | B (OR)
A ^ B (XOR)
~A (NOT)
A << 1 (左シフト)
A >> 1 (右シフト)

4.3 ビットマスク

ビットマスクは、特定のビットだけを操作する最重要テクニックです。高専のテストや実験で必ず出ます!

基本テクニック

1. 特定ビットをONにする (OR)

port = port | (1 << 3);  // 3番目(0から数えて)のビットをON
// 例: 00000000 | 00001000 = 00001000

2. 特定ビットをOFFにする (AND + NOT)

port = port & ~(1 << 3);  // 3番目のビットをOFF
// 例: 11111111 & 11110111 = 11110111

3. 特定ビットを反転させる (XOR)

port = port ^ (1 << 3);  // 3番目のビットを反転
// 例: 00001000 ^ 00001000 = 00000000

4. 特定ビットの状態を確認 (AND)

if (port & (1 << 3)) {
    // 3番目のビットがONの場合の処理
}

🔧 ビットマスク実験ツール

0

4.4 仮想LEDボード

実際のマイコンでLEDを制御するイメージを体験しましょう!8ビットのレジスタで8個のLEDを制御します。

🔧 8ビット仮想LEDボード

LED 7
LED 6
LED 5
LED 4
LED 3
LED 2
LED 1
LED 0
2進数表現: 00000000
10進数値: 0
16進数値: 0x00

C言語での実装例

// LEDレジスタのアドレス
#define LED_PORT (*(volatile uint8_t*)0x25)

// 3番目のLEDを点灯
LED_PORT |= (1 << 3);

// 5番目のLEDを消灯
LED_PORT &= ~(1 << 5);

// 全LEDを交互に点灯 (0b10101010 = 0xAA)
LED_PORT = 0xAA;