通过前面例子的讲解,已经基本了解了单片机I/O口的使用方法。为了更好、更深入地使用I/O端口,我们来详细讨论一下AVR单片机ATMega16的端口结构。
输入/输出口(I/O口)是单片机可以依靠的唯一控制通道。如果把单片机的核心比作人脑,那么I/O口就相当于人的五官和四肢,负责信息的获取。而动作的执行,没有I/O口的单片机本身就变得毫无意义,所以有必要详细了解它们的内部结构。ATMega16 的端口是一个双向 I/O 端口输入输出端口是一种技术,带有一个可选的上拉电阻。以下是其中一个 I/O 端口的内部结构图(来自数据表)。
上图中,Pxn 为该位的输入/输出端口,为单片机的外部引脚。它通过 PORTxn 寄存器连接到数据总线(DATA BUS)。上例中对 PORTxn 的赋值实际上是通过数据总线写这个寄存器来实现的。图中还可以看出,Pxn和PORTxn之间其实还有一个门控位。如果要将PORTxn的结果输出到Pxn,则门控位必须打开,门控位受控信号来自DDxn(DDRx中的位)寄存器。通过数据总线向该寄存器位写1,可以打开门控位,输出信号可以直接输出到引脚Pxn。这也是为什么如果 MCU 引脚要处于输出状态,DDRx 方向寄存器必须被赋值为 1 的原因。如果给DDxn赋值0,则门控位断开,引脚Pxn不能用作输出,只能用作输入。但是输入信号可以从两个地方取,一个是直接从外部引脚Pxn(图中下半部分)取,其实就是将外部引脚的信号锁存到PINxn寄存器中读取;另一个取自输出寄存器PORTxn(图中门控位控制信号为RRx)。一般称为“取自外部引脚(PINxn)”作为读引脚,“取自寄存器PORTxn”称为读端口寄存器。并且引脚Pxn不能用作输出,而只能用作输入。但是输入信号可以从两个地方取,一个是直接从外部引脚Pxn(图中下半部分)取,其实就是将外部引脚的信号锁存到PINxn寄存器中读取;另一个取自输出寄存器PORTxn(图中门控位控制信号为RRx)。一般称为“取自外部引脚(PINxn)”作为读引脚,“取自寄存器PORTxn”称为读端口寄存器。并且引脚Pxn不能用作输出输入输出端口是一种技术,而只能用作输入。但是输入信号可以从两个地方取,一个是直接从外部引脚Pxn(图中下半部分)取,其实就是将外部引脚的信号锁存到PINxn寄存器中读取;另一个取自输出寄存器PORTxn(图中门控位控制信号为RRx)。一般称为“取自外部引脚(PINxn)”作为读引脚,“取自寄存器PORTxn”称为读端口寄存器。外部引脚的信号被锁存到PINxn寄存器中读取;另一个取自输出寄存器PORTxn(图中门控位控制信号为RRx)。一般称为“取自外部引脚(PINxn)”作为读引脚,“取自寄存器PORTxn”称为读端口寄存器。外部引脚的信号被锁存到PINxn寄存器中读取;另一个取自输出寄存器PORTxn(图中门控位控制信号为RRx)。一般称为“取自外部引脚(PINxn)”作为读引脚,“取自寄存器PORTxn”称为读端口寄存器。
从图中还可以看出,引脚Pxn上方,有一个由MOS管控制的上拉电阻。MOS管同时由PUD位、DDxn位和PORTxn位控制。当引脚用作输入时(DDxn=0),将 PORTxn 赋值为 1 后,PUD 可以控制该引脚是否使用上拉电阻。当 PUD 位为 0 时,上拉up 电阻有效,否则相反。.PUD 存在于寄存器 SFIOR 的第 2 位,见下图。
下图是端口A代表的三个寄存器的具体配置:
从图中可以看出,PORT和DDR寄存器是可读写的,而PIN寄存器是只读的。对于寄存器中各个位的操作,可以在IAR开发环境中直接引用,在第二个例子中已经说明。下表显示了这些寄存器组合的具体配置:
使用 I/O 端口时还有几点需要注意:
1、当用作通用数字 I/O 时,所有 I/O 端口都具有真正的读-修改-写功能。
2、无论DDxn如何配置,都可以通过读取PINxn寄存器来获得引脚电平。
3、读取软件分配的管脚电平时,分配指令和读取指令之间需要至少有一个时钟周期间隔(可以插入一条nop指令)。
4、如果有些管脚不用,建议给这些管脚分配一定的电平。
5、复位时,上拉电阻被禁用,引脚处于高阻抗状态。
6、每个I/O端口在稳态条件下可以承受的拉电流或灌电流为:VCC=5V时为20mA,VCC=3V时为10mA。
7、所有端口的拉电流或灌电流之和不能超过400mA,端口A、B、C、D各自的拉电流或灌电流之和不能超过200mA(DIP封装模式下,端口B、C、D 高达 300mA)。
除了通用数字 I/O 功能外,大多数端口引脚还具有辅助功能,称为端口复用。因为单片机的管脚毕竟是有限的,而且用作通用数字I/O口的管脚大部分情况下不一定用完,所以单片机没必要单独做管脚实现其他功能。例如,A/D(模拟/数字)转换不需要作为单片机的输入引脚,而是直接将此功能附加到 PORTA 的 I/O 端口。这样,PORTA的8个引脚就有了第二个功能,即作为A/D转换的信号输入端。当然,某个时间只能使用其中一个功能,不可能同时使用两个功能,所以称为多路复用。这里需要注意的是,所谓的第二个函数只是一个声明。一些单片机的管脚非常复用,可以实现两个以上的功能。
要实现引脚的第二个功能,端口的内部结构比较复杂,这里不再深入讨论。下面只给出ATMega16单片机引脚复用的第二个功能。
要实现端口的第二个功能,当然必须有相关的寄存器进行选择控制。不同的第二个函数配置的寄存器不同,配置方法也不同,所以要根据实际情况来确定。引脚第二个功能的具体使用将在后续相关讨论中详细介绍
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 欧资源网