如何写个利用8051透过RS-232的方式与PC沟通的程式(用c语言)?鲍率该怎ㄇ换算?

Home Home
引用 | 编辑 king206sw
2007-01-31 16:12
楼主
推文 x0
我是用KEIL C 我用超 ..

访客只能看到部份内容,免费 加入会员



献花 x0
引用 | 编辑 cmovies
2007-02-01 10:36
1楼
  
(14.7456MHz / 12) / 32 = 38400
38400 / 9600bps = 4
TH1 = 256 - 4 = 252

// 只要将 TMOD, TH1, TR1, SCON 设定正确就可以透过 SBUF 来传送资料给PC
SCON = 0x50; // 8 bit UART (mode 1)
TMOD = 0x20; // T0 mod 0, T1 mode 1
TH1 = -4;   // 256 - 4 = 252
TR1 = 1;   // 启动 Timer 1

// 透过 SBUF 传送资料给 PC
SBUF = Ɔ' // 传送 Ɔ' (0x30) 给 PC
while (!TI) ; // 等待传送完成

// 透过 KEIL C 的 puts, printf,... 来传送RS232资料
TI = 1;   // 使用 puts, printf, ... 前一定要先设为 1
puts("Hello"); // 传送 "Hello" 给 PC

献花 x0
引用 | 编辑 king206sw
2007-02-01 14:36
2楼
  
谢谢大大,鲍率我懂了,可是要传给PC显示HELLO还是不行
,能给我完整的程式吗?? 表情

献花 x0
引用 | 编辑 cmovies
2007-02-01 18:54
3楼
  
你用的是 KEIL 的 C51 吗? PC 用什么软体来接收显示?

#include <reg52.h>
#include <stdio.h>

void main(void)
{
  // 只要将 TMOD, TH1, TR1, SCON 设定正确就可以透过 SBUF 来传送资料给PC
  SCON = 0x50; // 8 bit UART (mode 1)
  TMOD = 0x20; // T0 mod 0, T1 mode 1
  TH1 = -4;   // 256 - 4 = 252
  TR1 = 1;   // 启动 Timer 1
 
  // 透过 KEIL C 的 puts, printf,... 来传送RS232资料
  TI = 1;   // 使用 puts, printf, ... 前一定要先设为 1
  puts("Hello"); // 传送 "Hello" 给 PC
  while (1) ;
}

献花 x0
引用 | 编辑 king206sw
2007-02-01 19:10
4楼
  
我是用KEIL C 我用超级终端机显示(CON1)来8051的资料
程式写那样就OK了吗??   表情

献花 x0
引用 | 编辑 cmovies
2007-02-01 19:23
5楼
  
如果硬体跟接线没问题的话应该就可以了.
记得超级终端机的 Flow Control 选择 None 比较简单.

献花 x0
引用 | 编辑 king206sw
2007-02-02 11:21
6楼
  
谢谢大大的解答~ 表情

献花 x0
引用 | 编辑 a0918149010
2008-04-10 18:51
7楼
  
#include <REG51.H>
#include <stdio.h>

void main(void)
{
// 只要将 TMOD, TH1, TR1, SCON 设定正确就可以透过 SBUF 来传送资料给PC
// SCON = 0x50; // 8 bit UART (mode 1)
// TMOD = 0x20; // T0 mod 0, T1 mode 1
// TH1 = -4;   // 256 - 4 = 252
// TR1 = 1;   // 启动 Timer 1

// 透过 KEIL C 的 puts, printf,... 来传送RS232资料
TI = 1;   // 使用 puts, printf, ... 前一定要先设为 1
puts("Hello"); // 传送 "Hello" 给 PC
while (1) ;
}

请问我的鲍率由硬体选择是否就可以不管SCON了呢??我用SBUF可以传送SBUF的值给PC, 但是用puts或printf就没办法传回到超级终端机,请问大大能否帮帮我呢?感激不尽

献花 x0
引用 | 编辑 a0918149010
2008-04-10 18:59
8楼
  
#include <REG51.H>
#include <stdio.h>

void main(void)
{
// 只要将 TMOD, TH1, TR1, SCON 设定正确就可以透过 SBUF 来传送资料给PC
// SCON = 0x50; // 8 bit UART (mode 1)
// TMOD = 0x20; // T0 mod 0, T1 mode 1
// TH1 = -4;   // 256 - 4 = 252
// TR1 = 1;   // 启动 Timer 1

// 透过 KEIL C 的 puts, printf,... 来传送RS232资料
TI = 1;   // 使用 puts, printf, ... 前一定要先设为 1
puts("Hello"); // 传送 "Hello" 给 PC
while (1) ;
}

请问大大我的RS232用SBUF可以回传SBUF里的值给PC超级终端机, 但是puts或是printf没办法回传字串回去, 我程式是否有错呢??因为我的硬体已有鲍率的选择, 是否可以不用设定SCON??请大大帮我解答一下, 感激不尽^^


献花 x0
引用 | 编辑 Gershwin
2008-07-14 16:40
9楼
  
感谢大大的分享,实在是太有用了,我收下了.感恩~ 表情

献花 x0
引用 | 编辑 eric3
2009-04-23 20:08
10楼
  
感谢大大, 我也来试试...

献花 x0