로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
  AVR Applications
AVR 자료실
작성자 avrtools™        
작성일 2008/12/03
ㆍ추천: 0  ㆍ조회: 245   
  AVR UART 소스 (ICC AVR V6)
AVR의 UART 통신 소스입니다.

// 직렬통신 포트의 초기화
// UART0 초기화 : 포맷 데이터 =8 bit, 패리티 =없음

// 자신의 칩에 사용하는 xtal의 주파수를 Hz로 정의
#define F_OSC 16000000
// x2 클럭을 사용하면 19200 bps일 경우
#define BAUD_RATE 9600
// bps 자동설정 정의입니다 (임의로 바꾸지 마세요)
#define BAUD_CALC ((F_OSC)/((BAUD_RATE)*16l)-1)

void uart0_init(void)
{
  UCSRB = 0x00; //disable while setting baud rate
  UCSRA = 0x02; //double baud rate

  // 0x86 = asynchronous 8N1
  UCSRC = (1<<URSEL)|(3<<UCSZ0);

  // set baud rate
  UBRRH =BAUD_CALC >>8;
  UBRRL =BAUD_CALC;

  // 0x90 = Enable receiver and transmitter; enable RX interrupt
  UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
}

//직렬통신 수신처리 (인터럽트를 사용)
// 사용 예
// uart0_echo(void)
// {
// if (flag_rxd)
// {
// flag_rxd =0; // 수신 플랙을 지운다
// tx_putc(rxd_buf); // 수신문자를 다시 송신(에코처리)
// }
// }
//

#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
//uart는 수신된 문자를 UDR에 가지고 잇습니다.
rxd_buf =UDR;
flag_rxd =1;
}

// 자동으로 수신버퍼에 저장하고 에코처리하는 예
// 아래의 수신 인터럽트 처리를 작동시킨 다음 메인에서 실행합니다.
// if (flag_rxd ==1)
// {
// unsigned char i;
// unsigned char temp;
// flag_rxd =0; // 수신 플랙 리셋
//
// for (i =0; i <63; i++)
// {
// temp =rx_buff[i]; // 수신된 문자를 읽는다
// tx_putc(temp); // 수신버퍼를 송신한다
// if (temp ==0x0D) // cr 이면
// {
// uart_cr(); // 마지막으로 cr을 송신하고
// flag_rxd =0; // 수신플랙을 리셋
// break; // 에코 루틴을 나간다
// }
// } // cr이 나올때 까지 63문자 까지 처리한다
// uart_cr(); // 버퍼의 끝이면 cr을 송신하고
// flag_rxd=0; // 자동으로 수신플랙을 리셋
// }

// 수신 인터럽트 처리
unsigned char rx_buff[128]; // 수신 버퍼를 128 바이트로 정의
unsigned char rx_ptr =0; // 수신 포인터를 0으로 정의
unsigned char flag_rxd =0; // 수신 플랙의 정의

#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
  unsigned char rx_temp =0;
  //uart는 수신된 문자를 UDR에 가지고 잇습니다.
  rx_temp =UDR;
  rx_buff[rx_ptr++] =rx_temp;

  if (rx_temp ==0x0D) // cr이면 수신플랙을 세움
  {
    rx_ptr =0; // 수신 포인터 리셋
    flag_rxd =1;
  }

  if (rx_ptr >63) // 링 버퍼를 만든다
  {
    rx_ptr =0; // 수신 포인터 리셋
  }
}

//직렬통신 송신처리 (인터럽트 처리 안함)
// 사용 예
// uart_putc(0x0D); // cr을 송신
// uart_putc(0x0A); // lf를 송신
// uart_putc(0x1B); // esc를 송신
// uart_putc(0x20); // space를 송신

// wait until UDR ready
void uart_putc(unsigned char tx_byte)
{
  while(!(UCSRA & (1 << UDRE)));
  UDR = tx_byte; // send character
}

// 문자열 송신
// 사용 예 : uart_puts("여기에 초기화된 AVR칩에서 송신할 메세지를 넣는다");
// uart_cr(); // 한줄 바꿈
//
// loop until *str != NULL
// c 코드는 문자열의 마지막에 자동으로 null 코드(ascii 0x00)가 들어 갑니다
void uart_puts (char *str)
{
  while (*str)
  {
    uart_putc(*str);
    str++;
  }
}

// cr 송신
// terminate sent string!!!
void uart_cr(void)
{
  while(!(UCSRA & (1 << UDRE)));
  UDR = 0x0d;
}

