C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[56387] Re:시리얼 통신에서.....
장성호 [nasilso] 1552 읽음    2009-03-09 19:35
마이컴에서 10개를 한번에 보낸다고 하더라도

ComPort에서는

8개 들어오고 2개 들어올수도 있구
4개 3개 3개... 뭐 이런식으로 들어올수도 있구
한번에 10개 다 들어올수도 있구

또는 10개 이상 .. 다음 데이터와 함께 들어올수도 있구..

결론적으로 10보낸다고 10개 한번에 들어오지 않을수 있다는것이 중요합니다.

그러니 님께서는 배열의 index를 global로 가지고 계시면서  그걸 이용해서 index로 써야하구요
ComPort의  Count는 그냥 수신된 갯수로만 사용해야 합니다.

그럼..


bear 님이 쓰신 글 :
: avr이란 마이컴하고 232 통신을 하는데...
: 마이컴에서는 아래와 같이 10개의 데이타를 보내고
:
:     fputc(adc[0],COMM1);
:     fputc(adc[1],COMM1);
:     fputc(adc[2],COMM1);
:     fputc(adc[3],COMM1);
:     fputc(adc[4],COMM1);
:     fputc(adc[5],COMM1);
:     fputc(adc[6],COMM1);
:     fputc(adc[7],COMM1);
:     fputc(adc[8],COMM1);
:     fputc(adc[9],COMM1);
:
: PC 프로그램에서는
: void __fastcall TfrmMeasure::ComPort1TriggerAvail(TObject *CP, WORD Count)
: {
:     unsigned char ch,d1,d2,d3;
:     String  str;
:     for(int i=0;i<Count;i++)
:     {
:         ch = ComPort1->GetChar();
:         switch (i)
:         {    //testSerial,testSerial_00
:           case 0x00 : Adc2Data[0] = ch ; break;
:           case 0x01 : Adc2Data[1] = ch;break;
:           case 0x02 : Adc2Data[2] = ch ; break;
:           case 0x03 : Adc2Data[3] = ch;break;
:           case 0x04 : Adc2Data[4] = ch ; break;
:           case 0x05 : Adc2Data[5] = ch;break;
:           case 0x06 : Adc2Data[6] = ch ; break;
:           case 0x07 : Adc2Data[7] = ch;break;
:           case 0x08 : Adc2Data[8] = ch ; break;
:           case 0x09 : Adc2Data[9] = ch;break;
:          }
:       }
:       for(int i=0;i<10;i++)
:         adc[i] = Adc2Data[i];
:
:       GasN2 = (adc[0]<<8) | adc[1];
:       GasO2 = (adc[2]<<8) | adc[3];
:       GasAr = (adc[4]<<8) | adc[5];
:       DcVol = (adc[6]<<8) | adc[7];
:       DcCur = (adc[8]<<8) | adc[9];
:
:       str.sprintf("adc1 : %06ld--adc2 : %06ld--adc3 : %06ld--adc4 : %06ld--adc5 : %06ld",GasN2,GasO2,GasAr,DcVol,DcCur);
:       m_rev_str = str;
:       DisplayReceiveMessage();
: }
:
: 이렇게 받아서 처리를 할려고 하는데 문제는 8개까지는 잘 읽어서 표시 되는데 8개를 넘어서면 읽혀지지 않고 처음으로 가서 표시됩니다. 해결 할 수 있는 방법이......도움 부탁드립니다.

+ -

관련 글 리스트
56386 시리얼 통신에서..... bear 1396 2009/03/09
56387     Re:시리얼 통신에서..... 장성호 1552 2009/03/09
56392         고맙습니다...해결했습니다.^___^ bear 1336 2009/03/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.