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 코드가 실행돼서 이런 결과가 생겼다.
즉 의도한 결과를 얻기 위한 코드를 다시 작성을 해보면 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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문 위로 올렸다. 그랬더니 의도한 결과대로 정상 작동하는 것을 확인할 수 있었다.
'언어 > 큐브인턴(Embedded)' 카테고리의 다른 글
[CubeBite] File_Read_Info (0) | 2017.02.08 |
---|---|
PINA, PORTA, DDRA 설명(LED관련) (0) | 2016.10.31 |
LED on/off (0) | 2016.10.28 |
printf 함수 리턴 (0) | 2016.09.30 |
하버드 구조 VS 폰 노이만 구조 (0) | 2016.09.21 |