基于Proteus的AVR单片机C语言程序设计与仿真
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.2 ATmega16通用数字I/O端口的介绍

ATmega16芯片有PORTA,PORTB,PORTC、PORTD(简称PA,PB,PC,PD)4组8位,共32路通用I/O端口,分别对应于芯片上的32个I/O引脚。所有这些I/O端口都具有双功能复用,有的还具有3功能复用。其中第一功能均作为通用数字I/O接口使用,而复用功能则分别用于中断、定时/计数器、USRAT、I2C通信、SPI通信、模拟比较、捕捉等应用场合。

作为通用数字I/O使用时,所有的I/O端口都具有真正的读-修改-写功能。这意味着用SBI或CBI指令改变某些引脚的方向(或者是端口电平、禁止/使能上拉电阻)时不会无意地改变其他引脚的方向(或者是端口电平、禁止/使能上拉电阻)。

1.PA端口

PA端口为一个8位的双向I/O端口,它有3个I/O寄存器地址,分别为数据寄存器PORTA、数据方向寄存器DDRA和PA端口的输入引脚寄存器PINA。其中PORTA的I/O(数据)地址为0x1B(0x003B);DDRA的I/O(数据)地址为0x1A(0x003A);PINA的I/O(数据)地址为0x19(0x0039)。PINA为只读寄存器,而DDRA和PORTA为可读/写寄存器。对PINA寄存器的某一位写逻辑“1”将造成数字寄存器的相应位发生“0”与“1”的翻转。

当DDRA=1时,I/O端口处于输出工作方式,此时数据寄存器PORTA中的数据通过一个推挽电路输出到外部引脚。AVR的输出采用推挽电路是为了提高I/O口的输出能力。当PORTA=1时,I/O引脚呈现高电平,同时可以吸收20mA的电流以直接驱动LED显示。

当DDRA=0时,I/O端口处于输入工作方式,输入引脚寄存器PINA中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRA=0),通过PORTA的控制,可设置是否使用内部的上拉电阻。

当特殊功能寄存器SFIOR的上拉禁止位PUD被置位时,所有端口的引脚都被禁止。不论如何配置DDRAn,都可以通过读引脚PINAn来获得该引脚上的逻辑电平。PA端口的引脚配置如表4-14所示。

表4-14 PA端口的引脚配置

PA端口引脚具有与可选的外部数据SRAM有关的第二功能,即PA端口在访问外部数据存储器时,可以配置为复用的低位地址/数据线。在该模式下,PA端口有内部的上拉电阻。与PA端口有关的寄存器及输出引脚如表4-15所示。

表4-15 与PA端口有关的寄存器及输出引脚

2.PB端口

PB端口为一个8位的双向I/O端口,它有3个I/O寄存器地址,分别为数据寄存器PORTB、数据方向寄存器DDRB和PB端口的输入引脚寄存器PINB。其中PORTB的I/O(数据)地址为0x18(0x0038);DDRB的I/O(数据)地址为0x17(0x0037);PINB的I/O(数据)地址为0x16(0x0036)。PINB为只读寄存器,而DDRB和PORTB为可读/写寄存器。对PINB寄存器的某一位写逻辑“1”将造成数字寄存器的相应位发生“0”与“1”的翻转。

当DDRB=1时,I/O端口处于输出工作方式,此时数据寄存器PORTB中的数据通过一个推挽电路输出到外部引脚。AVR的输出采用推挽电路是为了提高I/O口的输出能力。当PORTB=1时,I/O引脚呈现高电平,同时可以吸收20mA的电流以直接驱动LED显示。

当DDRB=0时,I/O端口处于输入工作方式,输入引脚寄存器PINB中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRB=0),通过PORTB的控制,可设置是否使用内部的上拉电阻。

当特殊功能寄存器SFIOR的上拉禁止位PUD被置位时,所有端口的引脚都被禁止。不论如何配置DDRBn,都可以通过读引脚PINBn来获得该引脚上的逻辑电平。PB端口的引脚配置如表4-16所示。

