我想驱动一台无刷直流电机,我使用ATMEGA32作为控制器的CPU,我在读取无刷直流电机的霍尔效应传感器时遇到了问题。
这是我的代码:
DDRB=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5);
DDRD=(0<<0)|(0<<1)|(0<<2)|(0<<3);
PORTD=(1<<0)|(1<<1)|(1<<2)|(1<<3);PORTB作为输出,PORTD作为输入这是主程序:
if (~(PORTD &(1<<0)) && PORTD &(1<<1) && ~(PORTD &(1<<2))) /// 0 1 0
{
PORTB=(1<<0)|(0<<1)|(0<<2)|(1<<3)|(0<<4)|(0<<5);
}
else if (~(PORTD &(1<<0)) && PORTD &(1<<1) && PORTD &(1<<2)) /// 0 1 1
{
PORTB=(0<<0)|(0<<1)|(0<<2)|(1<<3)|(0<<4)|(1<<5);
}
...........我的答案是这个程序不能读取霍尔效应传感器的逻辑零(0),所以无刷直流电机不能正常运行,如何读取AVR ATMEGA32中的多个输入?我使用Codeblock和winavr...
非常感谢
发布于 2016-01-14 02:08:07
我真的不明白你想要做什么,但是如果你想从atmega 32中的端口D读取,你不需要处理'PORTD‘寄存器,还有另一个叫做'PIND’的寄存器,这是你读取数字信号的寄存器。也没有">DDRD=(0<<0)|(0<<1)|(0<<2)|(0<<3);“;如果你想清除一位(将位设置为逻辑0),你只需使用逐位not和移位的1(例如DDRD = ~(1<<bitnumber)
https://stackoverflow.com/questions/34408272
复制相似问题