AVR单片机i/o(输入/输出)端口详解

发布者:幸福时刻最新更新时间:2015-05-15 来源: 51hei关键字:AVR单片机  输入  输出 手机看文章 扫描二维码
随时随地手机看文章
通过前面示例的讲解,已基本知道了单片机I/O端口的用法。为了更好、更深入地运用好I/O端口,下面再来详细讨论一下AVR单片机ATMega16的端口结构。

输入/输出端口(I/O端口)是单片机所能依赖进行控制的唯一通道,如果把单片机内核比作人的大脑,那I/O端口就相当于人的五官和四肢,负责着信息的获取和动作的执行,如果没有I/O端口单片机本身就变得毫无意义,因此很有必要来详细了解它们的内部结构。ATMega16的端口为具有可选上拉电阻的双向I/O端口,下面是其中某一位I/O口的内部结构图(来自于Datasheet)。
 
在上图中,Pxn就是这一位的输入/输出端口,也就是单片机的某个外部引脚。它通过PORTxn寄存器和数据总线(DATA BUS)相连。前面示例中对PORTxn的赋值其实就是通过数据总线来写这个寄存器实现的。在图中还可以看到,在Pxn和PORTxn之间实际上还串有一个门控位,如果要让PORTxn的结果输出至Pxn,那这个门控位必须得打开,而该门控位的受控信号来自于DDxn(DDRx中的一位)寄存器。通过数据总线对该寄存器位写1,就可打开门控位,让输出信号直接输出至引脚Pxn。这也正是为什么单片机引脚要处于输出状态就必须要给DDRx方向寄存器赋值1的原因所在。如果给DDxn赋值0,则门控位断开,引脚Pxn不能做为输出,只能做为输入。但输入信号可以取自两个地方,一个是直接从外部引脚Pxn来取(图中的下半部分),实际上是把外部引脚的信号锁存到PINxn寄存器中来读取;另一个则是从输出寄存器PORTxn来取(图中门控位控制信号为RRx的地方)。一般称“从外部引脚(PINxn)来取”为读引脚,称“从寄存器PORTxn来取”为读端口寄存器。
从图中还可以看出,在引脚Pxn的上方,有一个受控于MOS管的上拉电阻。而MOS管又同时受到PUD位、DDxn位和PORTxn位的共同控制。当引脚做为输入时(DDxn=0),在给PORTxn赋值1后,通过PUD就可以控制引脚是否使用上拉电阻。当PUD位为0时,上拉电阻有效,否则相反。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的八个引脚就有了第二功能,即做为A/D转换的信号输入端。当然,在某个时刻只能使用其中的一种功能,不可能两种功能同时使用,所以才称之为复用。这里要注意,所谓的第二功能只是一种说法,有些单片机的引脚复用的很厉害,可以实现两种以上的功能。
要实现引脚的第二功能,其端口内部结构较为复杂,这里就不再进行深入探讨了,以下仅给出ATMega16单片机引脚复用的第二功能。
 
要实现端口的第二功能,当然还必须得有相关的寄存器来进行选择控制。不同的第二功能所配置的寄存器不同,配置方式也不一样,因此要根据实际情况来确定。引脚第二功能的具体使用会在后续的相关讨论中进行详细讲述
关键字:AVR单片机  输入  输出 引用地址:AVR单片机i/o(输入/输出)端口详解

上一篇:基于AVR单片机I/O演示C语言程序
下一篇:基于ATmega128的32路遥脉单元设计及应用

推荐阅读最新更新时间:2024-03-16 14:02

