1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.
판매자 | 아크마 | 판매 납포인트 | 무료 | 평점 | 0점 / 총 0명 참여 |
---|
#include <stdlib.h>
#include <string-avr.h>
#include <stdio.h>
#include <iom128.h>
#define CR 0x0A
#define LF 0x0D
#define NOTHING 0x00
#define Baud4800 207
#define Baud9600 103
#define Baud14400 68
#define Baud19200 51
#define Baud28800 34
#define Baud38400 25
#define Baud57600 16
#define Baud115200 8
#define PORT0 0
#define PORT1 1
void USART0_Init(unsigned int baud);
void USART1_Init(unsigned int baud);
void put_chr(unsigned char data,int Port);
void delay_ms(unsigned int time_ms);
void put_str(char *str,int LineFeed,int Port);
unsigned char get_chr(int Port);
char temp;
char temp_str[]= {"You have just pressed :"};
int main(void)
{
USART0_Init(Baud115200);
USART1_Init(Baud9600);
delay_ms(20);
put_str("Serial Test program",LF,PORT0);
put_str("English Test",LF, PORT0);
put_str("한글 테스트",LF, PORT0);
put_str("Init OK",LF,PORT0);
put_str("Baudrate is 115200BPS",LF,PORT0);
while(1)
{
}
}
void put_str(char *str,int LineFeed,int Port)
{
unsigned int len;
int i;
len = strlen(str);
for(i=0;i<len;i++)
{
put_chr(str[i],Port);
}
if(LineFeed == LF || LineFeed == CR)
{
put_chr(CR,Port);
put_chr(LF,Port);
}
}
void USART0_Init(unsigned int baud)
{
// UBRR0H = (unsigned char)(baud>>8); // UBRR0L = (unsigned char)baud;
UBRR0H = 0;
UBRR0L = baud;
UCSR0B = (1<<RXEN) | (1<<TXEN);
UCSR0C = (USBS | (3<<UCSZ));
// 8 data bit. 1 Stop bit, for 2 Stop bit : (1 << USBS) istead of USBS
}
void USART1_Init(unsigned int baud)
{
// UBRR1H = (unsigned char)(baud>>8);// UBRR1L = (unsigned char)baud;
UBRR1H = 0;
UBRR1L = baud;
UCSR1B = (1<<RXEN) | (1<<TXEN);
UCSR1C = (USBS | (3<<UCSZ));
// 8 data bit. 1 Stop bit, for 2 Stop bit : (1 << USBS) istead of USBS
}
unsigned char get_chr(int Port)
{
if(Port == 0)
{
while (!(UCSR0A & (1<<RXC)));
// Also u can use it :-> loop_until_bit_is_set(UCSR0A, RXC);
return UDR0;
}
if(Port == 1)
{
while (!(UCSR1A & (1<<RXC)));
// Also u can use it :-> loop_until_bit_is_set(UCSR1A, RXC);
return UDR1;
}
}
void put_chr(unsigned char data,int Port)
{
if(Port == 0)
{
while(!(UCSR0A & (1<<UDRE)));
UDR0 = data;
}
if(Port == 1)
{
while(!(UCSR1A & (1<<UDRE)));
UDR1 = data;
}
}
void delay_ms(unsigned int time_ms)
{
int i,j;
while (time_ms--)
{
for(i=0;i<230;i++)
for(j=0;j<156;j++);
}
}
IAR 컴파일러로 작성된 소스이며 OK-128회로에서 김대종씨가 작성하신 프로그램을 약간 수정하였습니다.
시리얼 통신 회로 RX, TX를 구성하시고 위 프로그램을 사용하시면 됩니다.
각자 필요에 맞게 고쳐서 쓰시면 되겠습니다.