NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

PICのRS232C通信のパリティを変更する方法を教えてください。

投稿者:なおさん  2013/09/13 11:21  MLNo.7369   [メール表示]

PICのRS232C通信のパリティを変更する方法を教えてください。

PIC16F1938をCCS(Ver5.011)でコンパイルをして使用しています。
ポートのほとんどがSWやLEDの入出力に使っていてRS232CのTXとRXに2Pinを使用しています。
ターゲットと通信を多種の機種とできるようにボーレートやパリティーやコマンドを変更できるよう、
4BIT入力のロータリーディップスイッチで16通りの設定を変更しようとしています。

基本はディップスイッチは運用中(RUN中)に変更可能でスタートSW入力後設定適用とします。

この場合、set_uart_speed (baud, [stream, clock])
で通信のボーレートは変更できますが、

パリティーをNoneからEvenやOddのほうに変更できる関数が無く、
ハードウェアでもレジストの変更が記載されておらず(ソフトウェアーで処理するとかかれてました)
困っています。

■ヘッダーファイルで下記

#use rs232( baud=9600, parity=N , xmit=PIN_C6, rcv=PIN_C7 , stream=COM_A ) // NoneParity
#use rs232( baud=9600, parity=E , xmit=PIN_C6, rcv=PIN_C7 , stream=COM_B ) // EvenParity
#use rs232( baud=9600, parity=O , xmit=PIN_C6, rcv=PIN_C7 , stream=COM_C ) // OddParity

■送信部分
void send(void) // コマンド送信
{
byte i;

for( i = 0 ; i <= 32 ; i++ ){
recData[i] = ' ';
}

for( i = 0 ; i <= chrNo ; i++ ){
//putc( sendData[i] );
if(ParityFlag == NoneParity){fputc( sendData[i] , COM_A);}
if(ParityFlag == EvenParity){fputc( sendData[i] , COM_B);}
if(ParityFlag == OddParity) {fputc( sendData[i] , COM_C);}
}
}

上記で、ParityFlag = EvenParityで設定のとき
NoneParityで常に送信をしてしまいます。



運用中にパリティ変更できるような対策などありましたら、
ご教授のほどをよろしくお願いします。

初めての投稿で乱筆・乱文をしてしまいましたら、申し訳ございません。


このエントリーをはてなブックマークに追加


  • MLNo.7370   Humacさん  (1) 2013/09/13 11:46  [メール表示する]
    なお様

    星@千葉市です。

    こちらが参考になれば良いのですが、如何でしょうか?
    http://inhistime3.sa-suke.com/PGJ00001.html


    自分は通信中のパリティエラーの対応処理を考えるのが面倒なので
    PICではノンパリティーしか使ったことがありません。

  • MLNo.7372   なおさん  (0) 2013/09/13 14:41  [メール表示する]
    USARTの部分は参考になりました。

    わたしもノンパリだったのですが、SONYの機器がEvenなので(汗)
    エラーの部分は味噌なのですが、時間が無いので。
    エラーチェックは無視して、データ内容だけ参照できるようにしようと思います。
    ありがとうございます。


メールへの返信はMLのメンバーしかできません。

更新順メールリスト