void main(void) { int i; Init(); while(TRUE){ USB_Receive(); SendCount = RecvCount; for (i = 0; i < RecvCount; i++) SendBuffer[i] = RecvBuffer[i]; USB_Send(); } }またこのmain関数の前に、次の4つのグローバル変数が宣言されています。
BYTE xdata RecvBuffer[128]; BYTE xdata SendBuffer[128]; WORD RecvCount; WORD SendCount;このうち、Init()は初期化をする関数ですので、最初に記述しておきます。 その後、処理の本体に入りますが、 USB_Receive()が、パソコンからUSB経由で送られてきたデータを 受信する関数で、その受信データが配列RecvBuffer[]に、 またその長さ(バイト数)がRecvCountに入ります。
逆にUSB_Send()は、パソコンに対してUSB経由でデータを送る関数で、 配列SendBuffer[]の中のデータを、0番目から順に、 SendCountバイトだけ送信をします。
この場合は、パソコンから受信したデータを、そのままパソコンに 送り返していることになります。
これを参考に、行わせたい処理をmain関数内に記述し、 main.Uv2をダブルクリックしてuVision2を起動後、 らbuild(F7)を行いってプログラムをコンパイルします。
main関数は次のようになっています。(一部のみ抜粋して記載)
#define SIZE 32 int main( int argc, char *argv[] ) { if (USB_Open()){ fprintf(stderr, "Cannot open Ez-USB\n"); exit(1); } for (i = 0; i < 4; i++) { for (j = 0; j < SIZE; j++) { s1[j] = i + j * 2; s2[j] = 0; } USB_Send(s1, SIZE); l = USB_Receive(s2, SIZE); for (j = 0; j < l; j++) { if ((j % 16) == 0) fprintf(stderr, "\n%04x", j); fprintf(stderr, " %02x", s2[j]); } } USB_Close(); }最初にあるUSB_Open()は初期化の関数ですので、最初に記述しておきます。 (この例のように、初期化に失敗した場合に、メッセージ表示などの処理を 記述しておくのはよい方法です。)
その後、送信するべきデータを配列s1[]の中に用意し (この例ではs2[j]にi+j*2を代入しています)、 その準備がそろったら、USB_Send()で、マイコンに向けて USB経由でデータを送信しています。 このとき、送信したいバイト数を、第2引数として与えています。
その後、USB_Receive()で、マイコンからUSB経由で送られてきた データを受信しています。 この関数の第2引数では「受信したいバイト数」(この場合はSIZE=32バイト)を 与えますが、「実際に受信されたバイト数」が戻り値となりますので、 その値を変数lにに代入しておきます。 そして受信したデータを、順に整形して表示しています。
最後にUSB_Close()で、USB通信の終了処理を行います。
プログラムの記述が完了したら、 「ビルド」メニューの「ソリューションのビルド」でコンパイルを行います。
パソコン側のプログラムのコンパイルが無事終了したら、 まずControlPanelでマイコン側のプログラムを転送して実行し、 その後、パソコン側のプログラムを実行させます。 パソコン側のプログラムは、 「デバッグ」メニューの「デバッグなしで開始」で実行します。