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

+ Recent posts