新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > AVR端口(DDxn,PORTxn)配置及其說明

AVR端口(DDxn,PORTxn)配置及其說明

作者: 時間:2016-11-18 來源:網(wǎng)絡 收藏
AVR端口(DDxn,PORTxn)配置及其說明

引腳序號 引腳名稱 引腳功能

本文引用地址:http://m.butianyuan.cn/article/201611/315758.htm

8 位雙向I/O 口, 具有可編程的內(nèi)部上拉電阻

其輸出緩沖器具有對稱的驅(qū)動特

性,可以輸出和吸收大電流。作為輸入使用時,
PB5
1 若內(nèi)部上拉電阻使能,端口被外部電路拉

低時將輸出電流。在復位過程中,即使系統(tǒng)

時鐘還未起振,端口A 處于高阻狀態(tài)。

MOSI SPI 總線的主機輸出/ 從機輸入信號

PB6 8 位雙向 I/O 口
2
MISO SPI 總線的主機輸入/ 從機輸出信號

PB7 8 位雙向 I/O 口
3
SCK SPI 總線的串行時鐘

復位輸入引腳。持續(xù)時間超過最小門限時間的低電
4 RESET
平將引起系統(tǒng)復位。

5 VCC 數(shù)字電路的電源

6 GND 地

7 XTAL2 反向振蕩放大器的輸出端

8 XTAL1 反向振蕩放大器與片內(nèi)時鐘操作電路的輸入端

PD0 8 位雙向 I/O 口
9
RXD USART 輸入引腳

PD1 8 位雙向 I/O 口
10
TXD USART 輸出引腳

PD2 8 位雙向 I/O 口
11
INT0 外部中斷 0 的輸入

PD3 8 位雙向 I/O 口
12
INT1 外部中斷 1 的輸入

PD4 8 位雙向 I/O 口
13
OC1B T/C1 輸出比較B 匹配輸出

PD5 8 位雙向 I/O 口
14
OC1A T/C1 輸出比較A 匹配輸出

PD6 8 位雙向 I/O 口
15
ICP1 T/C1 輸入捕捉引腳

PD7 8 位雙向 I/O 口
16
OC2 T/C2 輸出比較匹配輸出

17 VCC 數(shù)字電路的電源

18 GND 地

PC0 8 位雙向 I/O 口
19
SCL 兩線串行總線時鐘線

PC1 8 位雙向 I/O 口
20
SDA 兩線串行總線數(shù)據(jù)輸入/ 輸出線

PC2 8 位雙向 I/O 口
21
TCK JTAG 測試時鐘

PC3 8 位雙向 I/O 口
22
TMS JTAG 測試模式選擇

PC4 8 位雙向 I/O 口
23
TDO JTAG 測試數(shù)據(jù)輸出

PC5 8 位雙向 I/O 口
24
TDI JTAG 測試數(shù)據(jù)輸入

PC6 8 位雙向 I/O 口
25
TOSC1 定時振蕩器引腳 1

PC7 8 位雙向 I/O 口
26
TOSC2 定時振蕩器引腳 2

端口A 與A/D轉(zhuǎn)換器的電源。。不使用ADC 時,該

27 AVCC 引腳應直接與VCC 連接。使用 ADC 時應通過一個低

通濾波器與 VCC 連接。

28 AGND A/D 的模擬地

29 AREF A/D 的模擬基準輸入引腳

PA7 8 位雙向 I/O 口
30
ADC7 ADC 輸入通道 7

PA6 8 位雙向 I/O 口
31
ADC6 ADC 輸入通道 6

PA5 8 位雙向 I/O 口
32
ADC5 ADC 輸入通道 5

PA4 8 位雙向 I/O 口
33
ADC4 ADC 輸入通道 4

PA3 8 位雙向 I/O 口
34
ADC3 ADC 輸入通道 3

PA2 8 位雙向 I/O 口
35
ADC2 ADC 輸入通道 2

36 PA1 8 位雙向 I/O 口

ADC1 ADC 輸入通道 1

PA0 8 位雙向 I/O 口
37
ADC0 ADC 輸入通道 0

38 VCC 數(shù)字電路的電源

39 GND 地

PB0 8 位雙向 I/O 口

40 T0 T/C0 外部計數(shù)器輸入

XCK USART 外部時鐘輸入/ 輸出

PB1 8 位雙向 I/O 口
41
T1 T/C1 外部計數(shù)器輸入

PB2 8 位雙向 I/O 口

42 AIN0 模擬比較正輸入

INT2 外部中斷 2 輸入

43 PB3 8 位雙向 I/O 口


AIN1 模擬比較負輸入

OC0 T/C0 輸出比較匹配輸出

44 SS SPI 從機選擇引腳

Atmega16單片機有32個通用I/O口,有PA ~PD四組,每組都是8位。其主要的寄存器有DDRXn(X=A,B,C,D;n=0,2,…,7,下同),PORTXn和PINXn。

DDRX是方向寄存器,可讀可寫。在寫操作時用于制定PX口是作為輸入口還是輸出口;在讀操作時,從DDRX寄存器讀出來的是端口的方向設(shè)定值。DDRX寄存器的初始值為0x00。

