移出寄存器 >>1
Bit Shifting out of register with >>1
我在 STK500 编程板上使用 Atmega 16。
我正在尝试打开 DDRA 上的 LED,从 0b00000001 的 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 的迭代结束时,leds 将等于 0x02。所以你得到以下这个逻辑:
i, leds (end of the loop)
0, 0x02
1, 0x04
2, 0x08
3, 0x10
4, 0x20
5, 0x40
6, 0x80
7, 0x00
我在 STK500 编程板上使用 Atmega 16。 我正在尝试打开 DDRA 上的 LED,从 0b00000001 的 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 的迭代结束时,leds 将等于 0x02。所以你得到以下这个逻辑:
i, leds (end of the loop)
0, 0x02
1, 0x04
2, 0x08
3, 0x10
4, 0x20
5, 0x40
6, 0x80
7, 0x00