개발모듈/펌웨어 모듈
- UART 수신처리
메가아재
2016. 2. 27. 06:28
반응형
unsigned char Rx_Complete; unsigned char RX_BUFF[32]; //수신 인터럽트 서비스 루틴 #pragma vector = USART0_RX_vect __interrupt void USART_interrupt(void) { // 데이터가 수신될때마다 1씩 증가 static unsigned char RX_Count; unsigned char Data; // 수신바이트를 Data에 넣는다. Data = UDR0; // 수신데이터에 에러가 없으면 if(Rx_Complete == 0) { // 스타트 바이트 if(Data == '<') { RX_Count = 1; RX_BUFF[0] = '<'; } else { RX_BUFF[RX_Count++] = Data; if(RX_Count >= 32) {RX_Count = 0;} } // 스톱 바이트 if(Data == '>') { RX_BUFF[RX_Count] = 0; // RX_Count를 0으로 초기화 RX_Count = 0; Rx_Complete = 1; } } } // 수신데이터 처리 함수 void Excute_Serial(void) { // 체크섬 unsigned char Check_Sum; // 체크섬이 RX_BUFF[1] ~ RX_BUFF[5]까지 합해서 RX_BUFF[6]과 비교할 경우 Check_Sum = RX_BUFF[1] + RX_BUFF[2] + RX_BUFF[3] + RX_BUFF[4] + RX_BUFF[5]; // 체크섬이 맞을 경우 if(Check_Sum == RX_BUFF[6]) { ; } // 체크섬이 맞지 않을 경우 else { ; } } // 메인 함수 void main(void) { while(1) { if(Rx_Complete) { Excute_Serial(); Rx_Complete = 0; } } }
반응형