小5帶你飛(1)—AVR單片機IO口位操作的方法(1)

閒來沒事,將自己以前學習AVR單片機的一些筆記給大家整理出來,方便大家來一起學習。也爭取每週能整理幾篇出來。

此處我使用的單片機是AVR系列的,芯片為Atmega328p,具體資源請查看官網上的該芯片的datasheet。

好的,閒話就不說了,直接上正題,對於單片機來說,可能對io口的操作是最基本的能力了。

  1. 首先我們來看一下位的操作

  • 按位或

    其實就是置位

    例如:PORTA |= 0x80;

小5帶你飛(1)—AVR單片機IO口位操作的方法(1)

只要有一個為1就為1了,是不是最高位置位了

  • 按位取反

    其實就是清位

    例如:PORTA &= ~0x80;

小5帶你飛(1)—AVR單片機IO口位操作的方法(1)

兩個全為1才為1 ,是不是最高位清位了

  • 按位異或

    其實就是實現位的翻轉

    例子:PORTA ^= 0x80

小5帶你飛(1)—AVR單片機IO口位操作的方法(1)

相同為0,不同為1, 是不是最高位翻轉了

  • 按位與

    其實可以用來檢測某一位是不是為1

    例子:if(PINA & 0x80)

小5帶你飛(1)—AVR單片機IO口位操作的方法(1)

就可以用來檢測PA.7是不是為1了

下面來看幾個簡單的程序例子:

哦,在寫demo程序之前,可能還需要來講一點別的,

  • 我用的開發環境時winavr,然後使用usbasp將hex燒寫進板子裡面,不同的開發環境,可能使用的頭文件有一些出入,後期我可能只展示一些核心代碼了。

  • 可能還要講一下控制io的寄存器

  • atmega328p 這個mcu的io口都是標準的雙向口,這個和51是有區別的。

  • 在復位時,所有的端口都是高阻態,啥是高阻態,不知道可以度娘了。

  • 每一個端口,都對應3個寄存器,分別是:DDRx PORTx PINx

  • 來看看這三個寄存器的控制作用:

小5帶你飛(1)—AVR單片機IO口位操作的方法(1)

DDR : 選擇引腳是輸入還是輸出

PORT : 當io口是輸入的時候,它控制有無上拉電阻,當io口是輸出的時候,它控制的輸出的電平情況。

PIN :讀管腳的電平

  • 總結一下:io口初始化三部曲:

  • 使用DDR來設置端口是輸入還是輸入

  • 要是輸出的話,使用PORT來設置輸出的是高電平還是低電平

  • 要是輸入的話,使用PINx來讀取管腳的輸入值,同時可使用PORT來設置管腳是不是有上來電阻。不清楚上、下拉電阻的,以後我再出一個教程。


分享到:


相關文章: