Rs232通信程式 |
答題得分者是:piopoip
|
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
大家好:
小弟用Kylix寫了一個Rs232通信程式,目的是要把ABC這三個字元傳到另一台電腦。但在另一台電腦上卻接收到6個字元,內容為:6,152,24,152,30,152。原始程式如下,請問為何會如此呢?麻煩大家幫幫忙了,thanks a lot. char SendData[3]={ 'A','B','C' };
int fp;
struct termios oldtio,newtio;
if((fp=open("/dev/ttyS0",O_RDWR|O_NOCTTY))!=-1) // 開啟Com1。
{
tcgetattr(fp,&oldtio); // 儲存目前的序列埠設定。
bzero(&newtio, sizeof(newtio)); // 清除結構體以放入新的序列埠設定值。
newtio.c_cflag=B19200 | CRTSCTS | CS8 | CLOCAL | CREAD; // Baudrate:19200
// Data :8
// Parity :None
// Stop :1
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
/* 設定輸入模式 (非標準型, 不回應,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* 不使用分割字元組計時器 */
newtio.c_cc[VMIN] = 5; /* 在讀取到 5 個字元前先停止 */
tcflush(fp,TCIFLUSH); // 清除數據機線。
tcsetattr(fp,TCSANOW,&newtio); // 啟動序列埠的設定。
write(fp,SendData,sizeof(SendData));
tcsetattr(fp,TCSANOW,&oldtio); // 回存舊的序列埠設定值
close(fp); // 關閉Com1。
}
|
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
|
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
後來我又發現一個現象,就是write(fp,SendData,sizeof(SendData));
並沒有把資料送出去,而是等到close(fp);時。另一端的電腦才收到資料。
在close(fp);前有一行tcsetattr(fp,TCSANOW,&oldtio); // 回存舊的序列埠設定值。所以鮑率又被改回9600。 問題是write(fp,SendData,sizeof(SendData)); 為何無法將資料送出去,為
何要等到close(fp);才送呢?
此問題還是無解...
|
coolshou
一般會員 發表:0 回覆:1 積分:0 註冊:2003-05-15 發送簡訊給我 |
|
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
|
piopoip
一般會員 發表:8 回覆:8 積分:13 註冊:2002-08-26 發送簡訊給我 |
|
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
|
piopoip
一般會員 發表:8 回覆:8 積分:13 註冊:2002-08-26 發送簡訊給我 |
|
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
|
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
我後來發現控制RTS的方法,但我實際使用在Kylix 3.0 C 中卻是失敗。
程式如下: ioctl (fp, TIOCMSET, &arg); /* get current state */
arg &= ~TIOCM_RTS; /* clear RTS */
ioctl (fp, TIOCMSET, &arg); /* do it */
arg |= TIOCM_RTS; /* set RTS */
ioctl (fp, TIOCMSET, &arg); /* do it */ 我發現在Kylix中只要一開檔open("/dev/ttyS0",O_RDWR|O_NOCTTY),
RTS就自動ON,即使使用ioctl()也無法將它OFF。直到close(fp)
RTS才會OFF。 這個問題已經問了一年多,但小弟能力有限,英文程度又不佳,始終無法解決。 再次麻煩前輩們幫幫忙了。thanks. 發表人 - sigmaccc 於 2005/02/25 10:59:47
|
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |