|
글쓴이 :
관리자
작성일 : 17-11-17 13:47
조회 : 3,647
|
안녕하신비까? 고객님.
항상 저희 뉴티씨 제품을 사용하여 주셔서 감사합니다.
고객님 께서 하신방법으로는 되는지 모르겠으나 저희 자료실에 문자열을 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초 동안 유지합니다
> }
>
> }
>
> }
>
|
|