ATMEGA16IO埠相關總結

2021-12-29 22:41:34 字數 1212 閱讀 2445

atmega16 io埠相關的暫存器總共有三個ddrx、portx和pinx。如果要對io操作基本上就是對這三個暫存器進行相關的操縱。ddrx也稱為資料方向暫存器、portx稱為資料暫存器、pinx稱為埠輸入引腳。

當ddrx = 0時,表示的是某埠的引腳為輸入;當ddrx = 0xff時表示某埠的引腳為輸出。

引腳的狀態:輸入或者輸出是根據什麼定義的呢?

是根據高低電平是輸入微控制器還是從微控制器輸出。輸入是指:不屬於微控制器的外部的電平輸入到微控制器;輸出是指:微控制器的電平輸出到微控制器的外部。

當ddrx = 0時,若把portx置位則表示啟動了上拉電阻;若portx為0,則不啟動上拉電阻。當ddrx = 0xff時,若把portx置位則表示輸出高電平;若portx為0,則輸出低電平。

pinx暫存器的值與ddrx暫存器的值(輸入還是輸出)沒有任何關係;只與埠引腳上面的值有關係(portx)。如果portxn = 0xdd,則無論ddtx取什麼樣的值,其pinx都為0xdd。

#include

#include

int main(void)

其中無論ddra的值是0還是0xff,結果都是一樣的。

因此也可以得出乙個結論:pinx暫存器裡的值是可以按照自己的意願設定的。原因是微控制器能捕捉埠的電平,並置位pinx暫存器。

微控制器剛上電後,埠上的暫存器的初始值是什麼?

上電後,預設的初始值為0,即ddrx= 0;portx = 0;pinx = 0;

初始化方法1:

porta=0xff; //內部上拉,高電平

ddra=0xff; //輸出高電平---------燈一直是滅的

初始化方法2:

ddra=0xff; //輸出低電平--------燈被錯誤點亮了

porta=0xff; //輸出高電平--------馬上被熄滅了,時間很短(1個指令不到us時間),燈閃了一下,眼睛無法察覺

ATmega16定時器1的時間設定

在atmel studio 7環境下編寫程式感覺比較舒服。目的 根據設定的時間觸發中斷,觸發一次,變數累加一次 用到中斷,所以一開始需要 include 變數 unsigned char time 0 定時器1配置 void configtimer1 unsigned int set tccr1b ...

使用AVR微控制器ATmega16的循跡機械人

製作乙個機械人對所有電子愛好者來說都是一項挑戰。如果機械人可以在沒有任何外部指令的情況下自動執行某些操作,那麼可以最大化這種挑戰。電子初學者最常製作的機械人之一是循跡機械人。顧名思義,機械人將遵循表面上繪製的線條。線不必是直線。此外,線條可以是任何顏色。大多數紅外感測器用於檢測線條。紅外感測器可以很...

io阻塞之同步 非同步io(客戶端中)

對於同乙個fd,我一邊往他裡面輸入 用fgets函式 一邊讓他接受伺服器的資料,那麼當我recv沒有收到資料時他會一直等待,即阻塞在這裡,那麼他沒辦法接收來自fgets的輸入資料。如圖,我們的應用程式去呼叫這個recv這個函式,當呼叫的時候我們會進入核心層,核心層去檢測我們套接字有沒有傳過來資料,如...