→ hayden0828:電腦端用什麼程式??會不會是'CR'跟'LF'換行字元 09/24 06:29
推 ruemann:同意樓上,應該是你送了三個字元過去 09/24 10:36
→ laevatain103:sorry..我打錯...那應該是10進位制而非ASCII... 09/24 11:03
※ 編輯: laevatain103 來自: 114.33.51.36 (09/24 11:04)
※ 編輯: laevatain103 來自: 114.33.51.36 (09/24 11:05)
→ laevatain103:我之前有查過ascii碼 D A 的確是CR LF 這協定內定的? 09/24 11:06
推 ruemann:你Windows程式的問題,把換行給送出去了 09/24 12:18
→ laevatain103:那傳回的值應該是ㄧ個字元才對(51寫死的... 09/24 12:33
※ 編輯: laevatain103 來自: 140.128.142.122 (09/24 13:47)
推 ruemann:你直接把TX和RX對接,這樣你windows程式送啥就會收到啥 09/24 18:50
→ ruemann:先確認windows程式可以送一個字元後再接回8051看結果 09/24 18:51
→ laevatain103:直接拿線來接嗎?= =|| 感覺蠻刺激的 09/24 23:02
推 ruemann:RS232對接測試很正常啊…… 09/25 02:24
我做了對接後發現並無有 CR LF
我做了一些簡單的測試
8051(CODE) PC(接收資料顯示以10進位表示)
puts("1"); 49 13 10
puts('2'); 13 10
printf("3"); 51
printf('4');
link: http://imgur.com/1NPcz (有圖有真相)
從以上來推測 應該是 puts(); 此函數所自動附加的!
※ 編輯: laevatain103 來自: 114.33.51.36 (09/30 20:44)
※ 編輯: laevatain103 來自: 114.33.51.36 (09/30 20:45)
推 ruemann:最好是可以並個示波器看波型最準 09/30 23:55
→ ruemann:puts這個函式如果不是你寫的,最好去查一下用法 09/30 23:55
→ laevatain103:puts() 是內建的~我正在找相關文件= = 10/01 00:19
我在C51 compiler的文件中找到
int puts (const char *string);
Description: The puts function writes string followed by a newline
character (‘\n’) to the output stream using the putchar
function.
※ 編輯: laevatain103 來自: 114.33.51.36 (10/01 00:35)
→ laevatain103:以上只能解釋為什麼有LF..我現在還找不到未啥有CR 10/01 00:58
推 WolfLord:一般M$系統字串'\n'就是解釋為"\n\r"而UNIX上才是只有\n 10/01 01:37
→ WolfLord:Keil C裡面的內定putchar採用的是看到\n就自動加上\r 10/01 01:38
→ WolfLord:而標準的C函式中puts 是會自動加上\n的,而puts一般都是 10/01 01:39
→ WolfLord:透過 putchar來傳送文字的。所以你的問題是由puts跟putch 10/01 01:39
→ WolfLord:ar 兩個函式合力構成的,要修正這個問題可以到C51的LIB 10/01 01:41
→ WolfLord:目錄中把putchar.c拿出來改 10/01 01:42
推 ruemann:樓上高手 10/01 01:50
感謝樓上大大門~真是讓我受益良多!
應該是 \r\n 而不是 \n\r 相信你一定手誤了吧XD
New line, UNIX中代表ASCII 10(十進位),
DOS(Windows)系統中則是ASCII 13 + ASCII 10(十進位).
參考
link: http://ind.ntou.edu.tw/~dada/cgi/Perlsynx.htm
(使用搜尋關鍵字UNIX會把較容易找到)
※ 編輯: laevatain103 來自: 114.33.51.36 (10/01 02:22)
※ 編輯: laevatain103 來自: 114.33.51.36 (10/01 02:24)