|
글쓴이 :
조민준
작성일 : 17-11-17 13:01
조회 : 3,295
|
현재 pc쪽에서 통신을받아 atmega128로 모터를 제어 하려고합니다.
pc쪽에서 변수 string으로 숫자1~5를 보내주고 있는데요
아래소스 조건처럼 str ="1"
이런식으로 해도 avr에서 받아지는건지 궁금합니다. 일단 해봤는데 작동이 되지않아 문의드립니다.
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
#include <string.h> // memcpy 함수 사용을 위해 헤더파일 추가
char rx_buf[50]; // 문자열 저장 버퍼. 배열수는 넉넉히 50
char str[50]; // 도착한 문자열을 출력할 때 쓸 배열
char rx_ch;
unsigned char rx_cnt=0;
char rx_flag=0;
void USART0_init(unsigned int UBRR0)
{
UBRR0H=(unsigned char)(UBRR0>>8);
UBRR0L=(unsigned char)UBRR0;
UCSR0B=(1<<RXEN0)|(1<<RXCIE0)|(1<<TXEN0);
}
ISR(USART0_RX_vect)
{
rx_ch=UDR0;//도착한 데이터 저장
rx_buf[rx_cnt++]=rx_ch;// 배열에 한문자씩 저장
if(rx_cnt==16) // 16개 문자가 도착하면
{
memcpy(str,rx_buf,16); // str에 rx_buf 복사
str[16]=0; // str에 저장된 문자열 뒤에 null문자
rx_flag=1; //플래그 SET
rx_cnt=0; // 카운트 초기화
}
}
int main(void)
{
USART0_init(103);
sei();
PORTB=0x00; // 포트B의 초기상태는 모두 꺼짐 논리0 (0V)입니다.
DDRB=0xFF; // 포트B의 8비트 전체를 출력으로 설정합니다.
while(1)
{
if(str=="1")
{
PORTB = (1<<PB0) | (0<<PB1); // 포트B의 0,1번 핀에 각각 5V, 0V출력
_delay_ms(1000); // 위 상태를 1초 동안 유지합니다.
PORTB = (0<<PB0) | (0<<PB1); // 포트B의 0,1번 핀에 각각 0V, 0V출력
_delay_ms(4000); // 위 상태를 4초 동안 유지합니다.
PORTB = (0<<PB0) | (1<<PB1); // 포트B의 0,1번 핀에 각각 5V, 0V출력
_delay_ms(1000); // 위 상태를 1초 동안 유지합니다.
PORTB = (0<<PB0) | (0<<PB1); // 포트B의 0,1번 핀에 각각 0V, 0V출력
_delay_ms(4000); // 위 상태를 4초 동안 유지합니다
}
}
}
|
|