1

111111sdfaf의 이미지
ktd2004의 이미지

혹시 "unsigned char led"???

111111sdfaf의 이미지

1

bushi의 이미지

led<<= 1 의 결과로 led 변수가 b10000000, 즉 128 이 된 시점부터 코드의 어떤 부분을 타고 어떻게 흘러갈지 보세요.

111111sdfaf의 이미지

1

ktd2004의 이미지

혹시 이거 한번 테스트해보시겠어요.

unsigned char led = ...;
....
if (led == (unsigned char)128)
{
    ...
}
111111sdfaf의 이미지

1

ktd2004의 이미지

단순하게 128에 LED가 안켜지는게 문제라면 논리적인 문제아닌가요?

// 여기서 128로 변경
led <<= 1;
if (led == 128) {
    // 128이므로 다른 값으로 변경
}

즉, 코드상으로 128로 변경후에 바로 조건에 의해서 값이 다시 변경되어버리므로
실제 포트로 출력은 되지 않을 것 같은데요...
111111sdfaf의 이미지

1

111111sdfaf의 이미지

1

ktd2004의 이미지

이런식은 어떤가요?

if (led == 128) {
    ...
} else {
    led <<= 1;
}
라스코니의 이미지

아래처럼 하면요?

while(1)
{ 
   PORTB = led; //LED
   __delay_ms(250); //0.25
 
   if(led == 128)
   {
      led = data*1;
      data = data*2;
      if(data==128)
      {
         data=1;
      }
   }
   else
      led <<= 1;
}
<\code>
 
순서만 바꿔 봤습니다.