ICC AVR 左移问题

2019-07-15 10:27发布

屏幕截图(33).png
程序的大意是,前面部分7脚亮灭(目的是看看程序是否运行),然后左移n位--脚亮灭。用temp来左移实现位操作置高熄灭。但是实际是temp左移1,2位可以实现灭,大于3后就一直亮着,程序仍然循环,只是n脚不灭。
不至于能够左移2位,不能左移大于3位吧!我直接把PORTA=PORTA|(3<<temp)改为PORTA=PORTA|0x08后又是可以熄灭的。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
追风逐月
2019-07-16 12:53
人中狼 发表于 2017-6-15 18:56
没用过AVR,你需要查一下芯片手册,STM32是有专门的寄存器来给引脚置1和置0,51里可以用与和或的方法赋值,比如置P1.0为1,可以是P1 |= 0X01,置P1.0为0,可以是P1 &=0XFE。

51可以直接P1.1=a,但是AVR不可以,只能是PORTA=0xnn,也就是只能8位一起操作,而且还是赋常量,变量我还没想出来怎么用逻辑来实现,貌似逻辑实现不了。PORTA |= (a<<n),如果PORTA的n位是1,而我的变量a是0,那就不行了,而用&也有相应问题。

一周热门 更多>