51单片机之IO口扩展
我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来),有并入串出的(相对前者而言)。具体用哪种类型要根据我们得实际情况。比如利用单片机显示数码管单纯的显示一个数码管如果仅仅是为了显示 那么动用单片机一个端口(如P0或P1/P2/P3)那没有什么,当然这里我说的数码管是8段的(如果利用BCD类型 16进制数码管那么只需四个即可)就拿51类型的单片机来说,总共32个I/O口,一般如果不是做太大的工程是完全够用的,但有些时候你会恨单片机怎么不多长几条“腿”,怎么省还是不够用。这个时候就需要
[单片机]
51单片机之<font color='red'>IO</font>口扩展
arm驱动linux异步通知与异步IO
《 linux异步通知与异步IO》涉及内核驱动函数二个,内核结构体一个,分析了内核驱动函数二个;可参考的相关应用程序模板或内核驱动模板二个,可参考的相关应用程序模板或内核驱动三个 描述:设备文件IO访问:阻塞与非阻塞io访问,poll函数提供较好的解决设备访问的机制,但是如果有了异步通知整套机制就更加完整了 一、阻塞 I/O,非阻塞IO,异步I/O 1、阻塞 I/O :挂起进程一直等待设备可访问后再访问 2、非阻塞IO:进程进行对设备访问一次,不可访问时,继续执行下一条指令 3、异步I/O:非常类似于硬件上 中断 的概念(硬件去call软件,内核去call应用程序);信号是在软件层次上对中断机制的一种模拟; a)原理:信号是
[单片机]
arm驱动linux异步通知与异步<font color='red'>IO</font>
STM32F0xx_TIM输入捕获(计算频率)配置详细过程
前言 关于STM32的定时器,可谓是功能强大,估计没有多少人研究完STM32定时器的所有功能(包括我也没有),只是使用常用的一些功能,后续我会推出关于STM32定时器的更多功能。 STM32芯片多数为16位计数,但基本上都有1个或两个32位的定时器,可惜的是我们最常使用的F1系列芯片中没有32位的定时器,F030中也没有,具体请看数据手册。 今天主要总结关于STM32F0系列输入捕获,捕获信号频率,即所谓逻辑分析仪检测数字频率的功能。 今天使用32位的TIM2作为捕获的定时器,为什么是32位,原因很简单,就是为了捕获(采集)更宽频率的波形,今天提供的工程可以采集0Hz - 10MHz的波形(建议2MHz
[单片机]
STM32F0xx_TIM<font color='red'>输入</font>捕获(计算频率)配置详细过程
德州仪器推出首款输出电压高达100V的汽车级多相位同步升压控制器
日前,德州仪器(TI) 宣布推出三款支持高效率及高功率密度的宽泛输入电压同步 升压控制器 。 LM5122Q 多相位升压控制器可提供业界最宽的输入输出电压范围,而低静态电流 TPS43060 与 TPS43061 升压控制器则支持1 MHz 工作频率,采用小型QFN 封装。 与非同步升压控制器相比,TI 最新同步升压控制器可通过采用同步开关代替续流二极管将效率提高达10%。无损电感DCR 电流传感可进一步提高效率,减少热耗散,从而可节省板级空间,降低材料清单成本。每款升压控制器都支持热关断、频率同步、打嗝模态电流限制以及可调线路欠压锁定功能。 LM5122Q 是一款符合AEC-Q100 标准的同步升压控制器,支持3 V
[汽车电子]
德州仪器推出首款<font color='red'>输出</font>电压高达100V的汽车级多相位同步升压控制器
浅析NAMUR输出物位开关产品带来的问题
  目前,在国内物位开关中,传感器常用的输出方式主要有五种:继电器输出、二线制输出、晶体管输出、无接触输出和NAMUR输出,其中以NAMUR输出方式最为少见。那么,是什么原因导致NAMUR输出方式在国内物位开关的应用稀少呢?   这是因为在物位开关中,采用NAMUR输出方式会带来不少问题。   首先,采用NAMUR输出方式的物位开关采购成本较高。   根据NAMUR输出的工作原理(详情参见http://www.jiweimeter.com/baikeshow-88-751-1.html),其采用低压供电、微电流输出,与二线制输出类似,用在有防爆要求的危险场所。但由于其所采用的电流、电压更小,安全栅的功率更低,对电路结构
[测试测量]
基于TOPSwitch超宽输入隔离式稳压开关电源设计
引言 开关电源 (Switching Power Supply)自问世以来,就以其稳定、高效、节能等优良性能而成为稳压电源的主要产品。而高度集成化的单片开关电源,更是因其高性价比、简单的外围电路、小体积与重量和无工频变压器隔离方式等优势而成为稳压电源中的佼佼者。随着各种不同的单片开关电源芯片及其电路拓扑的应用和推广,单片开关电源越来越体现出巨大的实用价值和美好前景。但是,TOPSwitch通常允许的输入电压变化范围为120~370V,本文尝试用它制作更宽输入电压变化范围(80~550V)的稳压电源。实验结果证明是很成功的。 芯片结构及稳压原理 近十几年来,美国电源集成公司(PI)、摩托罗拉公司(Motorola)、意-法半导
[电源管理]
基于TOPSwitch超宽<font color='red'>输入</font>隔离式稳压开关电源设计
如何从SD卡读取音频文件并将其输出到扬声器上?
开篇第一步 在上一篇教程中,创建了一个 I2S 发送器用来发送来从FPGA内部 ROM 的音频数据。下一步,我们向该 I2S 发送器添加 AXI-Stream 接口,这样我们就可以将发送器与 ZYNQ 的处理系统连接,还可以从 SD 卡读取音频数据。 为此,创建一个新的top设计。本设计应具有以下接口: 该块设计产生以下代码: entityAXIS_I2Sis Generic(RATIO:INTEGER:=8; WIDTH:INTEGER:=16 ); Port(MCLK:inSTD_LOGIC; nReset:inSTD_LOGIC; LRCLK:outSTD_LOGIC; SCLK:outSTD_LOG
[嵌入式]
如何从SD卡读取音频文件并将其<font color='red'>输出</font>到扬声器上?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved