AVR端口(DDxn,PORTxn)配置及其說明
引腳序號 引腳名稱 引腳功能
本文引用地址:http://m.butianyuan.cn/article/201611/315758.htm8 位雙向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<
_NOP();
/* 讀取端口引腳 */
i = PINB;
}
/**************************未連接引腳的處理****************************************/
/*
如果有引腳未被使用,建議給這些引腳賦予一個確定電平。雖然如上文所述,在深層休眠模式下大多數(shù)數(shù)字輸入被禁用,但還是需要避免因引腳沒有確定的電平而造成懸空引腳在
其它數(shù)字輸入使能模式 ( 復位、工作模式、空閑模式 ) 消耗電流。最簡單的保證未用引腳具有確定電平的方法是使能內(nèi)部上拉電阻。但要注意的是復位時上拉電阻將被禁用。如
果復位時的功耗也有嚴格要求則建議使用外部上拉或下拉電阻。不推薦直接將未用引腳與 VCC 或 GND 連接,因為這樣可能會在引腳偶然作為輸出時出現(xiàn)沖擊電流。
*/
評論