2011年4月26日 星期二

_BV() 巨集介紹

在 C 語言中,我們用 bit operators (位元運算子) 處理位元的運算 (Bitwise operation):

使用巨集會讓程式比較清晰易讀。在 avr-libc 函式中有個 _BV() 巨集,它接受一個數值參數而且會轉成適當的 bit mask (位元遮罩)。BV 是 Bit Value 的縮寫。

_BV() 巨集的定義為:

這允許我們這樣做:

甚至可以進一步結合處理器的腳位定義 (Pin defines) 這樣使用:

上列是結合 _BV() 巨集和 TXEN0 來設定 USCR0B 的 bit 3。ATmega128 的 USCR0B 暫存器的定義如下:

image
▲ USCR0B 暫存器 (USART Control and Status Register 0B)

在 <avr/io.h> 有底下這樣的定義,所以 _BV(TXEN0) 就代表 bit 3:

使用 bit operators,你還可以同時處理多個非連續的位元的運算,像這樣:

延伸閱讀

0 意見: