int main(void)
{
unsigned char uc_Data=0x0A;
USART_Tx(uc_Data);
while(1)
{
//if( (UCSR0B & (1<<RXEN0)) != 0 )
DDRA = 0xAA;
_delay_ms(8000);
DDRA = ~DDRA;
}
return 0;
}
의도한 결과: 1010 1010(0xAA)과 0101 0101(0x55)이 약간의 시간을 두고 교대로 왔다갔다 하면서 켜지게 하고 싶다.
실제 보드에 올린 결과: 1010 1010(AA) 형태로만 불이 들어왔다. 깜빡임이 없었다.
이유: DDRA = ~DDRA; 에서 반복문이 걸리기 때문에 DDRA = 0xAA; 코드가 다시 실행되고, 즉 0101 0101로 바뀌고 나서 delay가 없으므로 순식간에 다시 1010 1010 코드가 실행돼서 이런 결과가 생겼다.
즉 의도한 결과를 얻기 위한 코드를 다시 작성을 해보면 다음과 같다.
| int main(void) { unsigned char uc_Data=0x0A; USART_Tx(uc_Data); DDRA = 0xAA; while(1) { //if( (UCSR0B & (1<<RXEN0)) != 0 ) _delay_ms(8000); DDRA = ~DDRA; } return 0; }
|
|
DDRA = 0xAA; 코드를 while문 위로 올렸다. 그랬더니 의도한 결과대로 정상 작동하는 것을 확인할 수 있었다.