티스토리 뷰
반응형
# USART 라이브러리
AVR ATmega328P Chip 기준으로 하여
Atmel Studio 7.0으로 작성되었습니다.
Update : 2018/01/01
#ifndef _UART_H_ #define _UART_H_ #include <avr/io.h> void UART_INIT(void); // UART 초기화 unsigned char UART_receive(void); // 1바이트 수신 void UART_transmit(unsigned char data); // 1바이트 송신 void UART_printString(char *str); // 문자열 송신 void UART_print8bitNumber(uint8_t no); // 숫자를 문자열로 변환하여 송신 void UART_print16bitNumber(uint16_t no); void UART_print32bitNumber(uint32_t no); #endif
#include "UART.h" void UART_INIT(void) { UCSR0A |= _BV(U2X0); // 2배속 모드 UBRR0H = 0x00; // 통신 속도(보율) 설정 UBRR0L = 207;// 보율 = 9600 // 비동기, 8비트 데이터, 패리티 없음, 1비트 정지 비트 모드 UCSR0C |= 0x06; UCSR0B |= _BV(RXEN0); // 송수신 가능 UCSR0B |= _BV(TXEN0); } unsigned char UART_receive(void) // 1바이트 수신 { while( !(UCSR0A & (1<<RXC0)) ); // 데이터 수신 대기 return UDR0; } void UART_transmit(unsigned char data) // 1바이트 송신 { while( !(UCSR0A & (1<<UDRE0)) ); // 송신 가능 대기 UDR0 = data; } void UART_printString(char *str) // 문자열 송신 { for(int i=0; str[i]; i++) // '\0' 문자를 만날 때까지 반복 UART_transmit(str[i]); // 바이트 단위 출력 } void UART_print8bitNumber(uint8_t no) // 숫자를 문자열로 변환하여 송신, 8비트 { char numString[4] = "0"; int i, index = 0; if(no > 0)// 문자열 변환 { for(i=0; no!=0; i++) { numString[i] = no % 10 + '0'; no = no / 10; } numString[i] ='\0'; index = i-1; } for(i=index; i>=0; i--) // 변환된 문자열 출력 UART_transmit(numString[i]); } void UART_print16bitNumber(uint16_t no) // 숫자를 문자열로 변환하여 송신, 8비트 { char numString[6] = "0"; int i, index = 0; if(no > 0)// 문자열 변환 { for(i=0; no!=0; i++) { numString[i] = no % 10 + '0'; no = no / 10; } numString[i] ='\0'; index = i-1; } for(i=index; i>=0; i--) // 변환된 문자열 출력 UART_transmit(numString[i]); } void UART_print32bitNumber(uint32_t no) // 숫자를 문자열로 변환하여 송신, 8비트 { char numString[11] = "0"; int i, index = 0; if(no > 0)// 문자열 변환 { for(i=0; no!=0; i++) { numString[i] = no % 10 + '0'; no = no / 10; } numString[i] ='\0'; index = i-1; } for(i=index; i>=0; i--) // 변환된 문자열 출력 UART_transmit(numString[i]); }
Ref. 아트멜 스튜디오와 아두이노로 배우는 ATmega328 프로그래밍 (출판사 - 제이펍) |
반응형
'Electronic Engineering > Digital ' 카테고리의 다른 글
uint8/16/32/64_t 의미 (0) | 2018.01.07 |
---|---|
풀업(Pull-Up) 저항과 풀다운(Pull-Down) 저항 (5) | 2018.01.05 |
RS232 / RS422 / RS485 정리 (0) | 2018.01.02 |
UART 와 USART의 차이 (0) | 2017.12.29 |
UART 통신 이론 (0) | 2017.12.29 |
댓글