在 C 語言中,我們用 bit operators (位元運算子) 處理位元的運算 (Bitwise operation):
使用巨集會讓程式比較清晰易讀。在 avr-libc 函式中有個 _BV() 巨集,它接受一個數值參數而且會轉成適當的 bit mask (位元遮罩)。BV 是 Bit Value 的縮寫。
_BV() 巨集的定義為:
這允許我們這樣做:
甚至可以進一步結合處理器的腳位定義 (Pin defines) 這樣使用:
上列是結合 _BV() 巨集和 TXEN0 來設定 USCR0B 的 bit 3。ATmega128 的 USCR0B 暫存器的定義如下:
▲ USCR0B 暫存器 (USART Control and Status Register 0B)
在 <avr/io.h> 有底下這樣的定義,所以 _BV(TXEN0) 就代表 bit 3:
使用 bit operators,你還可以同時處理多個非連續的位元的運算,像這樣:
0 意見:
張貼留言