在编程我的Atmega644 MCU时。为什么PORTD |=0b00100000可以工作,而PORTD |=(PD5
我一直在试图弄明白为什么要排队在编程我的Atmega644 MCU时。为什么PORTD |=0b00100000可以工作,而PORTD |=(PD5,c,microcontroller,atmega,atmel,C,Microcontroller,Atmega,Atmel,我一直在试图弄明白为什么要排队 PORTD |= 0b00100000; 行,但不行 PORTD |= (PD5 <<1); 我有一个连接到PD5的LED,它只在第一个命令时亮起。 我必须定义什么是PD5吗?我从来没有在我的Atmega328P上这样做过,但现在在Atmega644上它不工作了 这里是我包含的库 #define F_CPU 1000000UL // 1MHz internal clock #include <avr/io.h> #inc
PORTD |= 0b00100000;
行,但不行
PORTD |= (PD5 <<1);
我有一个连接到PD5的LED,它只在第一个命令时亮起。
我必须定义什么是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);
示例用法
if ( put_led_on )
LEDON;
else
LEDOFF;
或者感谢你自己的研究
PORTD |= (1<<PD5);
这将把位5设置为1
真的吗?这是一个非常基本的错误,谢谢你的澄清。那么,将PORTD的第5位PIND5设置为1的正确语法是什么呢?在一天结束时,我只想将PIND5的位设置为0或1,而不改变其他位。我不使用AtMega,但我知道它们类似于PICs,经过一些研究后,您需要使用第一种类型的赋值清除并设置适当的位。我已经用一些代码更新了答案。我发现了怎么做,你可以像这样做。对不起,但是你关于这里发生了什么的假设是不正确的。AVR头文件将PD5定义为5,而不是访问PIND第5位的宏。对不起,10==0x0a,而不是0x12,恐怕。。。。另外,最好用括号定义LEDON PORTD |=0x00100000,或者更好地定义LEDON do{PORTD |=0b00100000;}while0。什么是PD5,它是如何定义的?请通过提交示例代码、预期结果和实际结果来阅读和编辑您的问题。你说我必须定义什么是PD5是什么意思?我们应该为您定义它吗?你说不起作用是什么意思???很好。谢谢你指出这一点。
PORTD |= (1<<PD5);