Page 263 - 3-2
P. 263
void USART_Transmit(unsigned char data)
while (!(UCSRA & (1<<URE)); // 전송버퍼가 비워질 때까지 대기
UDR = data; } // 버퍼에 데이터를 넣어 데이터 전송
void TxChar(unsigned char t) // ------ 한문자 전송함수 --------
{
while((UCSR0A & 0x20) == 0);
UDR0 = t;
UCSR0A |= 0x20; }
oid TxString(flash unsigned char *str) // ------ 문자열 전송함수 --------
{
int i =0;
while(str[i] != 0) // 문자열 끝에 NULL 문자 “0” 검출 때 까지 전송
{
TxChar(str[i]);
i++;
} }
다 인터럽트 방식)
(1) UCSRA 의 UDRE( 데이터 레지스터 비움 인터럽트) , TXC( 전송 완료)
(2) UCSRA 의 UDRE 플래그 체크 인터럽트를 위해 UCSRB(UDRIE) 을 1 로 활성화.
(3) 인터럽트에 의한 데이터 전송이 이루어질 때 데이터 레이지스터 비움 인터럽트 프로그램은
UDRE 를 클리어 시키기 위해 UDR 에 새로운 데이터를 써넣거나 데이터 레지스터 비움 인터
럽트를 비활성화시켜야한다 그렇지 않으면 인터럽트 프로그램이 종료할 때마다 새로운 인터.
럽트가 발생할 것이다.
(4) TXC 플래그 체크 인터럽트를 위해 UCSRB(TXCIE) 을 1 로 활성화.
(5) TXC 플래그는 전송 완료 인터럽트가 실행되어 자동으로 클리어 되거나 해당 비트에 “1” 을
써넣는 것으로 클리어 된다.
interrupt [USART0_DRE] void usart0_transmit(void) // -- UDR Empty 인터럽트 --
{
UDR0 = *ptr;
ptr++;
if(*ptr ==0)
ptr = String;
}
※ 데이터 송신은 인터럽트 방식보다는 폴링 방식을 이용하는 것이 편리하다.
8) 데이터 수신
가 폴링방식) : UCSRA(RXC) 를 체크하여 데이터를 리턴(return UDR) 한다.
void USART_Receive(void) {
while (!(UCSRA & (1<<RXC)); // 데이터가 수신될 때까지 대기
return UDR; } // 버퍼에 수신된 데이터를 반환
- 263 -