【发布时间】:2020-03-17 16:03:35
【问题描述】:
我不想通过按钮获得 Atmega16L 的输入。理想情况下,我可以使用内部引体向上,所以我不必将它们连接到外部。
我已经把代码精简到最少:
void main(void) {
// SFIOR &= ~(1<<PUD); // Turn off Pull-up disable
DDRD = 0xFF; // Output PORT D
DDRA = 0x00; // Input PORT A
PORTA = 0xFF; // Pull-up on PORT A
_delay_ms(100);
while (1)
{
if (PINA & (1<<PA1)) // Check if PA0 is High
PORTD |= (1<<PD5); // Set PD5 to High
else
PORTD &= ~(1<<PD5); // Set PD5 to Low
}
return;}
我想,引脚 PD5 应该是高电平,因为 PA1 被内部上拉电阻拉高,设置在第 6 行。 但是不,当我运行代码时,引脚 PD5 为低电平,我必须将引脚 PA1 连接到 5V,以便在 PD5 上获得高信号。
简短的东西,看起来引体向上没有激活......
据我所知,如果尝试使用 SFIOR,但默认情况下禁用 PUD。
亲切的问候, 费利克斯
编辑:请求的图像:
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
-
确保项目的配置和编译包含与所选 CPU 相关的所有定义。您还可以提供已编译二进制文件的反汇编吗? (通常在
.lss文件中)
标签: c++ microcontroller atmega atmel atmega16