×
单片机 > 单片机程序设计 > 详情

如何用C语言操纵AVR的IO端口(以ICCAVR为例)

发布时间:2020-08-21 发布时间:
|
举例一:将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 输出高电平                   与0异或,不变,与1异或,原来0的为1,1的为0      

 

举例四:将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;



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会