// 정수 2 바이트(val)를 4 바이트 ascii 숫자로 변환하여 tx_buf[]에 저장
// 사용 예1 : int_4ascii(9999); // 십진 9999를 ascii로 변환하여 tx_buff에 저장
// tx_4asc(void); // tx_buff에 저장된 ascii 4자리를 uart로 송신
// uart_cr(void); // cr을 uart로 송신

// 사용 예2 : int_4ascii(temp); // int 변수 temp를 ascii로 변환하여 tx_buff에 저장
// tx_4asc(void); // tx_buff에 저장된 ascii 4자리를 uart로 송신
// uart_cr(void); // cr을 uart로 송신

void int_4asc(unsigned int val)
{
  unsigned int bcd;
  unsigned int rem;

  tx_buf[0] =0x30;
  tx_buf[1] =0x30;
  tx_buf[2] =0x30;
  tx_buf[3] =0x30; // init 4 ascii buffer
 
  bcd =val; //get int (2 byte)
  rem =val; //get int (2 byte)

  if (rem >999)
  {
    bcd =(bcd /1000); // get 1000's
    rem =(rem %1000); // bcd -(1000 *n)
    tx_buf[0] =(bcd +0x30); // save 1000's
  }

if (rem >99)
{
bcd =(rem /100); // get 100's
rem =(rem %100); // bcd -(100 *n)
tx_buf[1] =(bcd +0x30); // save 100's
}

if (rem >9)
{
bcd =(rem /10); // get 10's
rem =(rem %10); // bcd -(10 *n)
tx_buf[2] =(bcd +0x30); // save 10's
}
tt_buf[3] =(rem +0x30); // save 1's
}

// tx_buff에 저장된 4바이트 ascii를 송신
// 최상위가 0 이면 하위만 송신
void tx_4asc(void)
{
   if (tx_buf[0] =='0')
  {
    if (tx_buf[1] =='0')
    {
       if (tx_buf[2] =='0')
      {
        uart_putc(tx_buf[3]);
      }
     else
    {
      uart_putc(tx_buf[2]);
      uart_putc(tx_buf[3]);
    }
  }

  else
  {
    uart_putc(tx_buf[1]);
    uart_putc(tx_buf[2]);
    uart_putc(tx_buf[3]);
  }
}

  else
  {
    uart_putc(tx_buf[0]);
    uart_putc(tx_buf[1]);
    uart_putc(tx_buf[2]);
    uart_putc(tx_buf[3]);
  }
}

UART 사용시 main()의 예
// 주함수의 시작 (MPU가 리셋되면 여기부터 시작된다)
void main(void)
{
  CLI(); // 모든 인터럽트 금지
  port_init(); // 포트의 초기화
  uart0_init(); // UART 초기화

  MCUCR = 0x00;
  GICR = 0x00;
  SEI(); // 인터럽트 허가

  uart_cr(); // 한줄 바꿈
  uart_puts("여기에 초기화된 AVR칩에서 송신할 메세지를 넣는다");
  uart_cr(); // 한줄 바꿈

  // 주함수의 무한반복 처리의 시작 (리셋될 때 까지 무한 반복한다)
 while(1)
 {
    // 여기에 사용자의 반복 루틴를 넣는다
 }
}
   
윗글 CodeVisionAVR1248b 最新版下载
아래글 cvAVR Soft Uart Source
    N         제목    글쓴이 작성일 조회 추천
