BASIC4MCU | 질문게시판 | atmega128 하이퍼터미널을 이용하여 조건출력
페이지 정보
작성자 갤럭시 작성일2020-10-15 14:43 조회3,914회 댓글1건본문
하이퍼터미널을 이용하여 대문자<->소문자로 변환하는 코딩을 짰습니다....
소문자를 2번 입력(하이퍼 터미널엔 대문자로 출력됌)할시 "?"를 하이퍼터미널에 같이 띄우고 싶은데요 코딩을 어떻게 해야할지 모르겠습니다 ㅜㅠ
ex) DD?aEbb
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
unsigned char rx_data;
DDRA=0xff; //PORTA 모두 출력으로 설정
PORTE=0xff; //내부 풀업저항 연결
UBRR0H=25>>8; //38.4[kbps],상위
UBRR0L=25; //38.4[kbps],하위
UCSR0A=0X00;
UCSR0B=0X18;
UCSR0C=0X26; //비동기,짝수패러티,1비트 스톱 비트,8비트 데이터
rx_data=UDR0; //RxB0 비우기
while (1)
{
while (!(UCSR0A&0X80)); // 1000_0000,data가 들어오기 전까지 True이며 while문 반복
rx_data=UDR0; //수신 data를 변수에 저장
while (!(UCSR0A&0X20)); //0010_0000,송신용 버퍼가 비면 false
if(rx_data>='a'&&rx_data<='z') rx_data-=0x20; //소문자를 대문자로
else if(rx_data>='A'&&rx_data<='Z') rx_data+=0x20; //대문자를 소문자로
UDR0=rx_data; //수신 data를 그대로 전송
PORTA = 0xFF; //LED1-8 On
_delay_ms(10);
PORTA = 0x00; //LED1-8 Off
}
return 0;
}
댓글 1
조회수 3,914master님의 댓글
master 작성일
char cnt=0; // 전역변수를 하나 추가하세요
if(rx_data>='a'&&rx_data<='z'){ rx_data-=0x20; cnt++; } //소문자를 대문자로
else if(rx_data>='A'&&rx_data<='Z'){ rx_data+=0x20; cnt=0; } //대문자를 소문자로
UDR0=rx_data; //수신 data를 그대로 전송
PORTA = 0xFF; //LED1-8 On
_delay_ms(5);
if(cnt>1)UDR0='?'; // 소문자가 2개 이상이면 ? 출력
_delay_ms(5);
PORTA = 0x00; //LED1-8 Off