gpt4 book ai didi

c - LED 保持亮起。不会打开和关闭

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:19 27 4
gpt4 key购买 nike

所以我要做的就是创建一个函数来打开和关闭将调用到主函数中的 LED。 LED 亮起,但不会打开和关闭。我的代码有什么问题?

我正在使用 ATmega328p 开发板和 Atmel Studio 6.2

#define F_CPU 16000000UL // 16MHz clock from the debug processor
#include <avr/io.h>
#include <util/delay.h>

dot();

int main()
{
DDRB |= (1<<DDB5);
while(1)
{
dot();
}
}

int dot()
{
PORTB |= (1<<PORTB5); // Set port bit B5 to 1 to turn on the LED
_delay_ms(200); // delay 200mS
PORTB |= (0<<PORTB5); // Set port bit B5 to 0 to turn on the LED
_delay_ms(200); // delay 200mS
}

最佳答案

阅读有关位运算符的信息。 a |= b 设置 a 中的所有位,这些位在 a b 中设置。所以如果 b == 0,它不会改变 a

您需要在第一次延迟后使用位与运算符。这将设置 a b 中设置的所有位:

PORTB &= ~(1U<<PORTB5);

反转运算符~反转掩码,因此它只留下相关位0,所有其他位都是1。因此位号 PORTB5 将被清除,所有其他保持不变。

注意使用无符号常量。通常建议这样做,因为位运算符和移位是为负值或符号更改定义的实现 - 最好的情况是 未定义的行为 最坏的情况。

关于c - LED 保持亮起。不会打开和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32686008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com