如何寫個利用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