您的位置 首页 IC

AVR 的 IO 端口特性与使用

AVR的IO端口特性分析:分析IO引脚Pxn。DDRxn只有为1时,可控单向开关才工作,PORTxn的数值才能通过可控单向开送到Pxn.结论:DDRxn=1时,为…

AVRIO端口特性剖析:

剖析IO引脚Pxn。DDRxn只要为1时,可控单向开关才作业,PORTxn的数值才干经过可控单向开送到Pxn.

定论:DDRxn=1时,为输出状况。输出值等于PORTxn。所以,DDRxn为方向寄存器。PORTxn为数据寄存器。

剖析上拉电阻。E的电位为0时,即D为1时,上拉电阻有用。

从与门的输入剖析,只要以下的条件一起满意时,上拉电阻才有用

1、PUD为0

2、DDxn为0

3、PORTxn为1

定论是:只要DDRxn = 0即管脚界说为输入状况,并且PORTxn=1,并且UPD设置为0时,上拉电阻才收效。

剖析Pxn及SLEEP。只要当SLEEP = 0时,可控开关2才导通,SD1不作业,施密特触发器的输入等于Pxn,信号送到同步器后读取。

定论:Pxn不管在输入或输出状况都能被AVR读取。SLEEP=0时输入才干被读取。

AVR的IO端口的运用注意事项:

假如有引脚末被运用,主张些引脚赋予一个确认电平。最简略的确保未用引脚具有确认电平的办法是使能内部上拉电阻。

假如刚界说了引脚的输入状况,就要当即回读,能够在回读前,刺进一句_nop()。

体系复位时,DDR悉数为0,Port也悉数为0,故上拉电阻在复位时会失效。

如何用C言语操作AVR的IO端口(以%&&&&&%CAVR为例):

举例一:将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、PB1口

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/252167.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部