我在STK500编程器板上使用Atmega 16。
我试图打开DDRA上的LED,从0b0000001的Led0到0b1000000的Led7开始。似乎我用了一个>>移位把设置位从寄存器中推出。它不是应该向右移动1吗?
我有这个片段
# define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/io.h>
int main(void)
{
DDRA=0xFF;
char leds=0x01;
while(1)
{
if (leds==0x01)
{
for (int i=0;i<8;i++)
{
PORTA=~leds;
leds=leds<<1;
_delay_ms(300);
}
}
else
for (int x=0;x<8;x++)
{
leds=leds>>1;
PORTA=~leds;
_delay_ms(300);
}
}
}
好像这部分
for (int x=0;x<8;x++)
{
leds=leds>>1;
PORTA=~leds;
_delay_ms(300);
}
将位推出寄存器,但它不应该。我做错了吗?
最佳答案
在第一个循环中,您将1移出。你看不到是因为你在换班前更新了显示器。
在i=0的迭代结束时,led将等于0x02。所以你得到的逻辑如下:
i, leds (end of the loop)
0, 0x02
1, 0x04
2, 0x08
3, 0x10
4, 0x20
5, 0x40
6, 0x80
7, 0x00
关于c - 用>> 1移出寄存器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55041430/