AVR+IO接口基本结构与输出应用(参考).pptVIP

AVR+IO接口基本结构与输出应用(参考).ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。所有这些I/O口都是双(有的为3)功能复用的。 模拟集成电路的特点 模拟集成电路的特点 其中第一功能均作为数字通用I/O接口使用,复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。 通用I/O接口基本结构与输出应用 I/O口的基本结构 每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。I/O口的工作方式和表现特征由这3个I/O口寄存器控制。 方向控制寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输出方式还是输入方式。 当DDRx=1时,I/O口处于输出工作方式。 当PORTx=1时,I/O引脚呈现高电平,同时可提供输出20mA的电流;而当PORTx=0时,I/O引脚呈现低电平,同时可吸纳20mA电流。 当DDRx=0时,I/O处于输入工作方式 此时引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻。 表6.1是AVR通用I/O端口的引脚配置情况 表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。当PUD=1时,AVR所有I/O内部上拉电阻都不起作用(全局内部上拉无效);而PUD=0时,各个I/O口内部上拉电阻取决于DDRXn的设置。 (1).使用AVR的I/O口,首先要正确设置其工作方式,确定其工作在输出方式还是输入方式。 (2)当I/O工作在输入方式,要读取外部引脚上的电平时,应读取PINxn的值,而不是PORTxn的值。 (3)当I/O工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。 (4)一旦将I/O口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正确的读到外部引脚PINxn的值。 I/O端口寄存器 PA口寄存器—PORTA、DDRA、PINA各个位的具体定义 正确使用AVR的I/O口要注意: (1)先正确设置DDRx方向寄存器,再进行I/O口的读写操作。 (2)AVR的I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效。所以,外部引脚呈现三态高阻输入状态。 (3)用户程序需要首先对要使用的I/O口进行初始化设置,根据实际需要设定使用I/O口的工作方式(输出还是输入),当设定为输入方式时,还要考虑是否使用内部的上拉电阻。 (4)在硬件电路设计时,如能利用AVR内部I/O口的上拉电阻,可以节省外部的上拉电阻。 C语言中的位操作 AVR通用I/O端口的主要特点为: 双向可独立位控的I/O口 Push-Pull大电流驱动 (最大40mA) 可控制的引脚内部上拉电阻 每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电阻。当I/O口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA量级)。 可控的方向寄存器DDRx C语言中的位操作 a | b –- 按位或 这个表达式指示中 a 被表达式中的b 按位进行或运算 这惯用于打开某些位 尤其常用|=的形式 例如 PORTA |= 0x80; // 打开位 7 (最高位) a b –- 按位与 这个运算在检查某些位是否置 1 时有用 例如 If ((PORTA 0x81) == 0) // 检查位 7 和位 0 注意圆括号需要括在运算符的周围 因为它和= = 相比运算优先级较低 这是 C 程序中很多错误的原因之一 a ^ b –- 按位异或 这个运算对一个位取反有用 例如 在下面的例子中 位 7 是被翻转的 PORTA ^= 0x80; // 翻转位 7 ~a –- 按位取反 在表达式中这个运算执行一个取反 当用按位与运算关闭某些位时 与这个运算组合使用尤其有用 如 PORTA = ~0x80;// 关闭位 7 PORTC | = (1BIT0) |( 1BIT3); 1(BIT0)表示逻辑1左移到PORTC 的D0位,结果为0b0000

文档评论(0)

xiaohuer + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档