表4-16 PB端口的引脚配置

PB端口引脚具有与可选的外部数据SRAM有关的第二功能,即PB端口在访问外部数据存储器时,可以配置为复用的低位地址/数据线。在该模式下,PB端口有内部的上拉电阻。与PB端口有关的寄存器及输出引脚如表4-17所示。

表4-17 与PB端口有关的寄存器及输出引脚

3.PC端口

PC端口为一个8位的双向I/O端口,它有3个I/O寄存器地址,分别为数据寄存器PORTC、数据方向寄存器DDRC和PC端口的输入引脚寄存器PINC。其中PORTC的I/O(数据)地址为0x15(0x0035);DDRC的I/O(数据)地址为0x14(0x0034);PINC的I/O(数据)地址为0x13(0x0033)。PINC为只读寄存器,而DDRC和PORTC为可读/写寄存器。对PINC寄存器的某一位写逻辑“1”将造成数字寄存器的相应位发生“0”与“1”的翻转。

当DDRC=1时,I/O端口处于输出工作方式,此时数据寄存器PORTC中的数据通过一个推挽电路输出到外部引脚。AVR的输出采用推挽电路是为了提高I/O口的输出能力。当PORTC=1时,I/O引脚呈现高电平,同时可以吸收20mA的电流以直接驱动LED显示。

当DDRC=0时,I/O端口处于输入工作方式,输入引脚寄存器PINC中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRC=0),通过PORTC的控制,可设置是否使用内部的上拉电阻。

当特殊功能寄存器SFIOR的上拉禁止位PUD被置位时,所有端口的引脚都被禁止。不论如何配置DDRCn,都可以通过读引脚PINCn来获得该引脚上的逻辑电平。PC端口的引脚配置如表4-18所示。

表4-18 PC端口的引脚配置

PC端口引脚具有与可选的外部数据SRAM有关的第二功能,即PC端口在访问外部数据存储器时,可以配置为复用的低位地址/数据线。在该模式下,PC端口有内部的上拉电阻。与PC端口有关的寄存器及输出引脚如表4-19所示。

表4-19 与PC端口有关的寄存器及输出引脚

4.PD端口

PD端口为一个8位的双向I/O端口,它有3个I/O寄存器地址,分别为数据寄存器PORTD、数据方向寄存器DDRD和PD端口的输入引脚寄存器PIND。其中PORTD的I/O(数据)地址为0x12(0x0032);DDRD的I/O(数据)地址为0x11(0x0031);PIND的I/O(数据)地址为0x10(0x0030)。PIND为只读寄存器,而DDRD和PORTD为可读/写寄存器。对PIND寄存器的某一位写逻辑“1”将造成数字寄存器的相应位发生“0”与“1”的翻转。

当DDRD=1时,I/O端口处于输出工作方式,此时数据寄存器PORTD中的数据通过一个推挽电路输出到外部引脚。AVR的输出采用推挽电路是为了提高I/O口的输出能力。当PORTD=1时,I/O引脚呈现高电平,同时可以吸收20mA的电流以直接驱动LED显示。

当DDRD=0时,I/O端口处于输入工作方式,输入引脚寄存器PIND中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRD=0),通过PORTD的控制,可设置是否使用内部的上拉电阻。

当特殊功能寄存器SFIOR的上拉禁止位PUD被置位时,所有端口的引脚都被禁止。不论如何配置DDRDn,都可以通过读引脚PINDn来获得该引脚上的逻辑电平。PD端口的引脚配置如表4-20所示。

表4-20 PD端口的引脚配置

PD端口引脚具有与可选的外部数据SRAM有关的第二功能,PD端口在访问外部数据存储器时,可以配置为复用的低位地址/数据线。在该模式下,PD端口有内部的上拉电阻。与PD端口有关的寄存器及输出引脚如表4-21所示。

表4-21 与PD端口有关的寄存器及输出引脚