반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/eeprom.h> unsigned char Rx_Complete; unsigned char RX_BUFF[32]; // 시리얼통신 //================================================================================ // Char_TX //================================================================================ void Char_TX(char data) { while((UCSR0A & 0x20) == 0x00); UDR0 = data; } //================================================================================ // String_TX //================================================================================ void String_TX(char *Str) { unsigned char i; for (i = 0; Str[i] != '\0'; i++) { Char_TX(Str[i]); } } void Uart_Init(unsigned int UART_BAUD_RATE) { // USART initialization UCSR0A = 0x00; UCSR0B = 0x98; // 송수신 인에이블 // UCSR0B = 0x90; // 수신 인에이블 UCSR0C = 0x86; UBRR0H = 0x00; //UBRRL = 0x67; // 16Mhz -> Hex(0x67), Dec(103) UBRR0L = (F_CPU / (UART_BAUD_RATE * 16L) - 1); } // 수신 인터럽트 루틴 ISR(USART0_RX_vect) { // 데이터가 수신될때마다 1씩 증가 static unsigned char RX_Count; unsigned char Data; // 수신바이트를 Data에 넣는다. Data = UDR0; // 수신데이터에 에러가 없으면 if(Rx_Complete == 0) { // 스타트 바이트 if(Data == '<') { RX_Count = 1; RX_BUFF[0] = '<'; } else { RX_BUFF[RX_Count++] = Data; if(RX_Count >= 32) {RX_Count = 0;} } // 스톱 바이트 if(Data == '>') { RX_BUFF[RX_Count] = 0; // RX_Count를 0으로 초기화 RX_Count = 0; Rx_Complete = 1; } } } // 수신데이터 처리 함수 void Excute_Serial(void) { ; } // 메인함수 int main(void) { Uart_Init(9600); _delay_ms(50); // 전역 인터럽트 활성 sei(); while(1) { if(Rx_Complete) { Rx_Complete = 0; Excute_Serial(); } } } | cs |
반응형
'개발모듈 > 펌웨어 모듈' 카테고리의 다른 글
- [AVR Studio4] ADC 8비트 (0) | 2019.06.04 |
---|---|
- Key Control 3 (0) | 2019.04.08 |
- [AVR Studio 4] ATmega128 - 타이머카운터 (CTC모드) (0) | 2018.12.18 |
- WS2812 관련함수 (0) | 2018.05.18 |
- AVR Studio 4.19에서 소수점처리 (0) | 2018.05.15 |