BASIC4MCU | 질문게시판 | atmega128 하이퍼터미널 질문
페이지 정보
작성자 아트메가요오 작성일2019-05-27 22:00 조회3,499회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=8877
본문
하이퍼 터미널에 숫자 1을 치면 led 불이 켜졋다 꺼지고 숫자 2를 치면 fnd가 작동 되는 코딩인데 주석을 달고 싶은데 책만 보고 베낀거라 하나두 몰라서요.. 혹시 조금이라도 주석 달아주실수 있는분 계신가요?
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define DDR_LED DDRB
#define PORT_LED PORTB
#define DDR_FND DDRA
#define PORT_FND PORTA
#define UART_RX_BUFLEN 128
#define BS 0x08
#define CR 0x0D
volatile unsigned int tic_time;
ISR(TIMER0_OVF_vect,ISR_NOBLOCK)
{
tic_time++;
TCNT0 = 6;
}
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;
}
void uart_recv_string(unsigned char *str)
{
unsigned char len = 0;
unsigned char byte;
for(;;)
{
if(len>= UART_RX_BUFLEN - 1)
{
break;
}
byte = uart_recv_byte();
if(byte==CR)
{
uart_send_byte('\n');
uart_send_byte('\r');
break;
}
else if(byte==BS)
{
if(len)
{
len--;
}
uart_send_byte(byte);
uart_send_byte(' ');
uart_send_byte(byte);
}
else
{
str[len++] = byte;
uart_send_byte(byte);
}
}
str[len] = 0;
return len;
}
void menu_display(void)
{
uart_send_string("\n\r 1. LED test", 15);
uart_send_string("\n\r 2. FND test", 15);
uart_send_string("\n\r Input number(1-2) : ", 25);
}
void Putch1(unsigned char data)
{
while (!(UCSR0A & (1 << UDRE0)));
UDR0 = data;
}
char Getch1(void)
{
while(!(UCSR0A & (1 << RXC0)));
return UDR0;
}
int main(void)
{
unsigned char fnd[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
FILE *fp;
fp = fdevopen(Putch1, Getch1);
unsigned char buf[UART_RX_BUFLEN];
unsigned int i;
DDR_LED = 0xFF;
PORT_LED = 0xFF;
DDR_FND = 0xFF;
DDRC = 0x0F;
PORT_FND = 0xFF;
TCCR0 = (1<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0 = 6;
TIMSK = (1<<OCIE0) | (1<<TOIE0);
UBRR0L = 103;
UBRR0H = 0;
UCSR0C = (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0);
UCSR0B = (1<<TXEN) | (1<<RXEN) | (0<<UCSZ2);
sei();
for(;;)
{
menu_display();
uart_recv_string(buf);
switch(atoi(buf))
{
case 1:
for(i=0;i<8;i++)
{
PORT_LED = ~(1 << i);
_delay_ms(10000);
}
PORT_LED = 0xFF;
uart_send_string("OK.\r\n",5);
break;
case 2:
for(i=0;i<10;i++)
{
PORT_FND = fnd[i];
_delay_ms(500);
}
PORTC = 0xFC;
PORT_FND = 0xFF;
uart_send_string("OK.\r\n",5);
break;
default:
uart_send_string("Invalidarguments.\r\n",20);
break;
}
}
return 1;
}
아 그리고 마지막으로 하이퍼터미널에서 1을 입력하면 OK가 나오던데 OK가 출력되는 원리가 뭔가요?
댓글 0
조회수 3,499등록된 댓글이 없습니다.