티스토리 뷰
반응형
# 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 |
댓글
UART.h