Page 212 - 완) I MDP 프로젝트 작품 보고서(전체과 1학년)1.6
P. 212
- 1 시작 비트
- 5,6,7,8,9 데이터 비트
- 없음, 짝수 또는 홀수 패리티 비트
- 1 또는 2 정지 비트
14. 데이터 송신
- 폴링 방식 : UCSRA(UDRE)를 체크하여 데이터를 UDR에 넣어주기만 하면 된다.
폴링 방식의 직렬 수신 예제
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++;
} }
- 인터럽트 방식 : UCSRA의 UDRE(데이터 레지스터 비움) 인터럽트, TXC(전송 완료)
인터럽트
UCSRA의 UDRE 플래그 체크 인터럽트를 위해 UCSRB(UDRIE)을 1로 활성화.
인터럽트에 의한 데이터 전송이 이루어질 때 데이터 레이지스터 비움 인터럽트 프로그
램은 UDRE를 클리어 시키기 위해 UDR에 새로운 데이터를 써넣거나 데이터 레지스터 비
움 인터럽트를 비활성화시켜야한다. 그렇지 않으면 인터럽트 프로그램이 종료할 때마다
새로운 인터럽트가 발생할 것이다.
TXC 플래그 체크 인터럽트를 위해 UCSRB(TXCIE)을 1로 활성화.
TXC 플래그는 전송 완료 인터럽트가 실행되어 자동으로 클리어 되거나 해당 비트에 “1”
을 써넣는 것으로 클리어 된다.
interrupt [USART0_DRE] void usart0_transmit(void) // -- UDR Empty 인터럽트 --
{
UDR0 = *ptr;
ptr++;
if(*ptr ==0)
ptr = String;
}
■ 데이터 송신은 인터럽트 방식보다는 폴링 방식을 이용하는 것이 편리하다.
- 205 -