Page 419 - 3-2
P. 419

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( 전송 완료)
                       인터럽트
                      ( 가) 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;
                       }


                        ※  데이터 송신은 인터럽트 방식보다는 폴링 방식을 이용하는 것이 편리하다.


                  너 데이터 수신)
                    (1)  폴링방식: UCSRA(RXC)     를 체크하여 데이터를 리턴(return UDR)            한다.
                     void USART_Receive(void) {
                       while (!(UCSRA & (1<<RXC)); // 데이터가 수신될 때까지 대기
                        return UDR; }      // 버퍼에 수신된 데이터를 반환



                    (2)  인터럽트 방식: UCSRA      의 RXC(  수신 완료 인터럽트)
                      ( 가) RXC  플래그 체크 인터럽트를 위해 UCSRB(RXCIE)              을 1 로 활성화.
                      ( 나 인터럽트 방식의 수신이 진행 중이라면 수신 완료 처리 프로그램은)  ,                         RXC  플래그를



                                                         - 419 -
   414   415   416   417   418   419   420   421   422   423   424