第 6 章 通用 I/O 接口基本结构与输出应用从本章开始,将从 AVR 单片机的基本功能单元入手,讲解其各个外围功能部件的基本组成和特性,以及它们的应用。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 口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。6.1 通用 I/O 口的基本结构与特性6.1.1 I/O 口的基本结构图 6-1 为 AVR 单片机通用 I/O 口的基本结构示意图。从图中可以看出,每组 I/O 口配备三个 8 位寄存器,它们分别是方向控制寄存器 DDRx,数据寄存器 PORTx,和输入引脚寄存器 PINx(x=A\B\C\D)。I/O 口的工作方式和表现特征由这 3 个 I/O 口寄存器控制。物理引脚PINxPORTxDDRx00?? 数 据 总 线上拉方向:输入上拉: OFF由于刚开始学习 I/O 的应用,读者还没有掌握中断和定时计数器的使用,所以在本章的实例中,调用了 CVAVR 提供的软件延时函数来实现时间延时等待的功能。需要指出的是,使用软件延时的方式会造成 MCU 效率的下降,而且也不能实现精确的延时,所以在一般情况下应尽量不使用软件延时的方式。在后面的章节里,会逐步介绍如何使用 T/C 和中断实现延时的正确方法。图 6-1 通用 I/O 口结构示意图方向控制寄存器 DDRx 用于控制 I/O 口的输入输出方向,即控制 I/O 口的工作方式为输出方式还是输入方式。当 DDRx=1 时,I/O 口处于输出工作方式。此时数据寄存器 PORTx 中的数据通过一个推挽电路输出到外部引脚(图 6-2)。AVR 的输出采纳推挽电路提高了 I/O 口的输出能力,当PORTx=1 时,I/O 引脚呈现高电平,同时可提供输出 20mA 的电流;而当 PORTx=0 时,I/O 引脚呈现低电平,同时可吸纳 20mA 电流。因此,AVR 的 I/O 在输出方式下提供了比较大的驱动能力,可以直接驱动 LED 等小功率外围器件。当 DDRx=0 时,I/O 处于输入工作方式。此时引脚寄存器 PINx 中的数据就是外部引脚的实际电平,通过读 I/O 指令可将物理引脚的真实数据读入 ...