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로 제어하는 것은 다음에 포스팅 하도록 하겠다.
댓글