以ATmega16单片机为例,共有32个通用I/O口,分为4个端口PA,PB,PC,PD,每个端口都包含8个I/O口,如图所示,每个端口对应一个8位的二进制,对应的i/o管脚顺序由高到低排列。
每个I/O口都可以单独设为输入或输出,如上图中PA口的8个I/O口全部设为输出,控制8个发光二极管的亮灭。i/o口除作为输入输出口外,还有第二功能,如PA口也作为AD转换的输入口。
每个端口都具有输入,输出,方向控制三个寄存器:
以PA口为例,其他端口相同,方向寄存器DDRA,对应8个的I/O口,1设为输出,0设为输入。
输出寄存器PORTA,对应的I/O口,1输出高电平,0输出低电平
输入寄存器PINA , 若对应的I/O口为高电平,相应的位置1,低电平置0
例如:PA口全部设为输出,DDRA=0xFF,并且全部输出低电平,PORTA=0x00;将点亮上图中的全部发光二极管。
将PB口的第0位(最低位)设为输入,其余位设为输出,DDRB=0xFE;
if ((PINB&0x01)==1) //判断PB口的第0位的输入状态,是0还是1.
PORTA=0x00; //如果PB口的第0位等于1,即PA口的第0位输入高电平,那么PA口全部输出低电平
else
PORTA=0xFF;//如果PB口的第0位等于0,即PA口的第0位输入低电平,那么PA口全部输出高电平