16bitのパラレル送信がうまくいかないで困っています。
16bitのパラレル送信がうまくいかないで困っています。
25ピンのパラレルポートからデータを送信して16個あるLEDを制御したいのですが上手くいきません。
環境はC言語でデバイスはRobot I/O Port 32 DLL V5.4を使用しています。
最初はGiveIoというデバイスを使用していたのですが、どうしても8bitまでしか送信できず今のデバイスに変更しました。
変更したのはいいのですが、このデバイスでも8bitまでしか送信できません。多分私のプログラムのせいだと思うのですが・・・
以下がソースになります。
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include "Rbtiop32.h" // デバイスのヘッダー
#pragma comment(lib, "Rbtiop32.lib") // デバイスのlib
int main(void)
{
short puls = 0; // ベースアドレスにいくつプラスするか
short beas = 0; // ベースアドレス
WORD sousin; // 送信データ
int flg = 0; // 送信モード変更フラグ
int ReturnData; // 送信したデータの戻り値
printf("--------------------------------------\n");
printf(" パラレルポート通信テストプログラム\n");
printf("--------------------------------------\n");
// PC/AT互換機かチェック
if( GetPCArchitectureType() == 1 )
{
// パラレルポートベースアドレスを自動設定
beas = SetPrinterPortIOAutoPCAT2();
if ( beas == 0 )
{
printf( "パラレルポートを認識できませんでした\n" );
return 0;
}
printf( "パラレルポートベースアドレス = %x\n", beas );
}
else
{
printf( "パソコンがPC/AT互換機ではありません\n" );
return 0;
}
printf( "操作するアドレス選択※0から2で入力\n" );
scanf( "%d", &puls );
printf( "操作するアドレス = %x\n", beas+puls );
// ループ
while(1)
{
printf( "送信するデータを入力してください\n" );
scanf( "%d", &sousin );
// ループを抜ける
if ( sousin == -1 ) break;
// データ送信
printf( "sousin = %d\n", (WORD)sousin );
// データ送信
ReturnData = Out16( GetCurrentPrinterPortIOPCAT()+puls, sousin );
printf( "送信したデータ = %d\n", ReturnData );
// 送信が成功したかどうか?
if( GetIOFunctionResult() == 0x00 )
{
printf( "データ送信失敗\n\n" );
}
else
{
printf( "データ送信成功!!\n\n" );
}
}
return 0;
}
ソースをいじりながら検証していたのでいらない処理等があると思いますがすみませんがこれでお願いします。
このプログラムを2つ起動させてコントロールレジスタとデータレジスタを同時に操作して検証しています。
教授願います。よろしくお願いします。
※補足(現在の状況等)
・16bitを送信しても下位8bitしか反映されない。上位8bitが無視される。
・I/Oの範囲は間違っていません。0x3bcがデータアドレスです。
・必要とあらばGiveIo環境で使用していたソースも掲示できます。
補足
outerlimitさんありがとうございます。 パラレル転送は1回に複数ビット転送する転送方法だと認識しております。 シリアル転送の場合パリティービットの存在は知っておりましたが、パラレル転送でもパリティービットが使われているのですね。