rs232c

#define ASCII_BEL       0x07
#define ASCII_BS        0x08
#define ASCII_LF        0x0A
#define ASCII_CR        0x0D
#define ASCII_XON       0x11
#define ASCII_XOFF      0x13
 
void  main(int argc, char* argv[])
{
	HANDLE hCom;
 
	//RS232C制御用 RS232C の初期化
	hCom = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
	if (hCom == INVALID_HANDLE_VALUE) {
		return;
	}
 
	DCB dcb;
	BOOL fRetVal ;
	BYTE bSet ;
 
	dcb.DCBlength = sizeof(DCB) ;
 
	GetCommState(hCom, &dcb) ;
 
	dcb.BaudRate = 9600;		// 通信速度
	dcb.ByteSize = 8;			// データ長
	dcb.Parity = NOPARITY;		// パリティビット:EVENPARITY,MARKPARITY,NOPARITY,ODDPARITY
	dcb.StopBits = ONESTOPBIT;  // ストップビット:ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITS
	dcb.fOutxDsrFlow = bSet ;
	if (bSet) {
		dcb.fDtrControl = DTR_CONTROL_HANDSHAKE ;
	} else {
		dcb.fDtrControl = DTR_CONTROL_ENABLE ;
	}
 
	bSet = 0;
	dcb.fInX = dcb.fOutX = bSet ;
	dcb.XonChar = ASCII_XON ;
	dcb.XoffChar = ASCII_XOFF ;
	dcb.XonLim = 100 ;
	dcb.XoffLim = 100 ;
	dcb.fBinary = FALSE ;
	dcb.fParity = FALSE ;
 
    //ハードウェアフロー制御
dcb.fOutxCtsFlow = FALSE;       //  CTSハードウェアフロー制御:CTS制御を使用しない場合はFLASEを指定
                                            //         CTS 制御をする場合はTRUEを指定してCTS信号を監視します。                    
dcb.fOutxDsrFlow = FALSE;       //  DSRハードウェアフロー制御:使用しない場合はFALSEを指定
 // ソフトウェアフロー制御
dcb.fOutX = FALSE;                 // 送信時XON/OFF制御の有無: なし→FLALSE 
dcb.fInX = FALSE;                   // 受信時XON/XOFF制御の有無:なし→FALSE  
 
 
	SetCommState(hCom, &dcb);
	//RS232Cの初期化ここまで
 
 
	int i,j;
	unsigned long len;
	int num;
 
	// 送信用
	char send[32];
	printf("データを入力してください");
	scanf("%c" , send);
	num = atoi(send);
	printf("atoi:%d ",num);
 
 
	int send_length;
	send_length=sizeof(send);
	printf("send length:%d\n",send_length);
 
	//受信用
	unsigned char resv[32];
	int resv_length;
	unsigned char buff;
 
	for(j=0;j<5;j++){
		switch(j){
		//case 0:// sprintf(send,"\x88\x30\x01\xff"); send_length=4; break; //アドレス設定
		//case 1: //sprintf(send,"\x88\x01\x00\x01\xff"); send_length=5; break; //インタフェイスクリア
		//case 2: //sprintf(send,"\x81\x01\x06\x04\xff"); send_length=5; break; //ホーム
		//case 3: //sprintf(send,"\x81\x01\x06\x01\x10\x10\x03\x01\xff"); send_length=9; break; //上向く
		//case 4: //sprintf(send,"\x81\x01\x06\x04\xff"); send_length=5; break; //ホーム
		}
 
		Sleep(1000);
 
 
		printf("%d 回目:",j+1);
		for(i=0;i<32;i++){
			ReadFile(hCom,&buff,1,&len,NULL); //1つずつ受信
			resv[i]=buff;
			printf("%02x ",buff);
			if(buff==0xff){//ACK の次は Completion
				if(resv[0]==0x90 && resv[1]==0x41) i=0;
				else i=32;
			}
		WriteFile(hCom,send,send_length,&len,NULL); //書き込み
		printf("out:%d ",num);
 
			}
		printf("\n");
	}
 
	//後処理
	CloseHandle(hCom);
 
}
最終更新:2010年01月18日 11:56
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。
添付ファイル