89C51ED2 透過RS232與電腦之間資料傳送的問題 |
缺席
|
jerichowang
一般會員 ![]() ![]() 發表:17 回覆:27 積分:8 註冊:2005-07-25 發送簡訊給我 |
大家好,我買了益仲出的89C51的實習版,使用上面的指撥開關改變P0的接腳電位高低,用此當作是一筆資料透過RS232傳送給電腦端的BCB程式接收,同樣的,再BCB這邊輸入一數字或字母,傳送給89C51,把此資料顯示再P1上面,P1有接8科LED
藉以顯示其收到的資料的值 以下是程式 電腦端的BCB程式
#include8051內部的程式是如下 #include現在問題是,我再BCB端丟出一個值譬如說A好了,A的ASCII值是65(0x41) 照理說我應該會再8051版子上看到LED燈號是01000001(1亮0滅),但是事實非如此,根本就是亂亮,且我再版子上用指撥開關搬一個組合,譬如說00110001(0x31) 他的ASCII對應到"1" 照理說我應該再BCB端收到"1",但卻是中文的亂碼,不知道為何這樣,我用這一個版子做串列自傳自收,8051顯示的燈號都沒問題, 所以我用是撥器量了一下8051送出的串列資料,發現真的根課本一樣都是10bit start bit 8bit data stop bit沒有錯誤(指波輸入多少就是多少);但是我量一下由電腦端送出的資料時,發現再TXD端的信號都跟8051的不同,且不管送什麼資料,電腦的RS232 TXD波型都一樣,但是我確定我的BCB程式可以兩台互傳字串沒問題,電腦com port在XP作業系統的com1設定為99600 N 8 1 , BCB也是,8051也是都正確,所以想請各位幫小第指點一下 謝謝各位 |
src
高階會員 ![]() ![]() ![]() ![]() 發表:1 回覆:94 積分:154 註冊:2005-08-23 發送簡訊給我 |
|
jerichowang
一般會員 ![]() ![]() 發表:17 回覆:27 積分:8 註冊:2005-07-25 發送簡訊給我 |
|
jerichowang
一般會員 ![]() ![]() 發表:17 回覆:27 積分:8 註冊:2005-07-25 發送簡訊給我 |
|
src
高階會員 ![]() ![]() ![]() ![]() 發表:1 回覆:94 積分:154 註冊:2005-08-23 發送簡訊給我 |
|
killop
一般會員 ![]() ![]() 發表:14 回覆:17 積分:11 註冊:2003-09-04 發送簡訊給我 |
|
㊣
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
1> 用超級終端機收看看就知道是不是你 BCB 的問題了. 2> max232 的旁路 C 你用多少? 3> PC 端送"A" 51 P1 端的燈號有可能是 "01000001", 也有可能是 "10111110". 看你電路怎麼接. 個人認為如 src 兄所說, 問題應該在你的BCB程式.
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
jerichowang
一般會員 ![]() ![]() 發表:17 回覆:27 積分:8 註冊:2005-07-25 發送簡訊給我 |
謝謝大家的回應... to killop :
如果你是用益眾的AT89C51ED2實習板
那恭喜你有30%機會可以解決 如果你用ATMEL FILP程式燒錄AT89C51ED2
那恭喜你有50%機會可以解決 如果你照著說明設定FILP參數
那恭喜你 可以將你PC端的鮑率設成19200.... 因為我也搞在這兩三天
問了好多人才知道調成X2 mode
你的AT89C51ED2可是在TURBO狀態啊:) PS. 我都不知道益眾有附程式 我都去ATMEL抓code...
有SPI跟UART的範例...還不錯用!
=============================================================
請問你說的30% 50%的機會可以解決是為什麼呢???
為何要調成X2 mode ???
你說我的8051是在turbo狀態..是指說我目前的模式可以將震盪器加至最大上限60MHZ嗎(data sheet 的首頁說明),這樣除了速度變快之外有什麼差別呢?? 我的flip 是ATMEL的沒錯,編譯C的編譯器是 Keil公司網頁上的 uVesion2 C51
編譯軟體.
謝謝
to ㊣
1> 用超級終端機收看看就知道是不是你 BCB 的問題了.
2> max232 的旁路 C 你用多少?
3> PC 端送"A" 51 P1 端的燈號有可能是 "01000001", 也有可能是 "10111110". 看你電路怎麼接.
max232的電容是 22uF/25V . 我再PC端送"A" 傳給8051..8051再透過port腳位輸出給8科LED燈號,結果燈號完全不正確,同樣的8051傳給電腦BCB端,收到的顯示出來也是中文亂碼,但是8051的串列輸出波型很正確,而BCB端電腦的RS232TXD送出的波型,我不管怎麼送,波型都一樣,我不知道為何,最奇怪的就是這一點了,既然電腦端送出的串列波型都一樣,那為何我兩台電腦之間的字元傳送都是正常的呢....且用示波器量了一下發現似乎電腦送的資料寬度和週期似乎都跟8051送出來的不同,但是我兩邊的通訊協定都是一樣的,
是不是兩邊的通訊協定都一樣 8051送一個資料是10bit , start bit 8bit data stop bit,電腦端也是如此...兩邊送出資料時的串列波型應該要一至吧
謝謝
|
killop
一般會員 ![]() ![]() 發表:14 回覆:17 積分:11 註冊:2003-09-04 發送簡訊給我 |
30% 50% 是說你的問題跟我遇到問題的相似度啦:) 如果你跟我ㄧ樣都是用
1). 益眾的AT89C51ED2實習板 編號:A12-0012
功能與特色:
1.AT89C51ED2為8位元微控制器,內部程式記憶體為64Mbytes,SRAM有1792 bytes,工作頻率可達60MHz,適合用來設計容量龐大的程式。
2.不需要透過燒錄器,由RS-232串列埠(COM埠)接收電腦傳送的執行檔。 2). 使用ATMEL的FLIP燒錄程式 3). 依照光碟的FLIP使用說明設定參數 (他送的文件裡面有說要勾選X2)
因為我寫UART程式也遇到PC端跟8051傳送RS232訊號不正確
如此需要設Baudrate為19200
如果你燒錄時沒有勾選X2 那你Baudrate 9600就應該可以動 普通8051一週期是12個CLOCK
但在X2 modeㄧ週期是6個CLOCK 所以他的Baudrate 9600x2
你前文說你用實習板 所以你的線路應該都是正確的 你將接收的程式baudrate設成19200收收看
再PO情況上來吧:)
PS. 電腦的終端機程式 記得將流量控制設成"無" 發表人 - killop 於 2005/11/19 14:32:41
|
killop
一般會員 ![]() ![]() 發表:14 回覆:17 積分:11 註冊:2003-09-04 發送簡訊給我 |
|
jerichowang
一般會員 ![]() ![]() 發表:17 回覆:27 積分:8 註冊:2005-07-25 發送簡訊給我 |
TO Killop
30% 50% 是說你的問題跟我遇到問題的相似度啦:) 如果你跟我ㄧ樣都是用
1). 益眾的AT89C51ED2實習板 編號:A12-0012
功能與特色:
1.AT89C51ED2為8位元微控制器,內部程式記憶體為64Mbytes,SRAM有1792 bytes,工作頻率可達60MHz,適合用來設計容量龐大的程式。
2.不需要透過燒錄器,由RS-232串列埠(COM埠)接收電腦傳送的執行檔。 2). 使用ATMEL的FLIP燒錄程式 3). 依照光碟的FLIP使用說明設定參數 (他送的文件裡面有說要勾選X2) 因為我寫UART程式也遇到PC端跟8051傳送RS232訊號不正確
如此需要設Baudrate為19200
如果你燒錄時沒有勾選X2 那你Baudrate 9600就應該可以動 普通8051一週期是12個CLOCK
但在X2 modeㄧ週期是6個CLOCK 所以他的Baudrate 9600x2
你前文說你用實習板 所以你的線路應該都是正確的 你將接收的程式baudrate設成19200收收看
再PO情況上來吧:)
PS. 電腦的終端機程式 記得將流量控制設成"無"
你好...我不太董你的意思..Flip的燒錄程式中 我確實有勾選X2,但是他的目的是否是將我原本8051程式中所設定的傳輸包率給乘以兩倍,那如果真的是這樣的話我8051程式中
TMOD=0x20; // 設定Timer1在Mode2
PCON=PCON&0x7f; // 清除SMOD
TH1=0xFD; // 設定baud rate=9600,
TR1=1; // 啟動Timer1
SCON=0x50; // UART Mode1,REN=1
所設定的9600實際上再傳輸時後是以乘以兩倍的速度在送,那麼以後我不管程式設定多少包率....我在電腦端不論是用超級終端機或是BCB的RS232程式,所設定的包率值不就都要乘以2了媽??? 他的X2書上沒說明.他的X2意思是這樣嗎..因為現在硬體不在我這所以也只好先用討論的看看.. 請問你已經可以成功接收了嗎??? 謝謝
|
jerichowang
一般會員 ![]() ![]() 發表:17 回覆:27 積分:8 註冊:2005-07-25 發送簡訊給我 |
|
killop
一般會員 ![]() ![]() 發表:14 回覆:17 積分:11 註冊:2003-09-04 發送簡訊給我 |
你可以在這個網頁下載C51 UART Code Examples
http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3420 這些範例是可以用的 我測試過
用Keilc打開project編譯就可以下載到AT89C51ED2了 因為震盪器的脈波是固定的
普通8051一機械週期是12個
但是89c51ed2裡的X2 mode讓它變成6個
所以感覺上像是變成2倍
建議你把X2選項取消
所以我現在也是不用X2...鮑率就是9600
等到比較熟悉了再來玩玩X2 mode...我現在功力還不夠 還不需要用到 另外不管89c51ed2程式設成9600 or 其他鮑率
只要在X2 mode下 你就要在RS232另外一端(例如電腦的終端機)的鮑率設成2倍 發表人 - killop 於 2005/11/19 15:37:41
|
jerichowang
一般會員 ![]() ![]() 發表:17 回覆:27 積分:8 註冊:2005-07-25 發送簡訊給我 |
|
jerichowang
一般會員 ![]() ![]() 發表:17 回覆:27 積分:8 註冊:2005-07-25 發送簡訊給我 |
您好.因為您跟我一樣是使用益仲的89C51ED2實習版子
所以想再跟您請教一下問題.. 就是若是你的一個程式中,程式只有
while(1)
P2=0x0F;(隨便一個值) 燒進去後用示波器量P2接腳,你的輸出電位是正確的嗎??我的都是low
不知道為何這樣,但是我一跟一跟接腳直接定址
while(1)
{
P2_0=1;
.
.
P2_7=1;
} 結果就正確 若是輸入
while(1)
{
P2=0x0F (隨便一個值) P3=0x01 (隨便一個值)
}
P2結果就正確
你的也會這樣嗎
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |