C语言 将一个引脚配置为输入,另一个引脚配置为输出时,AVR 端口上出现异常行为



在一个基本项目中,我在 ATmega32 上使用 portD 的一个引脚作为输入,用开关连接起来,另一个引脚作为带有 LED 的输出,当我配置输入引脚(引脚 0(时,就像 in 一样配置上拉电阻,然后将输出引脚 (1( 配置为输出,然后刻录代码 尽管我尝试在一行上配置 DDRD,但我的 LED 亮度非常低,但代码运行良好,此问题的任何建议

错误的代码

void main(){
DDRD&=~(0x01);
PORTD|=0x01;
DDRD|=0x02;
while(1)
{
if((PIND & (1<<0)) == 0 )
{
PORTD|=0x02;
}
else
{
PORTD&=~(0x02);
}
}
return;
}

按预期工作(运行良好(的代码,

void main(){
DDRD=0b00000010;
PORTD|=0x01;
while(1)
{
if((PIND & (1<<0)) == 0 )
{
PORTD|=0x02;
}
else
{
PORTD&=~(0x02);
}
}
return;
}

任何人都知道这种行为的原因

打开内部引脚上拉。 阅读 DS 了解更多详情

最新更新