原创 AVR单片机IO端口操作方法(ICCAVR)

2009-8-14 09:52 5018 11 11 分类: MCU/ 嵌入式


》》点此进入   http://bbs.armavr.com/   ARM-AVR嵌入式开发论坛


    AVR单片机的IO端口操作是撑握AVR技术的基础,因此需要清晰的理解。下面的例子列出了操作IO端口的方法,资料来源于OURAVR。


举例一:将PB0定义为输出,且输出为高电平



DDRB=BIT(0); //定义 PB0为输出


PORTB|=BIT(0); // PB0 输出高电平


举例二:将PB0PB1定义为输出,PB0PB1均为高电平


DDRB|=BIT(0)|BIT(1); //定义 PB0PB1为输出


PORTB|=BIT(0)|BIT(1);// PB0PB1 输出高电平


举例三:将PB0数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1


PORTB^=BIT(0); //翻转PB0


举例四:将PB0PB1数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1


PORTB^=BIT(0)|BIT(1); // 翻转PB0 PB1


举例五:将PB2PB3定义为输入,不带上拉电阻<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


DDRB&=~(BIT(2)|BIT(3)); //定义 PB2PB3为输入


PORTB&=~(BIT(2)|BIT(3)); // PORT 0,没有上拉电阻


举例六:将PB2PB3定义为输入,带上拉电阻。即没有引用这些引脚时,缺省值为高电平


SFIOR&=~BIT(PUD); // SFIOR寄存器的上拉电阻控制位PUD0,在整个代码中,这句话可以不出现,或仅出现一次即可。因为它是一个控制全部上拉电阻的控制位。


DDRB&=~(BIT(2)|BIT(3)); //定义 PB2PB3为输入


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;

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条