재잼재잼의 티스토리

5.UART 문자 송/수신 본문

MCU

5.UART 문자 송/수신

재잼재잼 2019. 1. 15. 14:39

UART를 사용해서 PC와 ATmega128 사이에 문자 송/수신을 구현해보자.


이전에 살펴보았던 UART 관련 레지스터에서 송/수신 작업의 상태를 나타내는 레지스터가 있었다.


바로 UCSR1A이다.


7번 비트 : Receive Complete라는 이름을 가지며, Receive Buffer에 읽지 않은 데이터가 있을 때 set되고, Receive Buffer가 비었을 때 clear된다.


6번 비트 : Transmit Complete라는 이름을 가지며, Transmit Shift Register에 있는 데이터 프레임이 전부 전송되고, UDRn에 새로운 데이터가 없을때 set된다.


5번 비트 : UART Data Register Enable이라는 이름을 가진다. UDRn이 새로운 데이터를 받을 준비가 되었을 때, set된다.


-------------------------------------


또한 데이터의 송/수신을 위한 버퍼레지스터가 존재하는데 UDRn이 그 역할을 수행한다.


이 버퍼 레지스터는 UART 송신과 수신을 위해 사용되는데 RXBn과 TXBn이 같은 주소를 공유하여 사용한다.


UDRn레지스터에 데이터가 기록(written)될 경우에는 TXBn에 기록이 되며,


UDRn레지스터를 읽으면(Reading) RXBn에 위치한 데이터를 반환(return)한다.


----------------------------------------


이 레지스터를 가지고, 데이터시트에 있는 송/수신 예제를 확인해보자.


먼저 송신부분을 보면 


while( ! ( UCSRA & ( 1 << UDRE1) ) ) ;

UDR1 = data;


UDRE1 비트가 set 될 때까지 계속 반복하는 부분인데, UDREn 비트는 새로운 데이터를 받을 준비가 되었을 때 set 되기 때문에, UDRE1이 set되면 UDR1에 전송할 문자(data)를 저장하고, 송신된다.


수신 부분에서는


unsigned char 형을 반환하며, 


while( ! ( UCSRA & ( 1 << RXC1 ) ) );

return UDR1;


RXC1 비트가 set 될 때까지 반복한다. RXC1비트는 수신버퍼에 읽지않은 데이터가 있을 때 set 되기때문에, RXC1비트가 set 되면, UDRn에 있는 데이터를 읽고 반환 해준다.


-------------------------------------------


이 예제 코드를 사용해서 PC와 문자 1개를 송/수신하는 프로그램은


와 같이 작성할 수 있다.

'MCU' 카테고리의 다른 글

7. CLCD 사용하기  (0) 2019.01.22
6. UART 문자열 송/수신  (0) 2019.01.16
4. UART사용 - 초기화  (0) 2019.01.14
3. UART 개요  (0) 2019.01.13
2. 버튼 채터링 해결하기  (2) 2019.01.10