平行埠為電腦的週邊之一,其功能主要是協助電腦處理外部硬體電路的輸出入資料。輸出埠提供暫存器來暫時記憶欲輸出資料,CPU可以將資料放進輸出埠硬體暫存器之後即可不用再管這份資料,輸出埠暫存器除了記憶了這份資料,也會經由輸出埠接腳將所記憶的資料輸出到外部電路。
AVR ATmega128有ABCDE五個平行輸出埠,五個平行輸入埠,由於平行埠共用接腳接到外部接線,因此也簡稱平行埠Port。這五個埠除了做輸出入埠以外,為節省接線腳位,部份平行埠也與其它功能共用腳位,由於每支腳在一個時間僅能有一個功能,因此實際電路使用上,一個電路僅只使用其中一個功能。
當做為一般數位輸出入功能用時,AVR的平行埠具有完整,設定讀寫與執行讀寫功能,也就是每一個平行埠上的每一個單一接腳都可以被獨立設定為,輸出或輸入,並獨立執行輸出入,不致於影響到其它的接腳
Register-Based平行埠暫存器讀寫
配合平行埠各自擁有的三個一組硬體暫存器,包括平行埠輸出暫存器PORTx,平行埠資料方向暫存器DDRx,以及平行埠輸入暫存器PINx。其中PINx是僅讀,提供使用者讀取硬體週邊的邏輯狀態。PORTx,DDRx則是讀寫都可以,對於輸入暫存器,一般都只能讀進,但輸出暫存器一般除了必需要可以寫出以外,也會提供額外的讀取(回)的功能,這樣子就撰寫應用程式的人就可以讀回先前寫入的內容做為產生新寫入值的參考。
• 輸出入方向設定:借由寫入DDRx特定位元可以指定該位元為輸出(1)或則輸入(0)。
例如:想設定PORTA的高4位元為輸出,低4位元為輸入,可以用
DDRA=0xF0;// 0xF0=0b1111 0000
• 由輸出埠輸出資料:借由寫入 PORTx可以對輸出埠硬體送出邏輯控制訊號。
例如:假設己設定PORTA的高4位元為輸出,低4位元為輸入,則寫入PORTA暫存器,可控制PORTA高4位元b7,b6,b5,b4的電壓準位。其它位元接腳不受影響。設輸出0xA0,0xAF
PORTA=0xA0; // 0xA0=b1010 0000
則PORTA b7,b5 為HI(5V),PORTA b6,b4為LOW(0V)。其他位元不受影響。
PORTA=0xAF; // 0xA0=b1010 1111
也會得到相同的結果,不論b3,b2,b1,b0輸出值為0000或1111。
• 由輸入埠讀取資料:借由讀取 PINx可以取得輸入埠硬體上的電壓準位。
例如:假設己設定PORTA的高4位元為輸出,低4位元為輸入,則讀取PINA暫存器,可以取得高4位元b7,b6,b5,b4輸出值,以及低四位元接腳電壓HI/LOW(5V/0V)
例如:b3,b2,b1,b0 均接到5V 則
DDRA=0xF0;
PORTA=0xA0;
RES=PINA;
//RES值會等於 0xAF,其中A為PORTA=0xA0所設定,而F則為1111。
輸入埠是借由偵測週邊電壓高低來得到知狀態邏輯,假設某一個輸入位元浮接(即沒有接到高電位,也沒接到低電位,而是懸空) 時,則這一位元會隨靜電電位飃動而出現干擾性輸入資料,通常IC會以一個電阻接到地(Pull Low/Pull Down)或一個電阻接到電源(Pull HI/Pull Up)讓這支接腳邏輯固定,以避免干擾。AVR的平行埠輸入電路內部即有Pull Up設計。
#6-7