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








 게시판 검색





 
 
회원등록 비번분실


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

      거래은행 바로가기
 
  AVR Applications
AVR 자료실
작성자 avrtools™        
작성일 2008/12/02
첨부#1 cavrd.zip (1,494KB) (Down:6)
Link#1 (Down:1)
ㆍ추천: 0  ㆍ조회: 92   
  Code Vision AVR 컴파일러 2K 데모버전
Code Vision AVR 컴파일러는 2K 바이트까지 컴파일 되는. 데모버전을 배포하고 있습니다.
 
CodeVisionAVR Evaluation V1.24.8
2k 바이트까지 컴파일이 되는 데모버전 내려받기
제작자 아래의 내려받기를 누르면 됩니다

이 응용자료는 소프트웨어 반이중 UART를 어떻게 만드는지 보여준다.
ATmega128의 8-bit Timer/Counter0를 사용하고 있고,
외부 가로채기 External Interrupt0를 사용한다.
응용소스 내려받기 http://www.hpinfotech.ro/softuart.zip

개요
상수 D와 N은 data 속도를 정의 한다
D는 T/C Prescaler에서 주파수 분주를 선택하며,
다음은 데이터 속도의 계산식이다 : BAUD = CLK (발진 주파수) / N*D

응용 예에서 UART는 수신핀으로 PD0를 사용한다,
그것은 외부 가로채기 핀이기 때문이다. 송신핀은 PD4를 사용한다.
그러나 다른 핀을 사용할 수 있다.
UART가 반이중일 때, 송신과 수신중 하나만 가능하다. 모두는 불가능하다.
idle은 자동적으로 수신된 데이터를 RX 버퍼에 넣는다.
그러나 들어오는 데이터가 끝날 때 까지 송신데이터는 무시된다.

가로채기 사용 : 외부 Ext Int0,
내부 가로채기 : Timer/Counter0 overflow

주: 상수 80과 56 ("defs.h" 파일 안에서)은 비트 길이를 조절한다,
다음은 defs.h 파일의 내용이다.

/* defs.h : definitions header file */
/*** user settings for UART3 ***/
#define BAUD 9600 // UART3 baud rate
#define STOP_BITS 1 // nbr of stop bits
#define TX3_PIN PORTD.4 // UART3 TX pin
#define RX3_PIN PIND.0 // UART3 RX pin (external INT0)
#define RX_BUFFER_SIZE3 10 // size of UART3 RX buffer
/*** end of user settings ***/

// data types
#define byte unsigned char
#define word unsigned int
// watchdog reset ("borrow" this from Introl)
#define wdogtrig(); #asm("wdr")
// logix
#define TRUE 1
#define FALSE 0
// TX & RX levels
#define HIGH 1
#define LOW 0
// quartz frequency
#define CLK 4000000
// UART3 specific
#define D 8 // frequency divider => (CLK / 8) = 4MHz/8 = 500.000 Hz
#define N (CLK/(D*BAUD)) // nbr associated by Timer0 to 1 bit length
#define START_BIT_LENGTH ((N + N/2) - (80/D)) // adjusted start bit length
#define DATA_BIT_LENGTH (N - (56/D)) // adjusted data bit length
#define UART3_STOP (8 + STOP_BITS) // total nbr. of bits
// bit positions in the Status Register of UART3
#define TX_BUSY 6 // busy sending data (internal - read only)
#define RX_BUSY 7 // busy receiving data (internal - read only)

다음은 uart3.c의 소스이다.
/*********************************************
This program was produced using
CodeVision AVR V1.23.6b Standard
?Copyright 1998-2002 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro , hpinfotech@xnet.ro

Project : UART3: Half Duplex Software UART (9600 bps, 8N1)
Version : 1.3
Date : October 2002
Author : Radu Hristea (radu.hristea@aptrans-group.com; transeast@programmer.net)
Company : TransEast s.r.l.
Comments: Total size = 321 words (including the demo program)
The receive line is buffered (the user can modify the buffer size).
The receive routine detects and rejects the frame errors.

Chip type : ATmega128
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
Internal SRAM size : 4096
External SRAM size : 0
Data Stack size : 1024
*********************************************/

