作者james732 (好人超)
看板C_and_CPP
標題Re: [問題] 很基本~卻想不出~C語法~HI.LOW
時間Tue Sep 6 11:46:52 2011
※ 引述《fmdjyl (小D(滴))》之銘言:
: 附上程式碼
: #define SET_BIT(io ,bit) ( io |= (1<<bit) )
: //example: SET_BIT(PORTA,0);SET_BIT(DDRA,0);
: #define CLR_BIT(io ,bit) ( io &= ~(1<<bit) )
: //example: CLR_BIT(PORTA,0);CLR_BIT(DDRA,0);
: 想請教 SET_BIT 和 CLR_BIT出來會是1 還是 0呢??
: (看情況應該一個為HI.一個為LOW)
: 先求助大家~~ ><
io
|= (1 << bit) → io
= io
| (1
<< bit)
| 是做 or 運算,而
<< 是往左 shift 的運算
io &= ~(1 << bit) → io = io
& ~(1 << bit)
&是做 and 運算,
~是做 not 運算
上面的顏色如果看得很亂,請按「\」就可以變成黑白的
什麼是 or, and, not, shift 這應該不需多言吧?
有疑慮請google找「Bitwise operation」,第一筆維基就有說明
#define SET_BIT(io, bit) ( io |= (1<<bit) )
把 io 的第 bit 個位元設成 1
以它的範例 SET_BIT(PORTA, 0) 來看
就是把 PORTA 的第 0 個 bit 設成 1
XXXXXXXX ←PORTA 原本的值
or 00000001 ←(1 << 0)的結果
===========
XXXXXXX
1 ←其他幾個bit都不會改變,只有第0個bit會變成1
那如果是 SET_BIT(DDRA, 5)的話,那就是
XXXXXXXX ←DDRA 原本的值
or 00100000 ←(1 << 5) 的結果
===========
XX
1XXXXX ←其他幾個bit都不會改變,只有第5個bit會變成1
#define CLR_BIT(io ,bit) ( io &= ~(1<<bit) )
把IO的第bit個位元變成0,直接舉例
CLR_BIT(PORTA, 0)
XXXXXXXX ←PORTA原本的值
and ~00000001 ←(1 << 0) 的結果
=============
XXXXXXXX ←PORTA原本的值
and 11111110 ←
~(1 << 0)的結果
=============
XXXXXXX
0 ←PORTA的第0個bit會被設成0
CLR_BIT(DDRA, 5)
XXXXXXXX ←DDRA原本的值
and ~00100000 ←(1 << 5) 的結果
=============
XXXXXXXX ←DDRA原本的值
and 11011111 ←
~(1 << 5) 的結果
=============
XX
0XXXXX ←DDRA的第5個bit會被設成0
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.35.184.77
※ 編輯: james732 來自: 114.35.184.77 (09/06 12:02)
→ angleevil:超哥是XX 09/06 13:24
→ james732:板主請問我可以刪推文嗎 XDDD 09/06 13:28
→ angleevil:><不要阿,我沒講什麼阿 09/06 13:31
推 tropical72:謝謝你, *^_^* 09/06 14:14
→ loveme00835:為什麼想刪文? ~"~ 09/06 15:38
→ james732:想刪推文,因為一樓很壞 XDDDD 09/06 15:38
→ loveme00835:看到了@"@ XDD 09/06 15:42
推 fmdjyl:神人~謝謝解答~給個推~ 09/06 15:42
→ angleevil:QQ超哥不要生氣,下次不敢了 09/06 15:50