欢迎光临MCUWAY! 本站网名:单片机之路  永久域名:www.mcuway.com

设为首页

加入收藏

电子基础 初学MCU 单片机类型 MCU程序 MCU应用 设计软件 测控电路 技术论坛
 您现在的位置: 单片机之路 >> 单片机类型 >> AVR系列 >> 文章正文

AVR-IO端口使用注意事项

如果有引脚末被使用,建议些引脚赋予一个确定电平。最简单的保证未用引脚具有确定电平的方法是使能内部上拉电阻。
如果刚定义了引脚的输入状态,就要立即回读,可以在回读前,插入一句 _nop()。
系统复位时,DDR全部为0,Port也全部为0,故上拉电阻在复位时会失效。
如何用C语言操纵AVR的IO端口(以ICCAVR为例):
举例一:将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、PB1数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1
PORTB^=BIT(0)|BIT(1); // PB0 输出高电平
举例五:将PB2、PB3定义为输入,不带上拉电阻
DDRB&=~(BIT(2)|BIT(3)); //定义 PB2、PB3为输入
PORTB&=~(BIT(2)|BIT(3)); // 将 PORT 置0,没有上拉电阻
举例六:将PB2、PB3定义为输入,带上拉电阻。即没有引用这些引脚时,缺省值为高电平
SFIOR&=~BIT(PUD); // SFIOR寄存器的上拉电阻控制位PUD置0,在整个代码中,这句话可以不出现,或仅出现一次即可。因为它是一个控制全部上拉电阻的控制位。
DDRB&=~(BIT(2)|BIT(3)); //定义 PB2、PB3为输入
PORTB|=BIT(2)|BIT(3); // 将 PORT 置1,满足上拉电阻的另一个条件
举例七:DDRB=BIT(0)|BIT(1) 与 DDRB|=BIT(0)|BIT(1) 的区别
假定在执行上面两句指令前,DDRB 的状态为: 1000 0000
如果执行 DDRB=BIT(0)|BIT(1) ,DDRB的状态变为: 0000 0011
如果执行 DDRD|=BIT(0)|BIT(1),,DDRB的状态变为: 1000 0011
那前一句会先清空以前的所有状态,后一句保留前面的状态。
在实际应用中,后一句更常用。
举例八:将第三位置1,除了用BIT(3),还有其它的表达方法吗?
DDRB|=BIT(3);
DDRB|=1<<3;
DDRB|=0x08;
DDRB|=0b00001000;

本文由单片机之路(www.mcuway.com)摘选自网络,版权归原作者所有

普通文章28课:单片机音乐汇编程序设计
普通文章27课:单片机的一些基本概念
普通文章26课:单片机矩阵式键盘接口技术
普通文章51单片机教程(从原理开始基于汇编)
普通文章1课:单片机概述
普通文章2课:8051单片机引脚介绍
普通文章3课:单片机存储器结构结构分析
普通文章4课:第一个单片机小程序
普通文章5课:单片机延时程序分析
普通文章6课:单片机并行口结构
普通文章7课:单片机的特殊功能寄存器
普通文章8课:单片机寻址方式与指令系统
普通文章9课:单片机数据传递类指令
普通文章10课:单片机数据传送类指令
普通文章11课:单片机算术运算指令
普通文章12课:单片机逻辑运算类指令
普通文章13课:单片机逻辑与或异或指令祥解
普通文章14课:单片机条件转移指令
普通文章15课:单片机位操作指令
普通文章16课:单片机定时器与计数器
普通文章17课:单片机定时器/计数器的方式控制
普通文章18课:单片机的中断系统
普通文章19课:单片机定时器、中断试验
普通文章20课:单片机定时/计数器实验
普通文章21课:单片机串行口介绍

  • 上一篇文章:
  • 下一篇文章:
  • 更多精彩内容>>>

    普通文章电流单位
    普通文章功率单位
    普通文章什么是达林顿管?
    普通文章晶闸管的作用与原理

    学习单片机的必经之路——单片机之路,永久域名:www.mcuway.com