作者: xzh5508 時(shí)間: 2018-3-26 16:32
多片連接一個(gè)串口,如果同時(shí)發(fā)送過來的話,你一個(gè)串口是接收不過來的吧!作者: kevin0142 時(shí)間: 2018-3-26 16:35
1、單獨(dú)鋪?zhàn)詈谩?hr noshade size="2" width="100%" color="#808080">
作者: 鷹狐 時(shí)間: 2018-3-26 17:26
建議使用多選一芯片連接,由第六片單片機(jī)控制選擇端口,收到可以接受數(shù)據(jù)時(shí)選通相應(yīng)通道進(jìn)行接收,你的誤碼我從你描述來看主要來自一個(gè)地方,串口空閑狀態(tài)Tx是保持低位輸出的,如果單片機(jī)驅(qū)動(dòng)不強(qiáng)那發(fā)送數(shù)據(jù)的單片機(jī)沒法拉高Tx,那你的數(shù)據(jù)肯定會(huì)出錯(cuò),除非你空閑狀態(tài)將串口引腳重新初始化為浮置,這顯然不符合軟件設(shè)計(jì)思路,通訊效率會(huì)低很多,所以使用多選一芯片肯定更適合你的使用場合。當(dāng)然也有可能你自己已經(jīng)規(guī)避了這個(gè)問題,只是我沒理解到,希望我的想法能幫到你。作者: kingd 時(shí)間: 2018-3-26 21:11
多個(gè)之間會(huì)有干擾的作者: dalaoshi 時(shí)間: 2018-3-27 01:13
各位好!謝謝各位的回應(yīng)。
xzh5508: 每個(gè)前端單片機(jī)在發(fā)出訊號(hào)前都會(huì)先檢查是否允許,所以不會(huì)接收不過來。程序如下:
SENTOUTWAIT: ;THIS IS FOR MERGE WAIT ;CHECK INPUT STATUS BEFORE SENT
JNB P1.5,SENTOUTWAIT ;P1.5 NOT YET HIGH SO WAIT
SETB P1.7
MOV R4, 31H ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
MOV R4, 32H ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
JB 38H, SENTOUTWAITEXIT ;ONLY 2 VALID BYTES SO JUMP
MOV R4, 33H ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
SENTOUTWAITEXIT:
CLR 38H
RET
鷹狐: STC單片機(jī)的串口在空閑的時(shí)候是高電位的,應(yīng)該是弱上拉雙向輸出入口,可能設(shè)定為其他IO口模式
會(huì)改善,但不確定那些IO口模式設(shè)定是否也對串口有效。有待實(shí)驗(yàn),我分析了輸出的MIDI碼,都是在同一行出錯(cuò),這是否意味著硬件干擾的可能性比較低,因?yàn)楦蓴_應(yīng)該隨機(jī)發(fā)生的,但我在設(shè)計(jì)新打樣板時(shí)一定要把可能出現(xiàn)的干擾降低,所以加了很多0.1u電容哈。
使用多選一芯片應(yīng)該是好辦法,但是我很想知道究竟STC多串口并聯(lián)的方式是否確實(shí)可用,而且最多能并上幾個(gè)而不出錯(cuò)。
TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT
000C1573 1 1 C0 00 -- 1 --- PC: Acc. Grand Piano
000C15BB 1 1 90 3C 10 1 C 4 Note On ;第1個(gè)前端機(jī)
000C15C0 1 1 90 3C 10 1 C 4 Note On ;第2個(gè)前端機(jī)
000C15C2 1 1 90 3C 10 1 C 4 Note On ;第3個(gè)前端機(jī)
000C15C8 1 1 90 3C 10 1 C 4 Note On ;第4個(gè)前端機(jī)
000C161A 1 1 90 3C 10 1 C 4 Note On ;第5個(gè)前端機(jī)
000C1662 1 1 90 40 30 1 E 4 Note On ;第1個(gè)前端機(jī)
000C1667 1 1 90 40 30 1 E 4 Note On
000C1669 1 1 90 40 30 1 E 4 Note On
000C166C 1 1 90 40 30 1 E 4 Note On
000C16C1 1 1 90 40 30 1 E 4 Note On
000C17A9 1 1 90 43 40 1 G 4 Note On
000C17AE 1 1 90 43 40 1 G 4 Note On
000C17AF 1 1 90 43 40 1 G 4 Note On
000C17B3 1 1 90 43 40 1 G 4 Note On
000C1808 1 1 90 43 40 1 G 4 Note On
000C1993 1 1 90 48 60 1 C 5 Note On
000C1998 1 1 90 48 60 1 C 5 Note On
000C199A 1 1 90 48 60 1 C 5 Note On
000C199C 1 1 90 48 60 1 C 5 Note On
000C19F2 1 1 90 48 60 1 C 5 Note On
000C213B 1 1 80 3C 00 1 C 4 Note Off
000C213C 1 1 80 40 00 1 E 4 Note Off
000C213E 1 1 80 3C 00 1 C 4 Note Off
000C213F 1 1 80 40 00 1 E 4 Note Off
000C2141 1 1 90 00 00 1 C -1 Note Off 開始出錯(cuò)
000C2142 1 1 90 00 40 1 C -1 Note On
000C2143 1 1 90 00 00 1 C -1 Note Off
作者: dalaoshi 時(shí)間: 2018-3-30 00:53
經(jīng)過幾天調(diào)試,結(jié)果是,5片STC12的RX并聯(lián)輸出到一片STC12的TX是可行的,不必經(jīng)過什么晶體管隔離,亂碼問題是由于單片機(jī)的軟件還有些問題,前端單片機(jī)輸出時(shí)除了必須等待允許輸出的腳的高電位,在輸出完畢后還必須檢測允許輸出的腳回到低電位才可以離開,否則在剩余時(shí)間里若緩沖里還有數(shù)據(jù)要輸出就會(huì)再輸出而因?yàn)闀r(shí)間不夠而產(chǎn)生亂碼,程序更正如下:
SENTOUTWAIT: ;THIS IS FOR MERGE WAIT ;CHECK INPUT STATUS BEFORE SENT
JNB P1.5,SENTOUTWAIT
SETB P1.7
MOV R4, 31H ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
MOV R4, 32H ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
JB 38H, SENTOUTWAITEXIT ;ONLY 2 VALID BYTES
MOV R4, 33H ;STORE DATA FOR CLOCK OUT IN R4
LCALL SENTONEBYTE2
SENTOUTWAITEXIT:
JB P1.5, SENTOUTWAITEXIT ;WAIT FOR LOW
CLR 38H
RET