ATMEAG16L单片机有32个通用I/O口,分为PA、PB、PC和PD四组,每组都是8位。这些I/O口都可以通过各自的端口寄存器设置成输入和输出(即作为普通端口使用),有些I/O口还具有第二功能(我们在后面使用到这些第二功能时再介绍)。
ATMEAG16L单片机的I/O口在不考虑第二功能时,其基本输入、输出功能都是相同的。下图为AT-MEAG16L单片机I/O口的结构图。每个端口对应方向寄存器DDRX(×=A、B、C、D)、端口寄存器PORTX(X=A、B、C、D)、输入引脚PINX(X=A、B、C、D)3个寄存器,各个端口的工作状况都可以通过对DDRX、PORTX和PINX的操作来完成。所有AVR单片机的I/0端口都具有读、写和修改功能。
AT-MEAG16L单片机I/O口的结构图
ATMEAGl6L的I/O端口的组合控制设置见附表。
ATMEAGl6L的I/O端口的组合控制设置表" width="514" height="482" border="0" onload="return imgresize(this);" style="cursor:pointer;" onclick="javascript:window.open(this.src);"/>
ATMEAG16L单片机每一组I/O口的所有管脚都可以单独选择上拉电阻。引脚缓冲器可以吸收20mA的电流,能够直接驱动LED显示。如果设置了弱上拉电阻,当管脚被拉低时,引脚会输出电流。
DDRX DDRX为端口方向寄存器,当DDRX的某一位置1时相应引脚作为输出使用。反之,当DDR×的某一位置O时,对应的引脚作为输入使用。
例:DDRB=O×F0;∥此语句将PB端口的PBO~PB3位设为输入, 而PB4~PB7位设为输出。
PORTX PORTX为端口数据寄存器,如果引脚设为输出,则对PORTX进行写操作即改变引脚的输出值。
例:DDRB=OxFF;∥此语句将PB端口的PBO~PB7位设为输出。
PORTB=0×55; ∥PB 端 口 输出01010101。
例:DDRB=O×00;∥此语句将PB端口的PBO~PB7位设为输入。
PORTB=0×F0;∥PBO~PB3位不设上拉,无信号输入时处高阻态。PB4~PB7位设为上拉,无信号输入时处高电平。
PINX PINX是相应端口的输入引脚地址,如果希望读取引脚的逻辑电平值, 一定要读取PINX,而不是PORTX。注意:PINX是只读的,不能对其赋值。
例:DDRB=0x00;∥此语句将PB端口的PBO~PB7位设为输入。
PORTB=0×FF;∥PB0~PB7位设为上拉,无信号输入时处高电平。
temp=PINB;∥将PB口引脚信号读入变量temp中。