LED 保持亮起。不会打开和关闭
LED stays on. Wont' turn on and off
所以我想做的就是创建一个函数来打开和关闭将被调用到 main 中的 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
或 b
中设置的所有位。所以如果 b == 0
,它不会改变 a
。
您需要在第一次延迟后使用位与运算符。这将设置 a
和 b
:
中设置的所有位
PORTB &= ~(1U<<PORTB5);
反转运算符~
反转掩码,因此它只留下相关位0
,所有其他位都是1
。所以位号PORTB5
将被清除,所有其他保持不变。
注意使用无符号常量。通常建议这样做,因为位运算符和移位是为负值定义的实现,或者如果符号发生变化 - 最好的情况是 未定义的行为 最坏的情况。
或|=
无法使1
变为0
。使用和&=
.
// dummy line to enable highlight
PORTB &= ~(1<<PORTB5); // Set port bit B5 to 0 to turn on the LED
所以我想做的就是创建一个函数来打开和关闭将被调用到 main 中的 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
或 b
中设置的所有位。所以如果 b == 0
,它不会改变 a
。
您需要在第一次延迟后使用位与运算符。这将设置 a
和 b
:
PORTB &= ~(1U<<PORTB5);
反转运算符~
反转掩码,因此它只留下相关位0
,所有其他位都是1
。所以位号PORTB5
将被清除,所有其他保持不变。
注意使用无符号常量。通常建议这样做,因为位运算符和移位是为负值定义的实现,或者如果符号发生变化 - 最好的情况是 未定义的行为 最坏的情况。
或|=
无法使1
变为0
。使用和&=
.
// dummy line to enable highlight
PORTB &= ~(1<<PORTB5); // Set port bit B5 to 0 to turn on the LED