以ATmega16單片機為例,共有32個通用I/O口,分為4個端口PA,PB,PC,PD,每個端口都包含8個I/O口,如圖所示,每個端口對應一個8位的二進制,對應的i/o管腳順序由高到低排列。
每個I/O口都可以單獨設為輸入或輸出,如上圖中PA口的8個I/O口全部設為輸出,控制8個發(fā)光二極管的亮滅。i/o口除作為輸入輸出口外,還有第二功能,如PA口也作為AD轉(zhuǎn)換的輸入口。
每個端口都具有輸入,輸出,方向控制三個寄存器:
以PA口為例,其他端口相同,方向寄存器DDRA,對應8個的I/O口,1設為輸出,0設為輸入。
輸出寄存器PORTA,對應的I/O口,1輸出高電平,0輸出低電平
輸入寄存器PINA , 若對應的I/O口為高電平,相應的位置1,低電平置0
例如:PA口全部設為輸出,DDRA=0xFF,并且全部輸出低電平,PORTA=0x00;將點亮上圖中的全部發(fā)光二極管。
將PB口的第0位(最低位)設為輸入,其余位設為輸出,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口全部輸出高電平