뉴티씨



  • HOME
  • 고객지원
  • 질문답변

 

 
시리얼 통신 코드질문드립니다.
 글쓴이 : 관리자
작성일 : 17-11-17 13:47
조회 : 3,659  
안녕하신비까? 고객님.
항상 저희 뉴티씨 제품을 사용하여 주셔서 감사합니다.

고객님 께서 하신방법으로는 되는지 모르겠으나 저희 자료실에 문자열을 scanf형식으로 받도록 하는 예제가 있습니다. 참고하시기 바랍니다.

찾는 방법은 자료실 -> AVR -> 제목 + 내용으로 "scanf" 검색으로 찾으셔서 1페이지 밑에 쯤에 UART scanf 예제가 있습니다.

감사합니다.

>
>
> 현재 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초 동안 유지합니다
>        }
>
>    }

> }
>

 
   
 

 


1