|
|
![]() AVRÀÇ UART Åë½Å ¼Ò½ºÀÔ´Ï´Ù. // Á÷·ÄÅë½Å Æ÷Æ®ÀÇ ÃʱâÈ // UART0 ÃʱâÈ : Æ÷¸Ë µ¥ÀÌÅÍ =8 bit, ÆÐ¸®Æ¼ =¾øÀ½ // ÀÚ½ÅÀÇ Ä¨¿¡ »ç¿ëÇÏ´Â xtalÀÇ Á֯ļö¸¦ Hz·Î Á¤ÀÇ #define F_OSC 16000000 // x2 Ŭ·°À» »ç¿ëÇϸé 19200 bpsÀÏ °æ¿ì #define BAUD_RATE 9600 // bps ÀÚµ¿¼³Á¤ Á¤ÀÇÀÔ´Ï´Ù (ÀÓÀÇ·Î ¹Ù²ÙÁö ¸¶¼¼¿ä) #define BAUD_CALC ((F_OSC)/((BAUD_RATE)*16l)-1) void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x02; //double baud rate // 0x86 = asynchronous 8N1 UCSRC = (1<<URSEL)|(3<<UCSZ0); // set baud rate UBRRH =BAUD_CALC >>8; UBRRL =BAUD_CALC; // 0x90 = Enable receiver and transmitter; enable RX interrupt UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); } //Á÷·ÄÅë½Å ¼ö½Åó¸® (ÀÎÅÍ·´Æ®¸¦ »ç¿ë) // »ç¿ë ¿¹ // uart0_echo(void) // { // if (flag_rxd) // { // flag_rxd =0; // ¼ö½Å Ç÷¢À» Áö¿î´Ù // tx_putc(rxd_buf); // ¼ö½Å¹®ÀÚ¸¦ ´Ù½Ã ¼Û½Å(¿¡ÄÚó¸®) // } // } // #pragma interrupt_handler uart0_rx_isr:12 void uart0_rx_isr(void) { //uart´Â ¼ö½ÅµÈ ¹®ÀÚ¸¦ UDR¿¡ °¡Áö°í ÀÕ½À´Ï´Ù. rxd_buf =UDR; flag_rxd =1; } // ÀÚµ¿À¸·Î ¼ö½Å¹öÆÛ¿¡ ÀúÀåÇÏ°í ¿¡ÄÚó¸®ÇÏ´Â ¿¹ // ¾Æ·¡ÀÇ ¼ö½Å ÀÎÅÍ·´Æ® 󸮸¦ ÀÛµ¿½ÃŲ ´ÙÀ½ ¸ÞÀο¡¼ ½ÇÇàÇÕ´Ï´Ù. // if (flag_rxd ==1) // { // unsigned char i; // unsigned char temp; // flag_rxd =0; // ¼ö½Å Ç÷¢ ¸®¼Â // // for (i =0; i <63; i++) // { // temp =rx_buff[i]; // ¼ö½ÅµÈ ¹®ÀÚ¸¦ Àд´٠// tx_putc(temp); // ¼ö½Å¹öÆÛ¸¦ ¼Û½ÅÇÑ´Ù // if (temp ==0x0D) // cr À̸é // { // uart_cr(); // ¸¶Áö¸·À¸·Î crÀ» ¼Û½ÅÇϰí // flag_rxd =0; // ¼ö½ÅÇ÷¢À» ¸®¼Â // break; // ¿¡ÄÚ ·çƾÀ» ³ª°£´Ù // } // } // crÀÌ ³ª¿Ã¶§ ±îÁö 63¹®ÀÚ ±îÁö ó¸®ÇÑ´Ù // uart_cr(); // ¹öÆÛÀÇ ³¡À̸é crÀ» ¼Û½ÅÇϰí // flag_rxd=0; // ÀÚµ¿À¸·Î ¼ö½ÅÇ÷¢À» ¸®¼Â // } // ¼ö½Å ÀÎÅÍ·´Æ® ó¸® unsigned char rx_buff[128]; // ¼ö½Å ¹öÆÛ¸¦ 128 ¹ÙÀÌÆ®·Î Á¤ÀÇ unsigned char rx_ptr =0; // ¼ö½Å Æ÷ÀÎÅ͸¦ 0À¸·Î Á¤ÀÇ unsigned char flag_rxd =0; // ¼ö½Å Ç÷¢ÀÇ Á¤ÀÇ #pragma interrupt_handler uart0_rx_isr:12 void uart0_rx_isr(void) { unsigned char rx_temp =0; //uart´Â ¼ö½ÅµÈ ¹®ÀÚ¸¦ UDR¿¡ °¡Áö°í ÀÕ½À´Ï´Ù. rx_temp =UDR; rx_buff[rx_ptr++] =rx_temp; if (rx_temp ==0x0D) // crÀÌ¸é ¼ö½ÅÇ÷¢À» ¼¼¿ò { rx_ptr =0; // ¼ö½Å Æ÷ÀÎÅÍ ¸®¼Â flag_rxd =1; } if (rx_ptr >63) // ¸µ ¹öÆÛ¸¦ ¸¸µç´Ù { rx_ptr =0; // ¼ö½Å Æ÷ÀÎÅÍ ¸®¼Â } } //Á÷·ÄÅë½Å ¼Û½Åó¸® (ÀÎÅÍ·´Æ® ó¸® ¾ÈÇÔ) // »ç¿ë ¿¹ // uart_putc(0x0D); // crÀ» ¼Û½Å // uart_putc(0x0A); // lf¸¦ ¼Û½Å // uart_putc(0x1B); // esc¸¦ ¼Û½Å // uart_putc(0x20); // space¸¦ ¼Û½Å // wait until UDR ready void uart_putc(unsigned char tx_byte) { while(!(UCSRA & (1 << UDRE))); UDR = tx_byte; // send character } // ¹®ÀÚ¿ ¼Û½Å // »ç¿ë ¿¹ : uart_puts("¿©±â¿¡ ÃʱâÈµÈ AVRĨ¿¡¼ ¼Û½ÅÇÒ ¸Þ¼¼Áö¸¦ ³Ö´Â´Ù"); // uart_cr(); // ÇÑÁÙ ¹Ù²Þ // // loop until *str != NULL // c ÄÚµå´Â ¹®ÀÚ¿ÀÇ ¸¶Áö¸·¿¡ ÀÚµ¿À¸·Î null ÄÚµå(ascii 0x00)°¡ µé¾î °©´Ï´Ù void uart_puts (char *str) { while (*str) { uart_putc(*str); str++; } } // cr ¼Û½Å // terminate sent string!!! void uart_cr(void) { while(!(UCSRA & (1 << UDRE))); UDR = 0x0d; } // Á¤¼ö 2 ¹ÙÀÌÆ®(val)¸¦ 4 ¹ÙÀÌÆ® ascii ¼ýÀÚ·Î º¯È¯ÇÏ¿© tx_buf[]¿¡ ÀúÀå // »ç¿ë ¿¹1 : int_4ascii(9999); // ½ÊÁø 9999¸¦ ascii·Î º¯È¯ÇÏ¿© tx_buff¿¡ ÀúÀå // tx_4asc(void); // tx_buff¿¡ ÀúÀåµÈ ascii 4ÀÚ¸®¸¦ uart·Î ¼Û½Å // uart_cr(void); // crÀ» uart·Î ¼Û½Å // »ç¿ë ¿¹2 : int_4ascii(temp); // int º¯¼ö temp¸¦ ascii·Î º¯È¯ÇÏ¿© tx_buff¿¡ ÀúÀå // tx_4asc(void); // tx_buff¿¡ ÀúÀåµÈ ascii 4ÀÚ¸®¸¦ uart·Î ¼Û½Å // uart_cr(void); // crÀ» uart·Î ¼Û½Å void int_4asc(unsigned int val) { unsigned int bcd; unsigned int rem; tx_buf[0] =0x30; tx_buf[1] =0x30; tx_buf[2] =0x30; tx_buf[3] =0x30; // init 4 ascii buffer bcd =val; //get int (2 byte) rem =val; //get int (2 byte) if (rem >999) { bcd =(bcd /1000); // get 1000's rem =(rem %1000); // bcd -(1000 *n) tx_buf[0] =(bcd +0x30); // save 1000's } if (rem >99) { bcd =(rem /100); // get 100's rem =(rem %100); // bcd -(100 *n) tx_buf[1] =(bcd +0x30); // save 100's } if (rem >9) { bcd =(rem /10); // get 10's rem =(rem %10); // bcd -(10 *n) tx_buf[2] =(bcd +0x30); // save 10's } tt_buf[3] =(rem +0x30); // save 1's } // tx_buff¿¡ ÀúÀåµÈ 4¹ÙÀÌÆ® ascii¸¦ ¼Û½Å // ÃÖ»óÀ§°¡ 0 À̸é ÇÏÀ§¸¸ ¼Û½Å void tx_4asc(void) { if (tx_buf[0] =='0') { if (tx_buf[1] =='0') { if (tx_buf[2] =='0') { uart_putc(tx_buf[3]); } else { uart_putc(tx_buf[2]); uart_putc(tx_buf[3]); } } else { uart_putc(tx_buf[1]); uart_putc(tx_buf[2]); uart_putc(tx_buf[3]); } } else { uart_putc(tx_buf[0]); uart_putc(tx_buf[1]); uart_putc(tx_buf[2]); uart_putc(tx_buf[3]); } } UART »ç¿ë½Ã main()ÀÇ ¿¹ // ÁÖÇÔ¼öÀÇ ½ÃÀÛ (MPU°¡ ¸®¼ÂµÇ¸é ¿©±âºÎÅÍ ½ÃÀ۵ȴÙ) void main(void) { CLI(); // ¸ðµç ÀÎÅÍ·´Æ® ±ÝÁö port_init(); // Æ÷Æ®ÀÇ ÃʱâÈ uart0_init(); // UART ÃʱâÈ MCUCR = 0x00; GICR = 0x00; SEI(); // ÀÎÅÍ·´Æ® Çã°¡ uart_cr(); // ÇÑÁÙ ¹Ù²Þ uart_puts("¿©±â¿¡ ÃʱâÈµÈ AVRĨ¿¡¼ ¼Û½ÅÇÒ ¸Þ¼¼Áö¸¦ ³Ö´Â´Ù"); uart_cr(); // ÇÑÁÙ ¹Ù²Þ // ÁÖÇÔ¼öÀÇ ¹«Çѹݺ¹ ó¸®ÀÇ ½ÃÀÛ (¸®¼ÂµÉ ¶§ ±îÁö ¹«ÇÑ ¹Ýº¹ÇÑ´Ù) while(1) { // ¿©±â¿¡ »ç¿ëÀÚÀÇ ¹Ýº¹ ·çƾ¸¦ ³Ö´Â´Ù } } |
![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |