본문 바로가기

[ATmega128]단방향 직렬통신 테스트

반응형

//---------USART 레지스트리 설정

   

#define UDR1 (*(volatile unsigned char *)0x9C)

#define UCSR1A (*(volatile unsigned char *)0x9B)

#define UCSR1B (*(volatile unsigned char *)0x9A)

#define UCSR1C (*(volatile unsigned char *)0x9D)

#define UBRR1L (*(volatile unsigned char *)0x99)

#define UBRR1H (*(volatile unsigned char *)0x98)

   

//--------- 통신 값 설정

   

#define CPU_CLOCK 16000000

#define BAUD_RATE 19200

#define BAUD_RATE_L (CPU_CLOCK/(16l*BAUD_RATE))-1

#define BAUD_RATE_H ((CPU_CLOCK/(16l*BAUD_RATE))-1)>>8

   

//--------- 레지스트리 비트값(UCSR1C)

   

#define UPM1 5

#define UPM0 4

#define USBS 3

#define UCSZ1 2

#define UCSZ0 1

   

//--------- 레지스트리 비트값(UCSR1B)

   

#define TXEN 3

#define RXEN 4

#define UCSZ2 2

   

   

//--------- 레지스트리 비트값(UCSR1A)

   

#define UDRE 5

   

void uart_send(unsigned char st)

{

  while(!(UCSR1A & (1<<UDRE)));

  UDR1 = st;

    

}

   

int main(void)

{

  unsigned char buf[] = "Hello DK128!";

  unsigned int i;

    

  UBRR1L = (unsigned char)BAUD_RATE_L;

  UBRR1H = (unsigned char)BAUD_RATE_H;

    

  UCSR1C = (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0);

    

  UCSR1B = (1<<TXEN) | (1<<RXEN) | (0<<UCSZ2);

    

  for(i=0;i<sizeof(buf);i++)

  {

    uart_send(buf[i]);

  }

    

  return 0;

}

   

   

반응형
-->