作者laevatain103 (RICO)
看板ASM
标题[问题] about rs232
时间Thu Sep 24 05:26:31 2009
我最近正在做RS232与89S51的相关传输。
我想请问一下
我在发送端 丢一个字串 过去 给89S51
然後89S51 再传回给我PC ㄧ个字串(程式内这样设定的...
可是 我在PC的回传值显示上看到却是 31 13 10(hex)
49 D A(10)
为何传回值是 3 个字元 是因为他协定的关系吗?
那我实际上传给89S51我的传送也都会附加 'D' 'A' 这2个字元吗?
我丢的是字串才对 而回传的也是字串(puts("1"));
太久没摸C = =||
可是又多了一个问题如果我使用 puts('1');
我只接收到 D A ????
网路的RS232文献都没有相关说明!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.33.51.36
1F:→ hayden0828:电脑端用什麽程式??会不会是'CR'跟'LF'换行字元 09/24 06:29
2F:推 ruemann:同意楼上,应该是你送了三个字元过去 09/24 10:36
3F:→ 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)
4F:→ laevatain103:我之前有查过ascii码 D A 的确是CR LF 这协定内定的? 09/24 11:06
5F:推 ruemann:你Windows程式的问题,把换行给送出去了 09/24 12:18
6F:→ laevatain103:那传回的值应该是ㄧ个字元才对(51写死的... 09/24 12:33
※ 编辑: laevatain103 来自: 140.128.142.122 (09/24 13:47)
7F:推 ruemann:你直接把TX和RX对接,这样你windows程式送啥就会收到啥 09/24 18:50
8F:→ ruemann:先确认windows程式可以送一个字元後再接回8051看结果 09/24 18:51
9F:→ laevatain103:直接拿线来接吗?= =|| 感觉蛮刺激的 09/24 23:02
10F:推 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)
11F:推 ruemann:最好是可以并个示波器看波型最准 09/30 23:55
12F:→ ruemann:puts这个函式如果不是你写的,最好去查一下用法 09/30 23:55
13F:→ 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)
14F:→ laevatain103:以上只能解释为什麽有LF..我现在还找不到未啥有CR 10/01 00:58
15F:推 WolfLord:一般M$系统字串'\n'就是解释为"\n\r"而UNIX上才是只有\n 10/01 01:37
16F:→ WolfLord:Keil C里面的内定putchar采用的是看到\n就自动加上\r 10/01 01:38
17F:→ WolfLord:而标准的C函式中puts 是会自动加上\n的,而puts一般都是 10/01 01:39
18F:→ WolfLord:透过 putchar来传送文字的。所以你的问题是由puts跟putch 10/01 01:39
19F:→ WolfLord:ar 两个函式合力构成的,要修正这个问题可以到C51的LIB 10/01 01:41
20F:→ WolfLord:目录中把putchar.c拿出来改 10/01 01:42
21F:推 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)