首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用WinAVR实现单片机AVR的基本I/O

用WinAVR实现单片机AVR的基本I/O
EN

Stack Overflow用户
提问于 2015-12-22 12:06:57
回答 1查看 149关注 0票数 0

我想驱动一台无刷直流电机,我使用ATMEGA32作为控制器的CPU,我在读取无刷直流电机的霍尔效应传感器时遇到了问题。

这是我的代码:

代码语言:javascript
复制
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作为输入这是主程序:

代码语言:javascript
复制
       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...

非常感谢

EN

回答 1

Stack Overflow用户

发布于 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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34408272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档