台灣最大程式設計社群網站
線上人數
1155
 
會員總數:243466
討論主題:188182
歡迎您免費加入會員
討論區列表 >> Linux / Unix >> Linux C RS232通訊問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Linux C RS232通訊問題
價值 : 50 QP  點閱數:4874 回應數:5

樓主

A06
門外漢
0 3
100 2
發送站內信

我的Linux跟某一儀器用r232連接,儀器會傳類似000025100045資料一直傳,我用終端機minicom指令可讀,自己開一個程式卻不行讀取資料, 但是 如果開程式以後 再開minicom 這個程式就可以讀了 我現在想寫一個程式 讓它能讀取rs232傳過來的資料 而且能把資料收集起來 不要使用minicom 請問要怎麼寫 請教一下 謝謝 以下是code

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <termios.h>

#include <stdio.h>

#define BAUDRATE B38400

#define MODEMDEVICE "/dev/ttyS1"

#define _POSIX_SOURCE 1

int main()

{

int fd, c=0, res;

struct termios oldtio, newtio;

char buf[256];

printf("Start...\n");

fd = open(MODEMDEVICE, O_RDWR|O_NOCTTY);

if (fd < 0) {

perror(MODEMDEVICE);

exit(1);

}

printf("Open...\n");

tcgetattr(fd, &oldtio);

bzero(&newtio, sizeof(newtio));

newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;

newtio.c_iflag = IGNPAR;

newtio.c_oflag = 0;

/* 設定為正規模式 */

newtio.c_lflag = ICANON;

tcflush(fd, TCIFLUSH);

tcsetattr(fd, TCSANOW, &newtio);

printf("Reading...\n");

while(1) {

res = read(fd, buf, 255);

buf[res]=0;

printf("res=%d buf=%s\n", res, buf);

if (buf[0] == '@') break;

}

printf("Close...\n");

close(fd);

tcsetattr(fd, TCSANOW, &oldtio);

return 0;

}

本篇文章發表於2009-08-28 10:36
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

jack
捐贈 VP 給 怎有人這麼喜歡改暱稱 檢舉此回應
通訊 除了速度之外 還有 N81/O71 及 handshack 等問題

最好先確定硬體設定 再來找資料 比較不會走冤枉路


minicom handshack 軟體/硬體/None 切換看看
看不是就不能動了?

先確定是哪種 handshack 能動


本篇文章回覆於2010-11-08 13:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

jack
捐贈 VP 給 怎有人這麼喜歡改暱稱 檢舉此回應
本篇文章發表於2009-08-28 10:36

傻了∼ 一年多才回... :$
本篇文章回覆於2010-11-09 23:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

ponteny
檢舉此回應
一年才多回不是重點 重要的是多年後 有其他需要的人看到了 ^^
本篇文章回覆於2016-05-25 11:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
最有價值解答

怎有人這麼喜歡改暱稱
捐贈 VP 給 怎有人這麼喜歡改暱稱 檢舉此回應
然後 原發問人 沒看到這樣.... XD
本篇文章回覆於2018-01-22 13:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

A06
檢舉此回應
各位好,我是原PO,沒想到隔了8年多才看到,當年還只是一個魯蛇大學生,不過還是謝謝各位的回覆。
本篇文章回覆於2018-01-22 19:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.