新聞中心

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

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

作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
AVR端口(DDxn,PORTxn)配置及其說(shuō)明

引腳序號(hào) 引腳名稱 引腳功能

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

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

其輸出緩沖器具有對(duì)稱的驅(qū)動(dòng)特

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

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

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

MOSI SPI 總線的主機(jī)輸出/ 從機(jī)輸入信號(hào)

PB6 8 位雙向 I/O 口
2
MISO SPI 總線的主機(jī)輸入/ 從機(jī)輸出信號(hào)

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

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

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

6 GND 地

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

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

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 兩線串行總線時(shí)鐘線

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

PC2 8 位雙向 I/O 口
21
TCK JTAG 測(cè)試時(shí)鐘

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

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

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

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

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

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

27 AVCC 引腳應(yīng)直接與VCC 連接。使用 ADC 時(shí)應(yīng)通過(guò)一個(gè)低

通濾波器與 VCC 連接。

28 AGND A/D 的模擬地

29 AREF A/D 的模擬基準(zhǔn)輸入引腳

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 外部計(jì)數(shù)器輸入

XCK USART 外部時(shí)鐘輸入/ 輸出

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

PB2 8 位雙向 I/O 口

42 AIN0 模擬比較正輸入

INT2 外部中斷 2 輸入

43 PB3 8 位雙向 I/O 口


AIN1 模擬比較負(fù)輸入

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

44 SS SPI 從機(jī)選擇引腳

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

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

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

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

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

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

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

子,可以通過(guò)置位 SFIOR 寄存器的 PUD 來(lái)禁止所有端口的上拉電阻.
在上拉輸入和輸出低電平之間切換也有同樣的問(wèn)題。用戶必須選擇高阻態(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 阻 說(shuō)明

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

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

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

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

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

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

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

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

*/



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

評(píng)論


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

關(guān)閉