AVR 자료실 안내 avrtools™ 2008/09/02 (화) 331 0
97 AVR Basic Compiler (4K Free) avrtools™ 2008/12/03 (수) 271 0
96 코드비젼 V2.05.0 평가판 avrtools™ 2011/07/17 (일) 188 0
95 8x8 LED Audio Spectrum Display avrtools™ 2009/10/18 (일) 291 0
94 AVR 펌웨어로 만드는 USB 드라이버 avrtools™ 2009/10/07 (수) 500 0
93 AVR-CDC and V-USB avrtools™ 2009/10/06 (화) 263 0
92 AVR USB-HID-Bootloader의 제작 avrtools™ 2009/10/01 (목) 300 0
91 AT91SAM7S256 개발환경과 컴파일러 [2] avrtools™ 2008/11/03 (월) 2258 0
90 SAM7S256 USB 드라이버와 AT91-ISP avrtools™ 2008/11/01 (토) 1243 0
89 AT91SAM7S256 공부를 시작합니다. avrtools™ 2008/11/01 (토) 618 1
88 ICCAVR V7.16A AVR 컴파일러 45일판 avrtools™ 2009/03/09 (월) 172 0
87 CodeVisionAVR1248b 最新版下载 leeky 2008/11/08 (토) 347 0
86 AVR UART 소스 (ICC AVR V6) avrtools™ 2008/12/03 (수) 245 0
85 cvAVR Soft Uart Source avrtools™ 2008/12/03 (수) 192 0
84 cvAVR 직렬포트와 LCD 시험용 소스 avrtools™ 2008/12/03 (수) 193 0
83 Free SmallC for AVR avrtools™ 2008/12/03 (수) 420 0
82 AVR910-ISP용 AVR-OSP2 Ver5.43 avrtools™ 2008/12/03 (수) 216 0
81 Code Vision AVR 컴파일러 2K 데모버전 avrtools™ 2008/12/02 (화) 146 0
80 AVR delay loop generator avrtools™ 2008/12/02 (화) 196 0
79 ICC tiny C컴파일러 V6 데모버전 (30일 제한판) avrtools™ 2008/12/02 (화) 109 0
78 ICC AVR C 컴파일러 V6 (4K 제한판) avrtools™ 2008/12/02 (화) 132 0
77 DasmAVR (Windows용 AVR 역어셈블러) avrtools™ 2008/12/02 (화) 202 0
76 AVR PROG KIT avrtools™ 2008/12/02 (화) 215 0
75 AVR JTAG ICE KIT avrtools™ 2008/12/02 (화) 321 0
74 AVR 부동소수점, 지연시간 계산기 avrtools™ 2008/12/02 (화) 228 0
73 ATtiny45 USB to RS232 인터페이스 avrtools™ 2008/09/26 (금) 245 0
72 MEGA32 128x64 GLCD Scope 제작 avrtools™ 2008/09/22 (월) 352 0
71 PC송신방식 Tiny2313 50x7 LED 전광판 avrtools™ 2008/09/10 (수) 312 0
70 mega8 적외선 거리측정 레이더 leeky 2006/05/07 (일) 1416 0
69 ATmega16 RFID #3 소프트웨어 leeky 2006/12/27 (수) 927 0
68 ATmega16 RFID #2 하드웨어 leeky 2006/12/27 (수) 1175 0
67 ATmega16 RFID #1 태그 leeky 2006/12/27 (수) 902 0
66 ISO 14443A RFID 카드의 읽기/쓰기 방법 [1] leeky 2007/02/25 (일) 1554 1
65 ATmega8 PSK31 RF Modem의 제작 leeky 2006/03/07 (화) 1417 21
64 T89C51SND1C 64M USB MP3 플레이어 avrtools 2006/03/04 (토) 1042 8
63 AVR 13.56MHz RFID 읽기/쓰기 장치의 제작 [7] leeky 2007/02/19 (월) 1125 4
62 WhereAVR for APRS GPS/Telemetry avrtools 2006/05/05 (금) 448 2
61 ATmega8 UI-TNC 무선모뎀의 제작 avrtools 2006/03/07 (화) 436 0
60 AVR APRS(GPS) Packet 무선모뎀 avrtools 2006/03/07 (화) 444 0
59 AT90PWM3 교류모터 속도제어 leeky 2006/04/07 (금) 998 1
58 M128 MMC LED 전광판 leeky 2006/03/07 (화) 973 0
57 Charon 2 이더넷 모듈의 소개 avrtools 2006/04/04 (화) 526 0
56 S2313 LED 회전계 (TACHO METER) avrtools 2006/03/28 (화) 641 0
55 Mega8 + 128x128 LCD 스코프 avrtools 2006/03/28 (화) 1230 0
54 Mega8 + OV6630 Treva 모바일용 카메라의 화상처리 leeky 2006/03/19 (일) 842 0
53 YUKI Mega8 MP3 Player #3 avrtools 2006/03/11 (토) 884 0
52 AVR JTAG 에뮬레이터의 제작 avrtools 2006/03/07 (화) 896 0
51 USB AVR 프로그래머 AvrUsb500 avrtools 2006/03/07 (화) 773 1
50 Mega88 USB 버스 모니터 avrtools 2006/03/07 (화) 430 0
49 M16 MMC Flash Memory leeky 2006/03/07 (화) 501 1
48 M163 SD,MMC Interface leeky 2006/03/07 (화) 485 0
47 S2313 MMC to Serial leeky 2006/03/07 (화) 358 0
46 ATmega48 UDP/IP 적외선 리모콘 수신장치 avrtools 2006/03/07 (화) 461 0
45 HDD MP3 플레이어 leeky 2006/03/07 (화) 638 0
44 MP3 yampp-3/USB leeky 2006/03/07 (화) 331 0
43 MP3 Player yampp-3 leeky 2006/03/07 (화) 296 0
42 YUKI MP3 플레이어2의 제작 (ATmega8 + SD Card) avrtools 2006/03/07 (화) 439 0
41 AVR CD 플레이어 leeky 2006/03/07 (화) 581 0
40 S2313 초음파 거리계 (미터, TV 스크린, LED 표시) avrtools 2006/03/07 (화) 594 0
39 RF Spectrum Monitor avrtools 2006/03/07 (화) 444 0
38 Easy Ethernet AVR 웹서버 leeky 2006/03/07 (화) 498 0
37 90S4433 LCD표시 100Mhz 주파수 카운터 leeky 2006/03/07 (화) 290 0
36 ELM Audio Spectrum Monitor avrtools 2006/03/07 (화) 406 0
35 Mega8 Door Bell leeky 2006/03/07 (화) 318 0
34 AVR 휴대용 DVM leeky 2006/03/07 (화) 563 0
33 Minimum Mass Waveform Capture and Display leeky 2006/03/07 (화) 301 0
32 AT90S2313 디지털 용량계 avrtools 2006/03/07 (화) 410 0
31 SLO2016 Alphanumeric Intelligent Display leeky 2006/03/07 (화) 211 0
30 AT90S2313 흔드는 LED 전광판 (POV) leeky 2006/03/07 (화) 464 0
29 ATtiny2313 Scrolling LED Sign avrtools 2006/03/07 (화) 400 0
28 Tiny22,S1200 나이트 라이더 avrtools 2006/03/07 (화) 353 0
27 ATtiny26L의 AD 변환과 PWM 출력제어 leeky 2006/03/07 (화) 566 0
26 S2313을 사용한 DS1820 온도계 leeky 2006/03/07 (화) 305 0
25 ATmega8535 온도센서 leeky 2006/03/07 (화) 335 0
24 AVR2313 100MHz RF연결 주파수 측정메터 avrtools 2006/03/07 (화) 240 0
23 VHF 무선 데이터 송신기 leeky 2006/03/07 (화) 539 0
22 90S2313 1MHz 파형 포착기 leeky 2006/03/07 (화) 275 0
21 VHF 무선 데이터 수신기 avrtools 2006/03/07 (화) 443 0
20 AVR 5x7 Dotmatrix LED leeky 2006/03/07 (화) 276 0
19 Mega163 웹 LCD leeky 2006/03/07 (화) 429 0
18 AVR 이더넷 시험소프트 avrtools 2006/03/07 (화) 366 0
17 AVR 넷트웍 시계 (타임 프로토콜) avrtools 2006/03/07 (화) 417 0
16 RS-232 to 100 MHz RF desktop avrtools 2006/03/07 (화) 276 0
15 AVR 6디지트 50MHz 주파수 카운터 leeky 2006/03/07 (화) 254 0
14 AVR DS1820 온도센서 avrtools 2006/03/07 (화) 296 0
13 AVR 직접주파수 발생기 (AT90S2313 DDS) avrtools 2006/03/07 (화) 457 0
12 프로그래머블 PLL 제어 avrtools 2006/03/07 (화) 275 0
11 AVR AT90S2313 7Segment LED Display leeky 2006/03/07 (화) 255 0
10 TINY15L 무전원 4채널 온도계 avrtools 2006/03/07 (화) 388 0
9 8PIN AVR을 사용한 풀컬러 LED leeky 2006/03/07 (화) 428 0
8 DS1820 고분해능 온도계 avrtools 2006/03/07 (화) 383 0
7 S2313 디지털 전압계 avrtools 2006/03/07 (화) 519 0
6 S2313 적외선 USB 모듈 avrtools 2006/03/07 (화) 376 0
5 S2313 주파수 카운터 avrtools 2006/03/07 (화) 304 0
4 AVR90S2313과 Treva 카메라의 연결 leeky 2006/03/07 (화) 364 0
3 Mega8 PID 온도제어 leeky 2006/02/24 (금) 740 1
2 90S2333 3채널 다이오드 온도계 avrtools 2006/02/24 (금) 276 0
1 AT89S8252로 만드는 1~40MHz DDS leeky 2006/02/14 (화) 345 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0