前へ 目次 次へ
A/D変換の値を送信
 

ここでは、A/D変換したデータを送信するプログラムを考えてみましょう。

値をどのように送信するかによって、受け取るパソコン側のプログラムも、 それに合わせないといけないことに注意しましょう。

センサはA/D変換の回路をつけたす(フォトリフレクタ)で やったようにCN1-9につないであるものとします。

また、A/D変換のプログラムについては、 A/D変換を行う(単一モード)をご覧ください。

/* A/D変換した値をシリアルで送信(serial01.c) */

#include<3664.h>
#include<sci.c>

int main(void)
{
  unsigned short i;         /* 送信するデータの数をカウント */

  AD.CSR.BIT.ADST = 0;      /* A/D変換停止 */
  AD.CSR.BIT.SCAN = 0;      /* 単一モード */
  AD.CSR.BIT.CKS  = 1;      /* 高速変換 */
  AD.CSR.BIT.CH   = 1;      /* AN1 */

  InitSCI3(br38400);        /* シリアルポートの初期化 */

  i=0;

  while(i<100){               /* データを100回送信 */
    AD.CSR.BIT.ADST = 1;      /* A/D変換スタート */
    while(AD.CSR.BIT.ADF==0){}
    while (SCI3.SSR.BIT.TDRE == 0){}
    SCI3.TDR =((AD.DRB>>6) & 0xff);  /* 下位8ビットの送信 */
    while (SCI3.SSR.BIT.TDRE == 0) {}
    SCI3.TDR =((AD.DRB>>14) & 0xff); /* 上位2ビットの送信 */
    AD.CSR.BIT.ADF=0;
    i++;
  }
  while(1){
    ;
  }
  return(0);
}

 
プログラム解説
 

このプログラムでは、10ビットのデータを、 下位8ビットと上位2ビットに分けて送信しています。

アスキーコードを送信しているわけではないので、 ハイパーターミナルなどでは正常に表示できないことにご注意ください。


#include<sci.c>

SCI3(シリアルコミュニケーションインタフェース)の初期化関数 InitSCI3を使うために、 ファイルsci.cを取り込みます。


InitSCI3(br31250)

SCI3(シリアルコミュニケーションインタフェース)の初期化関数 InitSCI3は、 通信速度を引数として指定します。 ここでは、31250bit/s(調歩同期式モード、 データ長8ビット、 パリティチェックなし、 ストップビットの長さ1)に設定しています。


while(i<100)

iはデータを一度送信するたびに1増やして(i++)、 データを送信した回数をカウントしています。 ここでは、100回データを送信することになります。


while (SCI3.SSR.BIT.TDRE == 0){}

SCI3.SSR.BIT.TDREは、 送信用のレジスタが利用不可の場合には0、利用可能な場合には1ですから、 利用可能な間は次の命令に行かないように、 空のループを作っています。


SCI3.TDR =((AD.DRB>>6) & 0xff)

AD.DRBには、CN1-9に繋いだセンサの値が格納されます。 変換の結果は10ビットで、上位10ビットに格納されます。

10ビット目9ビット目8ビット目7ビット目6ビット目 5ビット目4ビット目3ビット目 2ビット目1ビット目データなしデータなしデータなし データなしデータなしデータなし

したがって、データの下位8ビットを取り出すには、 6ビットシフトして、下位8ビットを取り出せばよいことになります。 下位8ビットを取り出すのに0xffとの論理積を取り、 余分なビットの情報を落としています。

データなしデータなしデータなし データなしデータなしデータなし 10ビット目9ビット目8ビット目7ビット目 6ビット目 5ビット目4ビット目3ビット目 2ビット目1ビット目


SCI3.TDR =((AD.DRB>>14) & 0xff)

上と同様に、残りの2ビット分のデータを送信するために、 14ビットシフトし、2ビット分を取り出しています。 0xffとの論理積を取っていますが、0x03との論理積でも同じ結果になります。

データなしデータなしデータなし データなしデータなしデータなし データなしデータなしデータなし データなしデータなしデータなし データなしデータなし 10ビット目9ビット目

 
やってみよう
 

  • 上記プログラムで送信されたデータを受け取る、パソコン側のプログラムを作ってみよう。
  • 10進数の文字列として、A/D変換の結果を送信してみよう。 また、それに対応する、パソコン側のプログラムも作ってみよう。

 
2003/06/02(Mon)
AKI-H8/3664 QFP版のトップページへ
トップページへ
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送