#include
#include "defs.h "

// UART3 Global Registers
byte u3_buffer ; // serial buffer
byte u3_bit_nbr; // bit counter
byte u3_status ; // status register
// UART3 Receiver buffer
byte rx_buffer3[RX_BUFFER_SIZE3];
byte rx_wr_index3, rx_rd_index3, rx_counter3;
// This flag is set on UART3 Receiver buffer overflow
bit rx_buffer_overflow3;

/******************************************************************************/

// External Interrupt 0 service routine (used to initiate UART3 receive)
interrupt [EXT_INT0] void external_INT0(void)
{
TCNT0 = 0x00;
OCR0 = START_BIT_LENGTH; // set timer reload value (to 1.5 bit length)
TIFR |= 0x02; // clear timer compare flag
TIMSK |= 0x02; // enable timer compare interrupt
/************************/
EIMSK &= 0xFE; // disable external interrupt INT0
/************************/
u3_status = (1<u3_buffer = 0x00; // clear UART3 buffer
u3_bit_nbr = 0xFF; // erase bit counter (set all bits)
}

// Timer 0 compare interrupt service routine (sends & receives the UART3 bits)
interrupt [TIM0_COMP] void TIMER0_compare(void)
{
TCNT0 = 0x00;
OCR0 = DATA_BIT_LENGTH;
u3_bit_nbr++;

/*** check what are we doing: send or receive ? ***/
if(u3_status & (1<{
if(u3_bit_nbr < 8) // data bits (bit 0...7)
{
TX3_PIN = (u3_buffer & 0x01);
u3_buffer >>= 1; // next bit, please !
}
else // stop bit (bit #8)
{
TX3_PIN = HIGH;
if(u3_bit_nbr == UART3_STOP) // ready! stop bit(s) sent
{
TIMSK &= 0xFD; // disable timer 0 interrupt
u3_status = 0x00; // clear UART3 status register
EIMSK |= 0x01; // enable external interrupt
}
}
}
/***********************************************************/
else // receive process (1<{
if(u3_bit_nbr < 8) // data bits (bit 0...7)
{
u3_buffer |= (RX3_PIN<<(u3_bit_nbr)); // sample here !
}
else // ready! it's the stop bit
{
TIMSK &= 0xFD; // disable timer 0 interrupt
u3_status = 0x00; // clear UART3 status register
// test the stop bit: (RX3_PIN == HIGH)
if(RX3_PIN) // if no frame error...
{
rx_buffer3[rx_wr_index3] = u3_buffer;
if(++rx_wr_index3 == RX_BUFFER_SIZE3)
rx_wr_index3 = 0;
if(++rx_counter3 > RX_BUFFER_SIZE3)
rx_buffer_overflow3 = TRUE;
}
EIMSK |= 0x01; // enable external interrupt
}
}
}

// get a character stored in the UART3 RX-buffer
byte getchar3(void)
{
byte data;

while(rx_counter3 == 0)
wdogtrig();
data = rx_buffer3[rx_rd_index3];
if(++rx_rd_index3 == RX_BUFFER_SIZE3)
rx_rd_index3 = 0;
#asm("cli")
--rx_counter3;
#asm("sei")
return data;
}

// put a character DIRECTLY to the UART3 buffer (it will CANCEL the RX flow)
void putchar3(byte c)
{
while(u3_status & (1</************************/
EIMSK &= 0xFE; // disable external interrupt
/************************/
TX3_PIN = LOW; // clear output (start bit)
/************************/
TCNT0 = 0x00;
OCR0 = DATA_BIT_LENGTH; // set timer reload value (1 bit)
TIFR |= 0x02; // clear timer compare flag
TIMSK |= 0x02; // enable timer compare interrupt
/************************/
u3_status = (1<u3_buffer = c; // copy data to buffer
u3_bit_nbr = 0xFF; // erase bit counter (set all bits)
}

// UART3 initialization function (we MUST call this function BEFORE using UART3)
void initUART3(void) // UART3 = software UART
{
//RX
PORTD.0 = 1; // pull-up
DDRD.0 = 0; // input
//TX
PORTD.4 = 1; // logic 1 (high level = STOP TX)
DDRD.4 = 1; // output

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 500,000 kHz
// Mode: CTC top = OCR0
// OC0 output: Disconnected
ASSR =0x00;
TCCR0=0x0A;

// External Interrupt 0 initialization (for RX)
EICRA &= 0xFC;
EIMSK |= 0x01;
EIFR |= 0x01;

// Timer/Counter 0 Interrupt initialization
TIMSK &= 0xFC;
}

// simple demo application: test it by connecting to a PC (COM1 for ex.)
void main(void)
{
initUART3(); // initialize the software UART3
#asm("sei") // enable global interrupts

while(TRUE)
{
wdogtrig(); // trigger the doggy...
if(rx_counter3) // if we received something (in the UART3 buffer)
{
putchar3(getchar3()); // just send it back !
}
}
}

HP InfoTech s.r.l. 사이트 바로가기
http://www.hpinfotech.ro/


   
윗글 AVR910-ISP용 AVR-OSP2 Ver5.43
아래글 AVR delay loop generator
    N         제목    글쓴이 작성일 조회 추천
AVR 자료실 안내 avrtools™ 2008/09/02 (화) 155 0
97 AVR Basic Compiler (4K Free) avrtools™ 2008/12/03 (수) 178 0
96 코드비젼 V2.05.0 평가판 avrtools™ 2011/07/17 (일) 119 0
95 8x8 LED Audio Spectrum Display avrtools™ 2009/10/18 (일) 241 0
94 AVR 펌웨어로 만드는 USB 드라이버 avrtools™ 2009/10/07 (수) 415 0
93 AVR-CDC and V-USB avrtools™ 2009/10/06 (화) 213 0
92 AVR USB-HID-Bootloader의 제작 avrtools™ 2009/10/01 (목) 248 0
91 AT91SAM7S256 개발환경과 컴파일러 [2] avrtools™ 2008/11/03 (월) 2165 0
90 SAM7S256 USB 드라이버와 AT91-ISP avrtools™ 2008/11/01 (토) 1148 0
89 AT91SAM7S256 공부를 시작합니다. avrtools™ 2008/11/01 (토) 574 1
88 ICCAVR V7.16A AVR 컴파일러 45일판 avrtools™ 2009/03/09 (월) 125 0
87 CodeVisionAVR1248b 最新版下载 leeky 2008/11/08 (토) 290 0
86 AVR UART 소스 (ICC AVR V6) avrtools™ 2008/12/03 (수) 165 0
85 cvAVR Soft Uart Source avrtools™ 2008/12/03 (수) 138 0
84 cvAVR 직렬포트와 LCD 시험용 소스 avrtools™ 2008/12/03 (수) 135 0
83 Free SmallC for AVR avrtools™ 2008/12/03 (수) 153 0
82 AVR910-ISP용 AVR-OSP2 Ver5.43 avrtools™ 2008/12/03 (수) 162 0
81 Code Vision AVR 컴파일러 2K 데모버전 avrtools™ 2008/12/02 (화) 92 0
80 AVR delay loop generator avrtools™ 2008/12/02 (화) 143 0
79 ICC tiny C컴파일러 V6 데모버전 (30일 제한판) avrtools™ 2008/12/02 (화) 61 0
78 ICC AVR C 컴파일러 V6 (4K 제한판) avrtools™ 2008/12/02 (화) 80 0
77 DasmAVR (Windows용 AVR 역어셈블러) avrtools™ 2008/12/02 (화) 126 0
76 AVR PROG KIT avrtools™ 2008/12/02 (화) 170 0
75 AVR JTAG ICE KIT avrtools™ 2008/12/02 (화) 240 0
74 AVR 부동소수점, 지연시간 계산기 avrtools™ 2008/12/02 (화) 142 0
73 ATtiny45 USB to RS232 인터페이스 avrtools™ 2008/09/26 (금) 188 0
72 MEGA32 128x64 GLCD Scope 제작 avrtools™ 2008/09/22 (월) 301 0
71 PC송신방식 Tiny2313 50x7 LED 전광판 avrtools™ 2008/09/10 (수) 252 0
70 mega8 적외선 거리측정 레이더 leeky 2006/05/07 (일) 1367 0
69 ATmega16 RFID #3 소프트웨어 leeky 2006/12/27 (수) 879 0
68 ATmega16 RFID #2 하드웨어 leeky 2006/12/27 (수) 1126 0
67 ATmega16 RFID #1 태그 leeky 2006/12/27 (수) 857 0
66 ISO 14443A RFID 카드의 읽기/쓰기 방법 [1] leeky 2007/02/25 (일) 1488 1
65 ATmega8 PSK31 RF Modem의 제작 leeky 2006/03/07 (화) 1376 21
64 T89C51SND1C 64M USB MP3 플레이어 avrtools 2006/03/04 (토) 968 8
63 AVR 13.56MHz RFID 읽기/쓰기 장치의 제작 [7] leeky 2007/02/19 (월) 994 4
62 WhereAVR for APRS GPS/Telemetry avrtools 2006/05/05 (금) 384 2
61 ATmega8 UI-TNC 무선모뎀의 제작 avrtools 2006/03/07 (화) 391 0
60 AVR APRS(GPS) Packet 무선모뎀 avrtools 2006/03/07 (화) 374 0
59 AT90PWM3 교류모터 속도제어 leeky 2006/04/07 (금) 921 1
58 M128 MMC LED 전광판 leeky 2006/03/07 (화) 911 0
57 Charon 2 이더넷 모듈의 소개 avrtools 2006/04/04 (화) 473 0
56 S2313 LED 회전계 (TACHO METER) avrtools 2006/03/28 (화) 597 0
55 Mega8 + 128x128 LCD 스코프 avrtools 2006/03/28 (화) 1184 0
54 Mega8 + OV6630 Treva 모바일용 카메라의 화상처리 leeky 2006/03/19 (일) 777 0
53 YUKI Mega8 MP3 Player #3 avrtools 2006/03/11 (토) 837 0
52 AVR JTAG 에뮬레이터의 제작 avrtools 2006/03/07 (화) 834 0
51 USB AVR 프로그래머 AvrUsb500 avrtools 2006/03/07 (화) 726 1
50 Mega88 USB 버스 모니터 avrtools 2006/03/07 (화) 384 0
49 M16 MMC Flash Memory leeky 2006/03/07 (화) 450 1
48 M163 SD,MMC Interface leeky 2006/03/07 (화) 435 0
47 S2313 MMC to Serial leeky 2006/03/07 (화) 315 0
46 ATmega48 UDP/IP 적외선 리모콘 수신장치 avrtools 2006/03/07 (화) 412 0
45 HDD MP3 플레이어 leeky 2006/03/07 (화) 596 0
44 MP3 yampp-3/USB leeky 2006/03/07 (화) 290 0
43 MP3 Player yampp-3 leeky 2006/03/07 (화) 254 0
42 YUKI MP3 플레이어2의 제작 (ATmega8 + SD Card) avrtools 2006/03/07 (화) 370 0
41 AVR CD 플레이어 leeky 2006/03/07 (화) 531 0
40 S2313 초음파 거리계 (미터, TV 스크린, LED 표시) avrtools 2006/03/07 (화) 544 0
39 RF Spectrum Monitor avrtools 2006/03/07 (화) 373 0
38 Easy Ethernet AVR 웹서버 leeky 2006/03/07 (화) 449 0
37 90S4433 LCD표시 100Mhz 주파수 카운터 leeky 2006/03/07 (화) 246 0
36 ELM Audio Spectrum Monitor avrtools 2006/03/07 (화) 352 0
35 Mega8 Door Bell leeky 2006/03/07 (화) 277 0
34 AVR 휴대용 DVM leeky 2006/03/07 (화) 482 0
33 Minimum Mass Waveform Capture and Display leeky 2006/03/07 (화) 260 0
32 AT90S2313 디지털 용량계 avrtools 2006/03/07 (화) 364 0
31 SLO2016 Alphanumeric Intelligent Display leeky 2006/03/07 (화) 174 0
30 AT90S2313 흔드는 LED 전광판 (POV) leeky 2006/03/07 (화) 426 0
29 ATtiny2313 Scrolling LED Sign avrtools 2006/03/07 (화) 363 0
28 Tiny22,S1200 나이트 라이더 avrtools 2006/03/07 (화) 308 0
27 ATtiny26L의 AD 변환과 PWM 출력제어 leeky 2006/03/07 (화) 474 0
26 S2313을 사용한 DS1820 온도계 leeky 2006/03/07 (화) 264 0
25 ATmega8535 온도센서 leeky 2006/03/07 (화) 294 0
24 AVR2313 100MHz RF연결 주파수 측정메터 avrtools 2006/03/07 (화) 193 0
23 VHF 무선 데이터 송신기 leeky 2006/03/07 (화) 502 0
22 90S2313 1MHz 파형 포착기 leeky 2006/03/07 (화) 227 0
21 VHF 무선 데이터 수신기 avrtools 2006/03/07 (화) 364 0
20 AVR 5x7 Dotmatrix LED leeky 2006/03/07 (화) 237 0
19 Mega163 웹 LCD leeky 2006/03/07 (화) 394 0
18 AVR 이더넷 시험소프트 avrtools 2006/03/07 (화) 296 0
17 AVR 넷트웍 시계 (타임 프로토콜) avrtools 2006/03/07 (화) 374 0
16 RS-232 to 100 MHz RF desktop avrtools 2006/03/07 (화) 235 0
15 AVR 6디지트 50MHz 주파수 카운터 leeky 2006/03/07 (화) 212 0
14 AVR DS1820 온도센서 avrtools 2006/03/07 (화) 251 0
13 AVR 직접주파수 발생기 (AT90S2313 DDS) avrtools 2006/03/07 (화) 371 0
12 프로그래머블 PLL 제어 avrtools 2006/03/07 (화) 219 0
11 AVR AT90S2313 7Segment LED Display leeky 2006/03/07 (화) 213 0
10 TINY15L 무전원 4채널 온도계 avrtools 2006/03/07 (화) 316 0
9 8PIN AVR을 사용한 풀컬러 LED leeky 2006/03/07 (화) 347 0
8 DS1820 고분해능 온도계 avrtools 2006/03/07 (화) 333 0
7 S2313 디지털 전압계 avrtools 2006/03/07 (화) 448 0
6 S2313 적외선 USB 모듈 avrtools 2006/03/07 (화) 317 0
5 S2313 주파수 카운터 avrtools 2006/03/07 (화) 253 0
4 AVR90S2313과 Treva 카메라의 연결 leeky 2006/03/07 (화) 294 0
3 Mega8 PID 온도제어 leeky 2006/02/24 (금) 530 1
2 90S2333 3채널 다이오드 온도계 avrtools 2006/02/24 (금) 236 0
1 AT89S8252로 만드는 1~40MHz DDS leeky 2006/02/14 (화) 309 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