C언어 > 졸면서 보는 C Tip - 14. 구조체 시리얼 송신

TODAY709 TOTAL2,272,960
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | C언어 | C언어 | 졸면서 보는 C Tip - 14. 구조체 시리얼 송신

페이지 정보

작성자 키트 작성일2017-09-12 12:58 조회1,416회 댓글0건

본문

14. 구조체 시리얼 송신

 

 

//
#include <mega128.h>
#include <string.h>
//
struct my{
    char   c[2]; // 2바이트
    int    i;    // 2바이트
    long   l;    // 4바이트
    double d;    // 4바이트
}test;  // test라는 이름의 구조체 선언
//         

void TX0_CH(char ch){ while(!(UCSR0A&0x20)); UDR0=ch;     } // 송신함수

char RX0_CH(void)   { while(!(UCSR0A&0x80)); return UDR0; } // 수신함수

//
void main(void){

    int i;

    UCSR0B=0x18; UBRR0H=0; UBRR0L=103;  //9600, 송신, 수신 함수

    while(1){  
        for(i=0;i<12;i++)TX0_CH(test.c[i]); // 구조체 시리얼 전송

 

        //
        delay_ms(1000);
        //
    }
}

 

c가 가진 유연성(?) 덕분에 구조체 전송도 쉽게 처리 됩니다.

구조체는 여러가지 데이터형으로 선언 되어 있지만 전체를 char[]로 처리 가능 합니다.

제일 처음의 데이터형이 char 형의 배열로 되어 있어야지 가능하겠죠

제 경우에는 구조체 첫 데이터는 char 형의 배열 사용이 습관화 되어 있습니다.

윈도우 c컴파일러 경우엔 배열의 범위를 벗어나기 때문에 워닝이나 에러 처리를 해줄겁니다.

 

수신하는 곳에서도 같은 구조체를 선언하고

동일한 위치가 되도록 복사하면 됩니다.

rx_buf[]에 12바이트를 수신했다면

        for(i=0;i<12;i++)test.c[i]=rx_buf[i]; // 구조체 복사

msmcpy() 함수를 사용해도 되겠죠

댓글 0

조회수 1,416

등록된 댓글이 없습니다.

C언어HOME > C언어 > C언어 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기