메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
WhiteAT2008.01.24 09:56
1.
TX 내부에 delay()를 직접 주는 거는 위험요소가 될수 있습니다.

TX함수()에 딜레이가 필요하면.. 타이머를 써야 할듯합니다.
(처음부터 힘들게 작업하신게  delay 를 직접 사용하지 않는 구조를 사용하지 않으려는 거였잖아요^^)


void Tx(void) {
  if( next_tiimer > 0) return;
  if(!보낼데이터가 있는가?) return;

  if(tx_step ==0) {
    //통신칩 register 세팅
   write_reg(xxxx);
   write_reg(xxxx);
   write_reg(xxxx);
   write_reg(xxxx);
   write_reg(xxxx);
   tx_step++;
   next_tiimer = 1200; //
  }
 else if(tx_step==1) {
     // Main while에서 받은 값을 tx 버퍼 큐에 쓴다.
    Write_Data(ui8Z85_TBuf[tx_data_cnt]); 
       tx_data_cnt++;
       if(tx_data_cnt >= 14){u8tx_step = ??;} 
   }
  next_tiimer = 1; // 데이터를 보낸후에는 딜레이가 필요없다.
}
// 통신칩을 초기화 한후에는 1200딜레이를 가진후 TX를 하게 됩니다.


2. RX분석 함수에 TX함수를 직접 넣으면 다른 함수에 영향을 줄수도 있습니다.
   TX 하는데 시간이 많이 소요되 때문에 분리해서 하시는게 좋을거 같습니다.
    (TX 인터럽트를 사용해서 보내는 것도 좋은 방법입니다.)


3. 8Mhz로 9600 으로 (PC와) 통신을 해보셨나요?
   제 경험으로 9600bps로도 통신이 잘 안되고, 데이터 시트에도 에러율이 높게 나와 있습니다.

   시리얼통신((482,232 등)의 통신이 중요한 시스템이라면, 11.0592 같은 통신용 크리스탈을 사용하시는게 좋습니다.





사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )