AVR单片机 - 单片机I/O口的结构的详解与说明

  下图是AVR单片机通用I/O口结构示意图:

  从图中可以看出,每组I/O口配备三个8位寄存器,它们分别是数据方向寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x表示端口序号)。I/O口的工作方式和表现特征由这3个I/O口寄存器控制

  

单片机I/O口的结构的详解与说明

  数据方向寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输出方式还是输入方式。

  当DDRx=1时,I/O口处于输出工作方式。此时数据寄存器PORTx中的数据通过一个推挽电路输出到外部引脚,如下图。AVR的输出采用推挽电路提高了I/O口的输出能力,当PORTx=1时,I/O引脚呈现高电平,同时可提供输出20mA的电流;而当PORTx=0时,I/O引脚呈现低电平,同时可吸纳20mA电流。因此,AVR的I/O在输出方式下提供了比较大的驱动能力,可以直接驱动LED等小功率外围器件。

  

单片机I/O口的结构的详解与说明

  当DDRx=0时,I/O处于输入工作方式。此时引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻,如下图:

 

单片机I/O口的结构的详解与说明

  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口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA量级)。

  DDRx可控的方向寄存器。

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

  AVR单片机通用I/O口设计注意事项:

  数据寄存器PORTx和数据方向寄存器DDRx为读/ 写寄存器,而端口输入引脚PINx为只读寄存器。

  但是需要特别注意的是,对PINx 寄存器某一位写入逻辑“1“ 将造成数据寄存器相应位的数据发生”0“ 与“1“ 的交替变化。

  当寄存器MCUCR 的上拉电阻禁止位PUD置位时所有端口引脚的上拉电阻都被禁止。

  在 高阻态和输出高电平 两种状态之间进行切换时,上拉电阻使能或输出低电平这两种模式必然会有一个发生。编写程序时要注意两者的顺序。

  通常,上拉电阻使能是完全可以接受的,因为高阻状态下强高电平输出还是上拉输出都是可以接受的。

  如果使用情况不是这样,可以通过置位SFIOR 寄存器的PUD 来禁止所有端口的上拉电阻。

  在上拉输入和输出低电平之间切换也有同样的问题。

  用户必须选择高阻态或输出高电平作为中间步骤。

  不论如何配置DDxn,都可以通过读取PINxn 寄存器来获得引脚电平

  PINxn寄存器的各个位与其前面的锁存器组成了一个同步器。

  这样就可以避免在内部时钟状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定。

  其缺点是引入了延迟。

  AVR IO具备多种IO模式:

  1 高阻态 ,多用于高阻模拟信号输入,例如ADC数模转换器输入,模拟比较器输入

  2 弱上拉状态(Rup=20K~50K),输入用。为低电平信号输入作了优化,省去外部上拉电阻,例如按键输入,低电平中断触发信号输入

  3 推挽强输出状态,驱动能力特强(》20mA),可直接推动LED,而且高低驱动能力对称。

  使用注意事项:

  写用PORTx,读取用PINx

  实验时,尽量不要把管脚直接接到GND/VCC,当设定不当,IO口将会输出/灌入 80mA(Vcc=5V)的大电流,导致器件损坏。

  作输入时:

  1、通常要使能内部上拉电阻,悬空(高阻态)将会很容易受干扰。(表面看好像是51的抗干扰能力强,是因为51永远有内部电阻上拉,)

  2、尽量不要让输入悬空或模拟输入电平接近VCC/2,将会消耗太多的电流,特别是低功耗应用场合------CMOS电路的特点

  3、如果先前I/O口为输出状态,设置为输入状态后,必须等待1个时钟周期后才能正确的读到外部引脚PINx的值。

  4、功能模块(中断,定时器)的输入可以是低电平触发,也可以是上升沿触发或下降沿触发。

  5、用于高阻模拟信号输入,切记不要使能内部上拉电阻,影响精确度。例如ADC数模转换器输入,模拟比较器输入

  作输出时:

  采用必要的限流措施,例如驱动LED要串入限流电阻

  复位时:

  复位时内部上拉电阻将被禁用。如果应用中(例如电机控制)需要严格的电平控制,请使用外接电阻固定电平

  休眠时:

  作输出的,依然维持状态不变

  作输入的,一般无效,但如果使能了第二功能(中断使能),其输入功能有效。例如 外部中断的唤醒功能。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AVR单片机是一种由Atmel公司推出的低功耗、高性能的微控制器,广泛应用于各种电子设备中。其中,ATmega48/88/168是AVR系列中较为常见的型号。 ATmega48/88/168具有相似的架构和功能,只是在存储器容量和引脚数方面有所不同。它们都配备了8位的RISC架构核心,运行频率可高达20MHz。通过内置的闪存存储器,可以存储和执行程序代码。通过SRAM和EEPROM存储器,可以实现数据的读写和保存。 这些单片机具有丰富的外设资源,如GPIO(通用输入输出引脚,可以用于连接外部传感器和执行器。它们还提供了用于通信的串行接,如UART(通用异步收发器)和SPI(串行外设接),可以实现与其他设备的数据交换和通信。此外,它们还具备PWM(脉冲宽度调制)输出和定时器/计数器等功能,可用于精确控制电机速度和计时等应用。 为了方便开发者编程和调试,在市场上有许多成熟的集成开发环境(IDE)和编程语言可以使用。例如,使用Atmel Studio软件和C语言,可以轻松编写和调试程序,通过编程器将程序下载到单片机中。 无论是初学者还是经验丰富的工程师,AVR单片机都是理想的选择。它们具有简单易用的特点,支持多种编程语言和开发工具。对于初学者来说,可以通过学习基本的电路原理和编程概念,逐步掌握单片机的使用方法。对于经验丰富的工程师来说,AVR单片机具有强大的性能和灵活的外设资源,可以满足各种复杂应用的需求。 总之,深入浅出AVR单片机从ATmega48/88/168开始,可以让我们了解到其基本架构和功能,为后续学习和应用打下坚实基础。同时,通过掌握其编程和调试技巧,可以实现更多有趣的电子项目和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值