在为我的 Atmega644 MCU 编程时。为什么 PORTD |= 0b00100000 有效,但 PORTD |= (PD5 <<1) 无效?
When programming my Atmega644 MCU. Why does PORTD |= 0b00100000 work, but not PORTD |= (PD5 <<1)?
我一直在努力理解为什么
这行
PORTD |= 0b00100000;
有效,但无效
PORTD |= (PD5 <<1);
我有一个 LED 连接到 PD5,它只在第一个命令时亮起。
我必须定义 "PD5" 是什么吗?我从来不需要在我的 Atmega328P 上这样做,但现在在 Atmega644 上它不起作用?
这是我包含的库
#define F_CPU 1000000UL // 1MHz internal clock
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <avr/interrupt.h>
#include "lcd.h"
不确定是否会引起麻烦?我是否遗漏了一些非常基本的东西?
作业不同。
PORTD |= 0b00100000;
将端口 D 的位 5 设置为 1
而
PORTD |= (PD5 <<1);
将 PORTD 的第 1 位和第 2 位设置为 1(因为 PD5 == 5 和 PD5 << 1 == 10 (0x0A) 即 1010 二进制)
定义一些宏来设置 LED 开或关,避免每次都设置 'bits'
#define LEDON PORTD |= 0b00100000
#define LEDOFF PORTD &= ~0b00100000
用法示例
if ( put_led_on )
LEDON;
else
LEDOFF;
或者感谢你自己的研究
PORTD |= (1<<PD5);
这会将位 5 设置为 1
PORTD |= (PD5 <<1);
PD5
定义为数字 5。将它左移一位得到 10,这与您想要的值无关。
另一方面,1 << PD5
会给你左移 1 5 位的结果,它等于 0b00100000
——正是你想要的。
我一直在努力理解为什么
这行 PORTD |= 0b00100000;
有效,但无效
PORTD |= (PD5 <<1);
我有一个 LED 连接到 PD5,它只在第一个命令时亮起。 我必须定义 "PD5" 是什么吗?我从来不需要在我的 Atmega328P 上这样做,但现在在 Atmega644 上它不起作用?
这是我包含的库
#define F_CPU 1000000UL // 1MHz internal clock
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <avr/interrupt.h>
#include "lcd.h"
不确定是否会引起麻烦?我是否遗漏了一些非常基本的东西?
作业不同。
PORTD |= 0b00100000;
将端口 D 的位 5 设置为 1
而
PORTD |= (PD5 <<1);
将 PORTD 的第 1 位和第 2 位设置为 1(因为 PD5 == 5 和 PD5 << 1 == 10 (0x0A) 即 1010 二进制)
定义一些宏来设置 LED 开或关,避免每次都设置 'bits'
#define LEDON PORTD |= 0b00100000
#define LEDOFF PORTD &= ~0b00100000
用法示例
if ( put_led_on )
LEDON;
else
LEDOFF;
或者感谢你自己的研究
PORTD |= (1<<PD5);
这会将位 5 设置为 1
PORTD |= (PD5 <<1);
PD5
定义为数字 5。将它左移一位得到 10,这与您想要的值无关。
1 << PD5
会给你左移 1 5 位的结果,它等于 0b00100000
——正是你想要的。