static int putch_uart0(char message, FILE * stream)
{
while((UCSR0A&0x20) == 0);
UDR0 = message;
if(message == '\n')
putch_uart0('\r', stream);
return 0;
}
라는 함수로 uart연결된 장비(ex: 블루투스 , serial)로 출력 한다
fdevopen(putch_uart0,0);를 init 부분에 넣어주면
printf와 putch_uart0 함수와 연결이 되면서 표준C에서 쓰는 것처럼 printf로 uart0 port 에 연결 된 장비에 출력 을 할수 있다
블루투스를 연결하여 LED제어
ex)
#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>
char rx_char(void) {
while((UCSR0A&0x80) == 0);
return UDR0; }
void tx_char(char tx_data){
while((UCSR0A&0x20) == 0);
UDR0 = tx_data; }
static int putch_uart0(char message, FILE * stream)
{
while((UCSR0A&0x20) == 0);
UDR0 = message;
if(message == '\n')
putch_uart0('\r', stream);
return 0;
}
int main(void)
{
fdevopen(putch_uart0,0);
char i, data;
DDRB = 0xff; PORTB = 0xFF; PORTB=0x01;
UCSR0A = 0x00;
UCSR0B = 0x98;
UCSR0C = 0x06;
UBRR0H = 0x00;
UBRR0L = 103;
while(1)
{
data = rx_char();
tx_char(data);//받은데이터를 그대로 전송해줌으로인해서 데이터가 잘 도착했는지 확인한다
if(data=='1') {
PORTB=0x01;
}
if(data=='2') {
PORTB=0x00;
}
}
}
return 0;
}
간단한 LED제어다
하지만 usb to serial(rs232) 모듈이 없고 까다로운 디버깅을 해야할때 유용하게 쓸수있다
'AVR' 카테고리의 다른 글
아트메가 328 부트로더 (0) | 2016.07.20 |
---|