회원가입 ID/PW 찾기

1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.

콘텐츠 수 49
판매자 빛나는 영혼 판매 납포인트 무료 평점 3.7점 / 총 11명 참여

안녕하세요.

간만에 심심해서 하나 적어 봅니다.

보통 장치간 ,  윈도우간 프로토콜로 처리 할 일이 많이 있는데요.

마이컴으로 그 많은 명령들을 처리 하기 좀 곤란할 때가 많습니다.

그래서 제가 자주 사용하는 방법입니다.

좀 불합리도 있고 한데 간단한 예제 하나 올립니다.

아래는 아트멜128 용 시리얼로 프로토콜 처리 하는 예제 입니다.

기본적으로 직접 텔넷 등을 이용하여 명령을 보내서 테스트도 해봐야 하니 아스키 로 작성합니다.

그러면 처리가 쉬워져요.

보통 프로토콜엔  시작 , 길이 , 명령, 데이터 , 체크섬 , 끝 이렇게 진행되는데...

복잡도 하고 수동으로 명령 날리면서 테스트 할때는 길이와 체크섬때문에 힘들죠,

그래서 걍 간단하게 아래와 같이 사용합니다.

만약 데이터의 손실이 이루어 지면 안되는 것 같은 경우는 그냥 받은 데이터 그대로 보내버려요.

윈도우에서 알아서 하겠죠 ^^ ( 무책임 ) (윈도우 무척 좋음 ^^)

내용은 시리얼 인터럽트 안에서는 종료 문자가 올때까지 버퍼에 저장을 합니다.

이때 버퍼 넘침등 일일히 다 체크해야 하는데.. 그건 상황봐서 하면 되구요.

그리고 모든 내용은 메인에서 처리 합니다.

이렇게 하면 인터럽트 루틴도 깔끔해지고 프로그램도 직관적이라서 C언어로 짜기 쉽습니다.

단점은 메인에서 처리하면 응답이 바로 안가니까 이건 상황에 맞게 적절하게 하면 됩니다.

다른 분들은 어떻게 처리 하시는지 모르지만 좋은 정보 있으시면 가르쳐 주세요.

수고요 ~~~~









interrupt [USART0_RXC] void usart0_rx_isr(void)
{
    unsigned char data ;          // 레지스터로 선언해도 되나.. 머 상황에 따라서.

    static word wRead_Count = 0 ;            // 외부와 분리되는 정적 변수로 선언하면 복사_붙여넣기 프로그램 편합니다.
    static BOOL bProtocol_Start = 0 ;

    data = UDR0 ;             // UDR0 직접 읽으시면 안되요.


    if ( data == STX )               // 시작이 오면
    {
        bProtocol_Start = 1 ;
        wRead_Count = 0 ;
        comm.wReadCount = 0 ;
    }

    if ( bProtocol_Start )
    {
        comm.cComReadData [ wRead_Count ] = data ;

        wRead_Count ++ ;


        if ( comm.cComReadData [ wRead_Count - 1 ] == ETX )      // 종료라면 무조건 리턴 , 에러인지 아닌지는 메인에서
        {
            comm.bRead_Success = 1 ;                           // 메인에서 처리 요청

            comm.wReadCount = wRead_Count ;          // 데이터 받은 개수를 저장

            bProtocol_Start = 0 ;
            wRead_Count = 0 ;
        }
    }
}

//////////////////////////////////////////////////////
// <O>   : ON
// <F>   : OFF

// 응답 : [O] , [F]
// 에러 응답 : [o] , [f]
// 기본 에러 응답 : [e]
//////////////////////////////////////////////////////
void comm_Protocol ( void )            // BOOL 형으로 하고 리턴해도 되나 복잡해 지면 머리만 아픔
{
    switch ( comm.cComReadData [ 1 ] )
    {
        case 'O' :

            if ( comm.cComReadData [ 2 ] != ETX )   // STX : < , ETX : >
            {
                comm_Printf ( "[o]" ) ;
                break ;
            }
           
            // ON 명령 수행
            comm_Printf ( "[O]" ) ;
            break ;
           
        case 'F' :

            if ( comm.cComReadData [ 2 ] != ETX )   // STX : < , ETX : >
            {
                comm_Printf ( "[f]" ) ;       // 실패는 소문자로 (그냥 편함)
                break ;
            }
           
            // OFF 명령 수행
            comm_Printf ( "[F]" ) ;     // 성공은 대문자로 <> 로 받았으니 구분되게 [ ] 로 리턴, 통신 프로그램에서 보기 쉬움
            break ;
            
    default :
      comm_Printf ( "[e]" ) ;       // 데이터를 받았다면 어떠한 상황이던 응답을 주어야 버그 찾기 쉬움
       break ;
    }
}               
                 
                 
                 
                 
                 
                 

