1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.
판매자 | 맑은소리 | 판매 납포인트 | 무료 | 평점 | 0점 / 총 0명 참여 |
---|
여기저기 찾아 봤는데.. 코드비전에서는 잘되던 통신이 AVR Studio에서는 되지 않아
고생하다 겨우 되는것을 확인한 소스입니다.
저와 같이 고생하신분 혹여있지 않을까 싶어 글을 올립니다.
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
#define F_CPU 16000000 크리스털이 16M일 경우*/
#define UART_BAUD_RATE 9600 /* 9600 baud */
#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)
#define outp(A,B) B=A
#define inp(A) A
typedef unsigned char u08;
typedef char s08;
typedef unsigned short u16;
typedef short s16;
/* uart globals */
static u08 *uart_data_ptr;
static u08 uart_counter;
SIGNAL(SIG_UART_TRANS)
/* signal handler for uart txd ready interrupt */
{
uart_data_ptr++;
if (--uart_counter)
outp(*uart_data_ptr, UDR0); /* write byte to data buffer */
}
SIGNAL(SIG_UART_RECV)
/* signal handler for receive complete interrupt */
{
register char led;
led = inp(UDR0); /* read byte for UART data buffer */
outp(led, PORTD); /* output received byte to PortB (LEDs) */
}
void Byte_Send(unsigned char byData)
{
while(!(UCSR0A & (1<<UDRE)));
UDR0=byData;
}
void uart_send(char *pStr)
/* send buffer <buf> to uart */
{
while(*pStr)
{
Byte_Send(*pStr);
*(pStr++);
}
}
void uart_init(void)
/* initialize uart */
{
DDRE = 0xFE;
UBRR0H = 0; UBRR0L = 103;
UCSR0A = 0;
UCSR0B = 0x18;
UCSR1C = 0x06;
}
int main(void)
{
outp(0xff ,DDRD); /* PortB output */
outp(0x00, PORTD); /* switch LEDs on */
uart_init();
sei(); /* enable interrupts */
uart_send("Serial test##\n");\
}