AVR--IO结构分析

发布者:fuehrd努力的最新更新时间:2020-07-23 来源: 51hei关键字:AVR  结构分析 手机看文章 扫描二维码
随时随地手机看文章

下图为AVR单片机通用I/O口的基本结构示意图。从图中可以看出,每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=ABCD)。I/O口的工作方式和表现特征由这3个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指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻(下图)

技术图片

通用I/O口输出工作方式示意图

 技术图片

通用I/O口输入工作方式示意图(带内部上拉)


I/O口引脚配置表

 技术图片

表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。当PUD=1时,AVR所有I/O内部上拉电阻都不起作用(全局内部上拉无效);而PUD=0时,各个I/O口内部上拉电阻取决于DDRXn的设置。

 

注意:

1) 使用AVRI/O口,首先要正确设置其工作方式,确定其工作在输出方式还是输入方式。

2) 当I/O工作在输入方式,要读取外部引脚上的电平时,应读取PINxn的值,而不是PORTxn的值。

3) 当I/O工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。

4) 一旦将I/O口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正确的读到外部引脚PINxn的值。

 

AVR通用I/O端口的主要特点为:

●双向可独立位控的I/O口

ATmega16的PA、PB、PC、PD四个端口都是8位双向I/O口,每一位引脚都可以单独的进行定义,相互不受影响。如用户可以在定义PA口第0、2、3、4、5、6位用于输入的同时定义第1、7位用于输出,互不影响。

●Push-Pull大电流驱动 (最大40mA)

每个I/O口输出方式均采用推挽式缓冲器输出,提供大电流的驱动,可以输出(吸入)20mA的电流,因而能直接驱动LED显示器

●可控制的引脚内部上拉电阻

每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电阻。当I/O口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA量级)。

●DDRx可控的方向寄存器。

AVR的I/O端口结构同其它类型单片机的明显区别是,AVR采用3个寄存器来控制I/O端口。一般单片机的I/O仅有数据寄存器和控制寄存器,而AVR还多了一个方向控制器,用于控制I/O的输入输出方向。由于输入寄存器PINx实际不是一个寄存器,而是一个可选通的三态缓冲器,外部引脚通过该三态缓冲器与MCU的内部总线连接,因此,读PINx时是读取外部引脚上的真实和实际逻辑值,实现了外部信号的同步输入。这种结构的I/O端口,具备了真正的读-修改-写(Read-Modify-Write)特性。

技术图片

通用I/O口逻辑功能示意图              

         

图为AVR一个(位)通用I/O口的逻辑功能图。右上面的两个D触发器为方向控制寄存器和数据寄存器。

 

1) 使用AVR的I/O口,首先要正确设置其工作方式,确定其工作在输出方式还是输入方式。

2) 当I/O工作在输入方式,要读取外部引脚上的电平时,应读取PINxn的值,而不是PORTxn的值。

3) 当I/O工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。

4) 一旦将I/O口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正确的读到外部引脚PINxn的值。

 

上面的第4点是由于在PINxn和AVR内部数据总线之间有一个同步锁存器(图中的SYNCHRONIZER)电路,使用该电路避免了当系统时钟变化的短时间内外部引脚电平也同时变化而造成的信号不稳定的现象,但它有产生大约一个时钟周期(0.5~1.5)的时延。

关键字:AVR  结构分析 引用地址:AVR--IO结构分析

上一篇:AVR--IO设置编程
下一篇:AVR第1课:准备阶段

推荐阅读最新更新时间:2024-11-09 23:04

stm32 MDK5软件仿真之查看io口输出
第一步,编译程序,查看编译输出窗口,没有报错,也没有警告,再点击调试按钮 第二步,设置要查看的引脚端口,点击Setup 第三步,点击插入 第四步,输入要查看的引脚,例如GPIOA_Pin_0引脚,则输入PORTA.0,注意,A后面有一个小数点,而且都是大写,不能是小写 \ 此刻会出现一个错误,软件无法识别我们设置的端口引脚 点击图中所示的按钮,设置工程 点击Debug标签,转到设置Debug界面,修改里面的文本 修改为如图所示文本,其中两个方框需要根据实际使用的微控制器型号而改动 设置完成后点击OK重新设置要查看的端口引脚,点击空白部分,设置完成后,点击Close
[单片机]
stm32 MDK5软件仿真之查看<font color='red'>io</font>口输出
AVR开发 Arduino方法(二) 中断子系统
在了解中断子系统之前,首先要了解中断的概念。你正在看书,这时电话响了,你会怎么做呢?相信大多数人会这样:先标记看到的位置,接完电话回来后继续阅读。这就是一个现实生活中中断的例子,我们把“电话响了”成为中断源。Arduino UNO R3的主处理器ATMega328P拥有26个中断源,如下表所示: 向量号 程序地址 中断源 中断定义 中断服务程序名称 1 0x0000 RESET 外部电平复位,上电复位,掉电检测复位,看门狗复位 2 0x0002 INT0 外部中断请求0 INT0_vect 3 0x0004 INT1 外部中断请求1 INT1_vect 4 0x0006 P
[单片机]
AVR单片机IO端口操作方法
AVR单片机的IO端口操作是撑握AVR技术的基础,因此需要清晰的理解。下面的例子列出了操作IO端口的方法,资料来源于OURAVR。 举例一:将PB0定义为输出,且输出为高电平 DDRB=BIT(0); //定义 PB0为输出 PORTB|=BIT(0); // PB0 输出高电平 举例二:将PB0、PB1定义为输出,PB0、PB1均为高电平 DDRB|=BIT(0)|BIT(1); //定义 PB0、PB1为输出 PORTB|=BIT(0)|BIT(1);// PB0、PB1 输出高电平 举例三:将PB0数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1 PORTB^=BIT(0); //翻转PB0口 举例四:将PB0、
[单片机]
stm32 PB3 PB4 PA15引脚作为普通IO口使用指南
stm32的PB3 PB4 PA15引脚可以在使用SWD仿真和烧录的情况下释放出来,作为普通IO口使用。 初始化代码如下: GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
[单片机]
STM32的IO口的8种配置(GPIO)
1STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出) ①浮空输入_IN_FLOATING ②带上拉输入_IPU ③带下拉输入_IPD ④模拟输入_AIN ⑤开漏输出_OUT_OD ⑥推挽输出_OUT_PP ⑦复用功能的推挽输出_AF_PP ⑧复用功能的开漏输出_AF_OD 1.1I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的
[单片机]
STM32F4的IO设置测试
环境: 主机:WIN7 开发环境:MDK4.72 MCU:STM32F407VGT6 说明: 目标板上有一个LED,有一个按键,按键实现LED状态翻转. LED:PE2,低电平亮,高电平灯灭 按键:PC13,低电平按下,高电平松开 源代码: main.c /********************************************************************* * 主文件 * (c)copyright 2014,jdh * All Right Reserved *新建日期:2014/3/2
[单片机]
avr单片机电源管理及其睡眠模式配置说明
睡眠模式可以使应用程序关闭 MCU 中没有使用的模块,从而降低功耗。AVR 具有不同 的睡眠模式,允许用户根据自己的应用要求实施剪裁。 /* 状态寄存器SREG bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 I T H S V N Z C I:全局中断使能位。 在I置位后,单独的中断使能由不同的中断寄存器控制。若I为0,则禁止中断。 MCU控制寄存器MCUCR bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 SM2 SE S
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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