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 -
   258   259   260   261   262   263   264   265   266   267   268