
먼저 통신에는 직렬과 병렬 통신으로 크게 나뉜다.
직렬통신은 보통 시리얼 통신이라하며, 선이 하나라 구조적으로 간다하며, 양단간 송수신 거리가 멀어도 큰 제한이 없다.
병렬통신은 보통 버스라고 부르며, 데이터 버스, 주소버스 등 다양하게 활용됩니다. 라인이 여러개이며, 데이터를 동시에 송수신 할 수 있는 장점이 있습니다. 하지만 거리가 멀어지면 간섭이 많이 생겨 통신 거리가 짧아질 수 도 있습니다. 또한 선이 많이 필요하기에 비용 많이 든다는 단점이 있습니다.
이 시리얼 통신에 가장 기본이 USART와 UART입니다.
이 둘의 차이는 동기와 비동기의 차이입니다. 이 동기의 차이는 클럭신호이며, 이는 외부 신호로서 처리 될 수도 있으며 내부적으로 펄스를 발생시킬 수도 있습니다.



위 내용처럼 UART통신을 프로토콜을 위해서 각 레지스터들을 초기화, 송신, 수신 함수를 선언하였습니다.
초기화 함수에서는 Baud Rate~~~, 우리가 사용할 BPS를 설정해줍니다 이때 아래 사진을 참고합니다. ATmega128A는 16Mhz 클록을 사용하므로 다음처럼 UBRR0L에 207을 설정해줍니다. 
UCSRmA – USART Control and Status Register A : 우리는 다음 UCSR0A에서는 2배속 모드를 사용한다고 하였기에 "Bit 1 – U2Xm: Double the USART Transmission Speed" Bit 1만을 1의 값을 줍니다.
UCSRmC – USART Control and Status Register C : 또한 스탑 비트를 1 bit으로 설정하기 위해서 아래와 같이 설정해줍니다.
또한 8비트 데이터를 받기위해서 다음과 같이 설정해주면 최종적으로 UCSR0C 에는 0000_0110 의 비트가 쓰여지게됩니다.
UCSRmB – USART Control and Status Register B : 마지막으로 데이터 송수신을 위해서 다음 레지스터에서 3,4번 레지스터의 비트를 1로 값을 써주면 모든 레지스터 설정이 종료됩니다. 
지금까지 UART통신 프로토콜을 데이터 시트를 확인하면서 UART통신이 가능하도록 하였습니다. 이를 활용해 컴퓨터의 포트에 연결된 ATmega를 comportMaster로 연결하는 실습을 진행했습니다.
UART통신_git저장소
최종적으로 I2C통신과 UART통신을 동시에 진행한 실습 실행 결과입니다. UART통신으로는 초음파센서를 활용해 거리 값을 받아오면 그 값을 LCD에 출력합니다.(초음파센서는 이전에 정리 해주었으므로 정리는 생략하겠습니다.)