シリアル送信3文字(0-250)

サンプルプログラム

/* BCC版シリアル送信プロトタイプ 入力した数値を文字列として送信 エラー処理つき桁数不定(rs_send03.c) 2003/08/19(Tue) */ #include <windows.h> #include <stdio.h> #include <ctype.h> typedef enum { // ボーレート設定リスト br2400 = 2400, br4800 = 4800, br9600 = 9600, br19200 = 19200, br31250 = 31250, br38400 = 38400, br57600 = 57600 } BaudRate; /* シリアルポート初期化関数 */ void InitSer(DCB dcb, HANDLE* hComm, BaudRate baud) { *hComm = CreateFile( "COM1", /* シリアルポートの指定 */ GENERIC_WRITE, /* アクセスモード */ 0, /* 共有モード */ NULL, /* セキュリティ属性 */ OPEN_EXISTING, /* 作成フラグ */ FILE_ATTRIBUTE_NORMAL, /* 属性 */ NULL /* テンプレートのハンドル */ ); GetCommState(*hComm, &dcb); /* DCB を取得 */ dcb.BaudRate = baud; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; SetCommState(*hComm, &dcb); /* DCB を設定 */ } int chop(char* input) { int i, c_stat, r_stat=1; for(i=0; input[i]!='\n'; i++){ c_stat=isdigit(input[i]); if(c_stat==0){ r_stat=-1; } } input[i]='\0'; return(r_stat); } int main(void) { DCB dcb; /* 通信パラメータ */ HANDLE hComm; /* シリアルポートのハンドル */ DWORD writesize; /* ポートへ書き込んだバイト数 */ BaudRate baud=br38400; /* BaudRate設定用 */ char input[1024]; /* 入力用 */ int status, status2, value=-1; /* エラー処理,数値格納 */ InitSer(dcb, &hComm, baud); while(1){ printf("\n送信数値を入力(0-250)251で終了:"); fgets(input, 1024, stdin); status=sscanf(input, "%d", &value); status2=chop(input); if(status!=1 || status2<0){ printf("数値以外が入力されました\n"); printf("入力文字%s\n", input); }else if(value>=0 && value <=251){ if(value==251){ break; } WriteFile(hComm, input, strlen(input), &writesize, NULL); /* シリアルポートに書き込み */ printf("入力文字:%s\n", input); printf("送信数値:%d\n", value); }else if(status==1){ printf("0-250の範囲外の数値が入力されました\n"); printf("入力数値%d\n", value); } value=-1; } CloseHandle(hComm); return(0); }

BorlandC++Compilerの目次へ

トップページへ

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送