cmovies
|
分享:
▲
▼
你到底要一送一收還是兩邊都可以送收??? 或是你要利用 RS485 的腳位控制來當發送或接收端???
不想接收 RS485 資料就把 /RE 接 High 就可以了. 想發送資料的 RS485 第三腳 DE 接 High 就可以發送了, 但不可以兩邊同時接 High, 那麼即使 8051 沒有發送也會有問題. SCON 中的 bit 3 為 REN, 8051 的資料上寫的是接收致能, 如果沒設為 1 應該無法接收 不過我倒沒試過設為 0 還能不能接收, 因為書上寫要設為 1, 那為何要設為 0 呢???
我不曉的你的 P2 有沒有 pull high, 如果沒有的話, 那麼 MOV SBUF,P2 會送出什麼資料就很難講了.
假設情況: 一. 經由 RS485 的腳位來決定 A 或 B 當發送端或接收端(或一個送另一個收) A 當發送端: RS485 DE 接 High, /RE 接 High. B 當接收端: RS485 DE 接 Low, /RE 接 Low 如果這種接法還不行, 你可以用示波器來量接收端 RS485 的第一腳是否有訊號進來. 如果沒有示波器也可以用三用電表的 DC 電壓來量這隻腳. 當有訊號接收時, 你會看到電壓會變動, 如果沒有資料的話電壓會維持在大約 5V 而且不會變動
二. 兩者同時又想送也想收 以 RS485 Bus 價購是無法雙向送收的. 一般的作法是一個當 Master, 另一個當 Slave. 由 Master 主動送資料給 Slave 然後等待 Slave 的回應 這樣兩邊就不會有同時送資料的情況發生 另一種作法就類似 Ethernet 網路的作法(CSMA/CD) 簡單來說就是送之前先檢查 Bus 有沒有人在送資料 如果沒有就將資料送出去並檢查送出去的資料是否正確(如果別人也在送資料可能會被破壞) 一旦有問題就停止發送一段特定的時間(每片網路卡的特定時間不一定相同) 然後再回到檢查 Bus 有沒有人在送資料的階段 如此週而復始幾次後還不成功就告知上層傳送失敗.
|
|
x0
[11 樓]
From:台灣中華電信
| Posted:2006-04-06 01:28 |
|
|
cmovies
|
分享:
▲
▼
小弟所謂的副控制就是把接腳接地 不接vcc 就是 正電壓永遠on住 要讓哪個動作就加負電壓 -> 這兩段話好像有點矛盾, "正電壓永遠 ON 住"跟"不接 Vcc" 不太合? 不過這不是重點, 我不曉的你現在的情況有什麼問題嗎? 還有我總覺得你想要 A 發送 B 接收, 然後又希望 A 接收 B 發送. 這在你目前的軟硬體線路下應該是不可能的. 還是我弄錯了??? 那你怎麼確定要由 A 發送或 B 發送?? 經由 RS485 DE, /RE 接 High 或 Low 來決定嗎? 如果是就應該跟我 11 樓寫的情況一相同了 那這樣會有問題嗎?
Serial INT 指的是 8051 的串列中斷. 下面為我常用的程式寫法, 你可以參考看看 但是我覺得重點是你的問題在哪裡是否己經清楚了, 不然我想改了也沒用吧!?
org 0023h jmp SerialINT
SeralINT: push psw push a PollSerial: jbc ti, TrmInt jbc ri, RcvInt jmp SerialINT_Exit TrmInt: setb XmtDataReady jmp PollSerial RcvInt: mov a, sbuf jb P3.4, PollSerial ; 假設 P3.4 接到 RS485 DE, 如果 DE 為 High, 就將資料丟掉 ; 將收到的資料放在記憶體或直接判別也可以 jmp PollSerial SerialINT_Exit: pop a pop psw reti
SendChar: clr ti clr XmtDataReady setb p3.4 ; 將 RS485 DE 拉 High mov sbuf, a SendChar_Wait: jbc ti, SendChar_Exit jnb XmtDataReady, SendChar_Wait SendChar_Exit: clr p3.4 ; 將 RS485 DE 拉 Low ret
|
|
x0
[15 樓]
From:台灣中華電信
| Posted:2006-04-07 19:26 |
|
|
cmovies
|
分享:
▲
▼
有了示波器用來量訊號來找問題就變的很簡單了(前提當然是要會量囉!) 示波器不便宜吧! 如果數位儲存的應該要幾萬塊吧!? 蠻佩服你的上進心啦!
我用a單做發射 b單做接收 我現在把b的DE, /RE 接地 把a的 / RE 接地 DE接VCC時 B可以收到A發射的東西 但是當我把A的DE, /RE接VCC時 B卻收不到A發射的東西 -> 這不太合理, 你可以量 B 端的 RXD 及 A 端的 TXD 看看那邊有問題? 一般示波器應該有兩個 Channel, 你可以同時量測這兩隻腳就應該知道問題出在哪了? 除非 /RE 接 High 會影響 DE, 不過看 datasheet 應該不會啊! 所以量量看最容易知道問題在哪! 如果 B 端的 RXD 及 A 端的 TXD 同時有訊號那麼就應該是你的程式或判斷有問題了!?
第二個問題是 我用示波器去量ASCII碼時量出來的東西跟二進制的東西是不同的 為什麼會這樣 我用探棒的黑色鱷魚夾去接地 然後用探棒去接8051的RXD 謝謝 -> 這樣接沒錯, 應該是你解讀錯誤. RS232 的通訊協定一般為 1 Start bit, 8 Data bits, 1 Stop bit Start bit 為 Low Data bit 為 bit 0 先送出, 然後 bit 1, 2, 3, 4... Stop bit 為 High 例如: 你送出 Ɔ'(30h=00110000b), 示波器看到的是 0 00001100 1 (1 Start bit, 8 Data bits, 1 Stop bit)
三個問題是 89S52的ASCII碼可以改是發射7個或是8個位元嘛 一般的ASCII碼不是有發射7個位元和8個位元兩種模式嘛 謝謝 -> 可以. 如果為 7 Data bits, 一般都會再跟一個同位檢查位元 (Parity bit), 有四種模式 1. Even(偶同位) - 所有 Data bits 的 1 必須為偶數, 如 0000100 同位元就為 1 湊成偶數 2. Odd(奇同位) - 所有 Data bits 的 1 必須為奇數, 如 0000110 同位元就為 1 湊成奇數 3. Space - 強迫為 0 4. Mark - 強迫為 1 8051 只支援 8 Data bits, 9 Data bits 所以如果要 7 Data bits 你可以選擇用 Mark(如果接收者沒有同位檢查位元), 或跟接收者同樣的同位檢查 8051 可沒有像 PC 的 UART chip 一樣有上面幾種模式可以選 如果你要同位檢查必須自己寫程式加上去 例如: (7 Data bits) 1. Even: (利用 8051 PSW 中的 P 位元, 因為 8051 的 P 位元就是偶同位) clr a.7 mov c, p mov a.7, c mov sbuf, a 2. Odd: clr a.7 mov c, p cpl c mov a.7, c mov sbuf, a 3. Space clr a.7 mov sbuf, a 4. Mark setb a.7 mov sbuf, a
|
|
x0
[17 樓]
From:台灣中華電信
| Posted:2006-04-19 02:12 |
|
|
tgs0910
|
分享:
▲
▼
ORG 00h MOV TMOD,#00100000B MOV TH1,#0FDH SETB TR1 ORL PCON,#80H MOV SCON,#01110000B ; LOOP: JNB RI,K0 CLR RI ; MOV A,SBUF ; C1: CJNE A,#30H,C2 CLR P1.0 JMP K0 ; C2: CJNE A,#31H,C3 CLR P1.1 JMP K0 ; C3: CJNE A,#32H,C4 CLR P1.2 JMP K0 ; C4: CJNE A,#33H,C5 CLR P1.3 JMP K0 ; C5: CJNE A,#34H,C6 CLR P1.4 JMP K0 ; C6: CJNE A,#35H,C7 CLR P1.5 JMP K0 ; C7: CJNE A,#36H,C8 CLR P1.6 JMP K0 ; C8: CJNE A,#37H,LOOP CLR P1.7 JMP K0 ; K0: MOV P2,#11111111B JB P2.0,K1 MOV A,#30H JMP K8 ; K1: JB P2.1,K2 MOV A,#31H JMP K8 ; K2: JB P2.2,K3 MOV A,#32H JMP K8 ; K3: JB P2.3,K4 MOV A,#33H JMP K8 ; K4: JB P2.4,K5 MOV A,#34H JMP K8 ; K5: JB P2.5,K5 MOV A,#35H JMP K8 ; K6: JB P2.6,K7 MOV A,#36H JMP K8 ; K7: JB P2.7,LOOP MOV A,#37H JMP K8 ; K8: MOV SBUF,A JNB TI,$ CLR TI AJMP LOOP ; END 大大請問一下我這樣寫有什麼問題 為何收不到 還有我把/RE接VCC 量時都沒有信號 我去
|
|
x0
[18 樓]
From:台灣
| Posted:2006-04-19 18:45 |
|
|
|