BASIC4MCU | 질문게시판 | avr studio 소스해석 질문
페이지 정보
작성자 master 작성일2019-06-15 10:55 조회3,341회 댓글0건본문
#include<avr/io.h>
#include<util/delay.h>
#define F_CPU 16000000UL
#define CR 0x0D
#define BS 0x08
void uart_send_byte(unsigned char byte)
{
while (!(UCSR0A & (1 << UDRE0 )));
UDR0 = byte;
}void uart_send_string(unsigned char *str, unsigned char len)
{
int i;for (i = 0; i < len; i++)
{
if (!(*(str + i )))
{
break;
}uart_send_byte(*(str + i));
}
}
unsigned char uart_recv_byte(void)
{
while (!(UCSR0A & (1 << RXC0 )));
return UDR0;
}int main(void)
{
unsigned char byte;UBRR0H = 0;
UBRR0L = 103;
UCSR0C = (0 << UPM1) | (0 << UPM0) | (0 << USBS) | (1 << UCSZ1) | (1 << UCSZ0);
UCSR0B = (1 << TXEN) | (1 << RXEN) | (0 << UCSZ2);for (;;)
{
byte = uart_recv_byte();
switch (byte)
{
case CR:
uart_send_byte('\n');
uart_send_byte('\r');
break;
case BS:
uart_send_byte(byte);
uart_send_byte(' ');
uart_send_byte(byte);
break;
default:
uart_send_byte(byte);
break;
}}
소스 해석 부탁드립니다 ㅠㅠㅠ 너무어렵네요
//
// DateTime : 2019-04-22 오후 9:02:51// by Ok-Hyun Park//#include <avr/io.h>//#define F_CPU 16000000UL#include <util/delay.h>//#define CR 0x0D#define BS 0x08//char rx0_byte(){ while(!(UCSR0A&0x80)); return UDR0; } // 문자 수신//void tx0_byte(char d){ while(!(UCSR0A&0x20)); UDR0=d; } // 문자 송신//void tx0_str(char *s){ while(*s)tx0_byte(*s++); } // 문자열 송신//int main(void){char r;UBRR0L=103; UCSR0B=0x18; // (1<<TXEN)|(1<<RXEN), 9600bpsfor(;;){r=rx0_byte(); // 문자를 수신할 때까지 기다렸다가 데이터를 r에 받아옴switch(byte){case CR: tx0_str("\n\r"); break; // CR인 경우 LF+CR 송신case BS: tx0_byte(r); tx0_byte(' '); tx0_byte(r); break; // BS인 경우 BS+' '+BS 송신default: tx0_byte(r); break; // 그외의 값은 받은 값을 그대로 송신}}}
일부 코드는 수정 변경했습니다.
댓글 0
조회수 3,341등록된 댓글이 없습니다.