PORTX是數(shù)據(jù)寄存器,可讀寫。在寫操作時,從PORTX寫入的數(shù)據(jù)存入內(nèi)部鎖存器,以確定端口的工作狀態(tài)或者將寫入的數(shù)據(jù)送到外部數(shù)據(jù)總線。PORTX寄存器的初始值為0x00。

PINX用來訪問端口X的邏輯值,且只允許讀操作。從PINX讀入的數(shù)據(jù)只是X口引腳的邏輯 狀態(tài)。其初始值為高阻態(tài)。

/************************************引腳配置**************************************************/
/*
引腳配置為輸入時,若 PORTxn 為 "1“ ,上拉電阻將使能。如果需要關(guān)閉這個上拉電阻, 可以將 PORTxn 清零,或者將這個引腳配置為輸出。復位時各引腳為高阻態(tài),即使此

時并沒有時鐘在運行。
當引腳配置為輸出時,若 PORTxn 為 "1“ ,引腳輸出高電平("1“) ,否則輸出低電平(“0“)。
在 ( 高阻態(tài) ) 三態(tài) ({DDxn, PORTxn} = 0b00) 輸出高電平 ({DDxn, PORTxn} = 0b11) 兩種狀態(tài)之間進行切換時,上拉電阻使能 ({DDxn, PORTxn} = 0b01) 或輸出低電平

({DDxn, PORTxn} = 0b10) 這兩種模式必然會有一個發(fā)生。通常,上拉電阻使能是完全可以接受的,因為高阻環(huán)境不在意是強高電平輸出還是上拉輸出。如果使用情況不是這樣

子,可以通過置位 SFIOR 寄存器的 PUD 來禁止所有端口的上拉電阻.
在上拉輸入和輸出低電平之間切換也有同樣的問題。用戶必須選擇高阻態(tài) ({DDxn, PORTxn} = 0b00) 或輸出高電平 ({DDxn, PORTxn}=0b10) 作為中間步驟
*/
void IO_change(void)
{
//高阻態(tài)
DDxn=0;
PORTxn=0;
//禁止所有端口的上拉電阻
SFIOR|=1<//輸出高電平
DDxn=0xff;
PORTxn=0xff;
//使能所有端口的上拉電阻
SFIOR&=~(1<}

void IO_change_A(void)
{//高阻態(tài)
DDxn=0;
PORTxn=0;
//上拉電阻使能 ({DDxn, PORTxn} = 0b01) 或輸出低電平 ({DDxn, PORTxn} = 0b10)
DDxn=0;
PORTxn=0xff;
/*
DDxn=0xff;
PORTxn=0;
*/
//輸出高電平
DDxn=0xff;
PORTxn=0xff;

}
void IO_changge_B()
{//上拉輸入
DDxn=0;
PORTxn=0xff;
//高阻態(tài) ({DDxn, PORTxn} = 0b00) 或輸出高電平 ({DDxn, PORTxn}=0b11)
DDxn=0;
PORTxn=0;
/*
DDxn=0xff;
PORTxn=0xff;
*/
//輸出低電平
DDxn=0xff;
PORTxn=0;

}
/******************************************讀取引腳的數(shù)據(jù)***************************************/
void read_PINX(void)
{
/*

PUD 上拉電
DDxn PORTxn (in SFIOR) I/O 阻 說明

0 0 X Input No 高阻態(tài) (Hi-Z)

0 1 0 Input Yes 被外部電路拉低時將輸出電流

0 1 1 Input No 高阻態(tài) (Hi-Z)

1 0 X Output No 輸出低電平 ( 吸收電流 )

1 1 X Output No 輸出高電平 ( 輸出電流 )
不論如何配置 DDxn ,都可以通過讀取PINxn 寄存器來獲得引腳電平.PINxn 寄存器的各個位與其前面的鎖存器組成了一個同步器,這樣就可以避免在內(nèi)部時鐘狀態(tài)發(fā)生改變的短時

間范圍內(nèi)由于引腳電平變化而造成的信號不穩(wěn)定.引入了延遲是必然的。
*/
unsigned char i;
/* 定義上拉電阻和設(shè)置高電平輸出 */
/* 為端口引腳定義方向 */
PORTB = (1<DDRB = (1</* 為了同步插入 nop指令 */
_NOP();
/* 讀取端口引腳 */
i = PINB;
}
/**************************未連接引腳的處理****************************************/
/*
如果有引腳未被使用,建議給這些引腳賦予一個確定電平。雖然如上文所述,在深層休眠模式下大多數(shù)數(shù)字輸入被禁用,但還是需要避免因引腳沒有確定的電平而造成懸空引腳在

其它數(shù)字輸入使能模式 ( 復位、工作模式、空閑模式 ) 消耗電流。最簡單的保證未用引腳具有確定電平的方法是使能內(nèi)部上拉電阻。但要注意的是復位時上拉電阻將被禁用。如

果復位時的功耗也有嚴格要求則建議使用外部上拉或下拉電阻。不推薦直接將未用引腳與 VCC 或 GND 連接,因為這樣可能會在引腳偶然作為輸出時出現(xiàn)沖擊電流。

*/



關(guān)鍵詞: AVR端口DDxnPORTx

評論


技術(shù)專區(qū)

關(guān)閉