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端口(以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那前一句会先清空曾经的一切状况,后一句保存前面的状况。