void main ( void )
{
  while ( true )
  {
        if ( comm.bRead_Success )                   // 통신 완료
        {
            comm.bRead_Success = 0 ;

            #asm("cli")
            comm_Protocol () ;
            #asm("sei")
        } 
       
        //delay_ms ( 100 ) ;            // 사람의 생각의 속도와 맞추고 싶을때 사용함 , 마이컴 겁나 빨라요.
  }
}

profile

profile
아크마 2010.02.26 17:46
저는 주로 vt100 터미널 프로토콜에 맞춰서 통신을 실행하곤 합니다.
일단 일반 ui 프로그램과 호환도 되는 점이 좋아서고..실제로는 한번 만들어 놓으니 계속 쓰게 되더군요..;;
profile
전자과조교 2010.05.04 16:22

음 적용해 봐야 겠늗네요. 감사합니다.

profile
만백성 2010.05.06 21:39

짧게작성됐지만 이해가 확 되네요!. 훌륭합니다.

profile
하이도 2010.05.13 18:01
정보 감사합니다.
profile
Best 2010.06.24 10:16

흐음

profile
내코에인두 2010.07.02 18:36
간단하면서도... 좋네요...
전 패킷 다룰때면 머리가 아프답니다.. ㅋ
profile
졸린눈R 2010.07.06 09:25
좋은 글 감사합니다.
profile
달리는거북이 2010.11.09 18:22

글자가 안보여요... 왜 긁어야 보이게 했을까요?

profile
빛나는 영혼 2011.07.28 17:13

아 그런가요.. 전 잘보이는데... 아마 버그가 아닐런지 ^.^;;;

profile
올드뉴 2012.06.01 13:44
잘 배워습니다.
고맙습니다.
profile
수풀새 2013.12.14 22:54
상당히 어려운 이야기인것 같습니다
열심히 하겠습니다!!
search
List of Articles
번호 분류 제목 평점 포인트 판매자 등록일 구매수 조회 수
공지 공공의 목적으로 공유하고자 하는 소프트웨어는 '소프트웨어 자료실'에 업로드를 요청드립니다.
공지 구매후 평점 댓글을 남겨주시면 구매포인트의 20%를 돌려드립니다.
49 계측기 & 시험장비 오실로스코프 사용방법 [3] 무료 티이거 2016-04-24 0 516
48 계측기 & 시험장비 오실로스코프나 DMM을 대여할수 있는곳이있나요? [7] 무료 새우키마 2015-04-19 0 546
47 계측기 & 시험장비 회로시험기 ppt [11] 무료 의야~♡ 2010-07-28 0 3613
46 계측기 & 시험장비 Tektronix 자료 배포한 오실로스코프 모든것입니다. [10] 무료 풩님 2010-07-20 0 2551
45 계측기 & 시험장비 열화상 카메라를 이용하여 발열부위 체크 [7] 무료 MATY 2010-05-31 0 2170
44 계측기 & 시험장비 오실로스코프 TD5200 설명서 입니다. [4] 무료 LAZEX 2010-05-26 0 2026
43 계측기 & 시험장비 AC-DC 컨버터 개발 시 필요한 측정 장비들은 어떤것들이 있을까요? [2] 무료 dogsoccer 2010-04-17 0 2062
42 계측기 & 시험장비 아날로그오실로스코프 [16] 무료 쩡이V 2010-04-02 0 4283
41 계측기 & 시험장비 함수발생기 [14] 무료 쩡이V 2010-04-02 0 2375
40 계측기 & 시험장비 오실로스코프 사용법(PDF) [11] 무료 MC雲 2010-03-12 0 4310
39 계측기 & 시험장비 무선인두기의 실체 해부 [10] 무료 하늘노랑 2010-03-02 0 2704
38 계측기 & 시험장비 전자부품 가이드 북 [7] 무료 meri5 2010-02-04 0 2561
37 계측기 & 시험장비 Sodering 관련 자료 [6] 무료 khy0858 2010-01-12 0 2189
36 계측기 & 시험장비 테스터(DVM) 메뉴얼 [10] 무료 잠재력 2009-10-01 0 4263
35 계측기 & 시험장비 함수발생기 사용법 [20] 무료 틱톡 2008-09-02 0 6903
34 계측기 & 시험장비 pspice 기초와 사용방법 [15] 무료 박병장 2008-06-06 0 3132
33 계측기 & 시험장비 오실로스코프란??? [28] 무료 뺘쑝 2008-01-24 0 3042
32 계측기 & 시험장비 인두기와 납땜제거 [23] 무료 라이언상병 2008-01-22 0 7592
31 계측기 & 시험장비 오실로스코프 프로브 선택법 [17] 무료 뺘쑝 2008-01-22 0 3338
30 계측기 & 시험장비 C언어로 매뉴얼 코당하는 것과 VHLL(very high level language)인 매틀랩/시뮬링크 사용상의 차이점 [3] 무료 아크마 2007-10-31 0 2612
  • 인생의 최고 불행은 인간이면서 인간을 모르는 것이다.
    - 파스칼
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.