以ATmega16單片機(jī)為例,共有32個(gè)通用I/O口,分為4個(gè)端口PA,PB,PC,PD,每個(gè)端口都包含8個(gè)I/O口,如圖所示,每個(gè)端口對(duì)應(yīng)一個(gè)8位的二進(jìn)制,對(duì)應(yīng)的i/o管腳順序由高到低排列。
每個(gè)I/O口都可以單獨(dú)設(shè)為輸入或輸出,如上圖中PA口的8個(gè)I/O口全部設(shè)為輸出,控制8個(gè)發(fā)光二極管的亮滅。i/o口除作為輸入輸出口外,還有第二功能,如PA口也作為AD轉(zhuǎn)換的輸入口。
每個(gè)端口都具有輸入,輸出,方向控制三個(gè)寄存器:
以PA口為例,其他端口相同,方向寄存器DDRA,對(duì)應(yīng)8個(gè)的I/O口,1設(shè)為輸出,0設(shè)為輸入。
輸出寄存器PORTA,對(duì)應(yīng)的I/O口,1輸出高電平,0輸出低電平
輸入寄存器PINA , 若對(duì)應(yīng)的I/O口為高電平,相應(yīng)的位置1,低電平置0
例如:PA口全部設(shè)為輸出,DDRA=0xFF,并且全部輸出低電平,PORTA=0x00;將點(diǎn)亮上圖中的全部發(fā)光二極管。
將PB口的第0位(最低位)設(shè)為輸入,其余位設(shè)為輸出,DDRB=0xFE;
if ((PINB&0x01)==1) //判斷PB口的第0位的輸入狀態(tài),是0還是1.
PORTA=0x00; //如果PB口的第0位等于1,即PA口的第0位輸入高電平,那么PA口全部輸出低電平
else
PORTA=0xFF;//如果PB口的第0位等于0,即PA口的第0位輸入低電平,那么PA口全部輸出高電平