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 |
|
|
|