首页 理论教育I/O端口的作用和使用方法

I/O端口的作用和使用方法

【摘要】:图4-41I/O引脚等效原理图本节所有的寄存器和位以通用格式表示:小写的“x”表示端口的序号,而小写的“n”代表位的序号,但是在程序里要写完整。通用数字I/O的端口为具有可选上拉电阻的双向I/O端口。图4-42通用数字I/O说明:WRx、WPx、WDx、RRx、RPx和RDx对于同一端口的所有引脚都是一样的。注意SBI指令能够用来改变端口的单个位。表4-15端口引脚配置

作为通用数字I/O使用时,AVR所有的I/O端口都具有真正的读—修改—写功能。这意味着用SBI或CBI指令改变某些管脚的方向(或者是端口电平、禁止/使能上拉电阻)时不会改变其他管脚的方向(或者是端口电平、禁止/使能上拉电阻)。输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻,并有保护二极管与V CC和地相连,如图4-41所示。

图4-41 I/O引脚等效原理图

本节所有的寄存器和位以通用格式表示:小写的“x”表示端口的序号,而小写的“n”代表位的序号,但是在程序里要写完整。例如,PORTB3表示端口B的第3位,而本节的通用格式为PORTxn。每个端口都有三个I/O存储器地址:数据寄存器ORTx、数据方向寄存器——DRx和端口输入引脚——INx。数据寄存器和数据方向寄存器为读/写寄存器,而端口输入引脚为只读寄存器。但是需要特别注意的是,对PINx寄存器的某一位写入逻辑“1”将造成数据寄存器相应位的数据发生“0”与“1”的交替变化。当寄存器MCUCR的上拉禁止位PUD置位时所有端口的全部引脚的上拉电阻都被禁止,多数端口引脚是与第二功能复用的。通用数字I/O的端口为具有可选上拉电阻的双向I/O端口。图4-42所示为通用数字I/O。

图4-42 通用数字I/O

说明:(1)WRx、WPx、WDx、RRx、RPx和RDx对于同一端口的所有引脚都是一样的。clk I/O、SLEEP和PUD则对所有的端口都是一样的。

(2)配置引脚每个端口引脚都具有三个寄存器位:DDxn、PORTxn和PINxn,如P75“I/O端口寄存器的说明”所示。DDxn位于DDRx寄存器,PORTxn位于PORTx寄存器,PINxn位于PINx寄存器。DDxn用来选择引脚的方向,当DDxn为“1”时,Pxn配置为输出;否则为输入。引脚配置为输入时,若PORTxn为“1”,上拉电阻使能。如果需要关闭这个上拉电阻,可以将PORTxn清零,或者将这个引脚配置为输出。复位时各引脚为高阻态,即使此时并没有时钟在运行。

(3)当引脚配置为输出时,若PORTxn为“1”,引脚输出高电平(“1”),否则输出低电平(“0”)。使引脚电平交替变化,不论DDRxn是什么内容,向PINxn写逻辑“1”就会使PORTxn的值在“0”和“1”来回变化。注意SBI指令能够用来改变端口的单个位。

(4)输入与输出之间的切换在(高阻态)三态({DDxn,PORTxn}=0b00)和输出高电平({DDxn,PORTxn}=0b11)两种状态之间进行切换时,上拉电阻使能({DDxnPORTxn}=0b01)或输出低电平({DDxn,PORTxn}=0b10),这两种模式必然会有一个发生。通常,上拉电阻使能是完全可以接受的,因为高阻环境并不在乎是强高电平输出还是上拉输出。如果实际应用环境不允许这样,则可以通过置位MCUCR寄存器的PUD来禁止所有端口的上拉电阻。在上拉输入和输出低电平之间切换也有同样的问题。用户必须选择高阻态({DDxn-PORTxn}=0b00)或输出高电平({DDxn,PORTxn}=0b11)作为中间步骤,如表4-15所示。

表4-15 端口引脚配置