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
Posted by 知彼知己百戰不殆
,