專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機avr c語言位運算 與或非 異或邏輯 運算介紹 詳解

作者:海盜工作室   來源:本站原創(chuàng)   點擊數:  更新時間:2014年04月29日   【字體:

 位運算是指按二進制位進行的運算。在單片機中位運算通常用于I/O端口的輸入輸出控制和邏輯判斷。

C語言提供的位運算符有:

運算符含義功能
按位與如果兩個相應的二進制位都為1,則該位的結果值為1;否則為0。
|按位或兩個相應的二進制位中只要有一個為1,該位的結果值為1。
按位異或若參加運算的兩個二進制位同號則結果為0(假)異號則結果為1(真)
取反~是一個單目(元)運算符,用來對一個二進制數按位取反,即將0變1,將1變0。
<<左移左移運算符是用來將一個數的各二進制位全部左移N位,右補0。
>>右移表示將a的各二進制位右移N位,移到右端的低位被舍棄,對無符號數,高位補0。

 

與邏輯:

    

 

 


將PA口的第0位清0(即最低位輸出低0v電平),其余位保持不變:   PORTA口應同‘11111110’進行與運算

  二進制:11111110 的十六進制為:0xFE,C語言代碼:PORTA=PORTA&0xFE;一般采用c語言的“&=‘運算符,通常寫成

PORTA&=0xFE;   執(zhí)行此語句后,PORTA口的第0位將輸出低電平。

 

或邏輯:

   

 

 


將PA口的第7位置1(即最高位輸出高電平)其余為保持不變,PORTA應與‘10000000’進行或運算

即c語言:PORTA=PORTA|0x80 ;采用或賦值運算符,通常寫成 PROTA|=0x80 ;  二進制‘10000000’的十六進制是0x80;

非邏輯:

   

 

 


c語言:PORTA~=0x0F;//將0x0F=‘00001111‘取反后 '11110000‘=0xF0 賦值給PORTA,通常和其他邏輯運算符一起使用

異或邏輯:

    

 

 


將PA口的第7位翻轉,PORTA^=0x80,即執(zhí)行此語句一次,PORTA口的第7位狀態(tài)變化一次,由0變1,或由1變0,可以周期性的控制一個燈的亮滅。

移位操作:

   

 

 


判斷PA口的第7位是否為0,c語言 if (PINA&(1<<7)==0)       1<<7  結果為0x80,也可寫為 if (PINA&0x80)==0)

 

 

 

關閉窗口

相關文章