본문 바로가기
Engineering

[AVR] 시리얼 통신

by 투썬 아빠 2009. 8. 6.




LabVIEW를 이용한 시리얼 통신이 전에 테스트 보드를 구현하였다.

시리얼을 이용하여 LED 점등 및 서보모터를 제어 해볼 것이다.




컴파일 및 Writing은 CodeVision을 이용하였다.


- 수신 인터럽트 소스

unsigned int rx_data[9];
int i = 0;
// USART0 Receiver interrupt service routine
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
   char status,data;
   status=UCSR0A;
   data=UDR0;     
   
    
   if(data != 'n')             
   {
        rx_data[i] = atoi((char*)data);
        i++;
   }
   else
        i = 0;                
}

- LED점등을 위한 main 소스
void main()
{
   while(1)
   {
      // Place your code here
        PORTA.0 = rx_data[7];
        PORTA.1 = rx_data[6];
        PORTA.2 = rx_data[5];
        PORTA.3 = rx_data[4];
        PORTA.4 = rx_data[3];
        PORTA.5 = rx_data[2];
        PORTA.6 = rx_data[1];
        PORTA.7 = rx_data[0];

   };
}

아쉽게도 UART통신 및 인터럽트 관련 레지스터 설정에 관한 내용은 생략하도록 한다.

수신완료 인터럽트 루틴에서 UDR0의 값에 'n'이 들어올때 까지 rx_data에 값을 하나씩 저장하고
각 위치에 맞는 값을 PORTA의 각 bit에 대입한다.

LabVIEW로 제어하는 것은 다음에 포스팅 하도록 하겠다.


댓글