線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1496
推到 Plurk!
推到 Facebook!

串列傳輸的困惑

答題得分者是:taishyang
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-10-19 09:01:44 IP:122.121.xxx.xxx 訂閱
我的問題是這樣的....
我想要讓兩顆8051做通訊,通訊的橋樑是使用8051上的RXD跟TXD。
可是!我要傳輸的數值是大於256(十進位)的數值...
所以我想說分成兩組位元組個別傳送~
但就會產生另一個問題,到底要如何讓接收端的晶片知道
這兩組位元組哪一組是高位元組哪一組是低位元組??
此外還有...如果分批傳送如果傳送速度太快,導致接收端資料處理太慢讓SBUF塞車的話那怎麼辦?
那該如何讓傳送端的晶片之道接收端正在塞車呢??

我本來是想說利用ASCII的編碼傳輸
假設先傳輸"A" 就表示這是高位元組 在傳輸高位元組過去
接著在傳輸"B" 表示這是低位元組 在把低位元組傳過去
總共傳輸四次...
可是晶片會把"A"當成是數字嗎???
好困惑喔...有大大可以為我解惑嗎???
ererer40
初階會員


發表:37
回覆:91
積分:45
註冊:2008-05-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-10-19 10:29:48 IP:60.248.xxx.xxx 訂閱
這兩組位元組哪一組是高位元組哪一組是低位元組??
可以參考一些串列傳輸的IC,他們是如何收發的
通常傳輸前會有一個指令,這個指令一般是通知收與發或像你問題我現在要傳那個數據
如果堅持只用一條IO,可以用時序控制,不過間距設計上要配合硬體設計洽當,例如前1秒是傳的位元代表發與收的指令,第2秒代表要傳高位元還是低位元,第3秒以後是要傳的資料數據
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-10-19 11:08:22 IP:122.121.xxx.xxx 訂閱
感謝大大的回覆~
但是我有疑問...
同樣都是8bit的位元組
晶片如何分辨這是指令、還是數據資料呢?
例如假設我傳送的bit是0x00
那接收的晶片如何知道這是ASCII的空字元(Null),還是數據為0的資料呢??
ererer40
初階會員


發表:37
回覆:91
積分:45
註冊:2008-05-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-10-19 13:52:57 IP:60.248.xxx.xxx 訂閱
晶片如何分辨這是指令、還是數據資料呢?

用傳的順序配合時間間距

例如第1秒內所收發的資料為指令,下一秒為資料....

如果怕時序設計上有風險,例如二端有一端跑太快或太慢造成誤判,可以再拉一條IO用他的ON-OFF作為開姞與結束,接收下一個BIT時先判斷這一條IO的狀態再行下一步
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-10-19 14:22:36 IP:122.116.xxx.xxx 訂閱
MCU只知道收到的是0x00,看user要將0x00定義成字元or資料

通常傳輸資料時都會去定一個協定,例如
[header] [data len] [data0] [data1] ... [dataN] [check sum]
兩邊就可以依照這協定來溝通



===================引 用 loveforme 文 章===================
同樣都是8bit的位元組
晶片如何分辨這是指令、還是數據資料呢?
例如假設我傳送的bit是0x00
那接收的晶片如何知道這是ASCII的空字元(Null),還是數據為0的資料呢??
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-10-19 15:33:28 IP:122.121.xxx.xxx 訂閱
那我可以設計讓晶片對話嚕?
例如:
A MCU: 請問B MCU有空嗎?(緩衝區是否尚有空間)
B MCU: 回答 Y (ASCII) 表示有空 ,回答N表示沒空
A MCU: 持續等待B MCU 回答Y ...
等到Y答案之後傳送 [header] [data len] [data0] [data1] ... [dataN] [check sum]
B MCU: 在進行解碼的工作....

這樣的想法是否還有其他的缺陷呢??

===================引 用 taishyang 文 章===================
MCU只知道收到的是0x00,看user要將0x00定義成字元or資料

通常傳輸資料時都會去定一個協定,例如
[header] [data len] [data0] [data1] ... [dataN] [check sum]
兩邊就可以依照這協定來溝通
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-10-19 15:53:55 IP:122.116.xxx.xxx 訂閱
是不是byte不重要,重要的是傳送端與接收端的協議
[header]主要是指傳送的命令
[check sum]是用來驗證packet的正確性,最常用就是0xff-所有欄位的總合,也可以用CRC之類的方式
至於要怎麼溝通是由開發者自行設計,只要傳送端跟接收端協議好即可




===================引 用 loveforme 文 章===================
那我可以設計讓晶片對話嚕?
例如:
A MCU: 請問B MCU有空嗎?(緩衝區是否尚有空間)
B MCU: 回答Y (ASCII) 表示有空 ,回答N表示沒空
A MCU: 持續等待B MCU 回答Y ...
等到Y答案之後傳送 [header] [data len] [data0] [data1] ... [dataN] [check sum]
B MCU: 在進行解碼的工作....

這樣的想法是否還有其他的缺陷呢??


系統時間:2024-05-07 8:49:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!