看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)的結果 =========== XXXXXXX1 ←其他幾個bit都不會改變,只有第0個bit會變成1 那如果是 SET_BIT(DDRA, 5)的話,那就是 XXXXXXXX ←DDRA 原本的值 or 00100000 ←(1 << 5) 的結果 =========== XX1XXXXX ←其他幾個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)的結果 ============= XXXXXXX0 ←PORTA的第0個bit會被設成0 CLR_BIT(DDRA, 5) XXXXXXXX ←DDRA原本的值 and ~00100000 ←(1 << 5) 的結果 ============= XXXXXXXX ←DDRA原本的值 and 11011111 ←~(1 << 5) 的結果 ============= XX0XXXXX ←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