作者: xzh5508 時間: 2018-3-26 16:32
多片連接一個串口,如果同時發送過來的話,你一個串口是接收不過來的吧!作者: kevin0142 時間: 2018-3-26 16:35
1、單獨鋪最好。作者: 鷹狐 時間: 2018-3-26 17:26
建議使用多選一芯片連接,由第六片單片機控制選擇端口,收到可以接受數據時選通相應通道進行接收,你的誤碼我從你描述來看主要來自一個地方,串口空閑狀態Tx是保持低位輸出的,如果單片機驅動不強那發送數據的單片機沒法拉高Tx,那你的數據肯定會出錯,除非你空閑狀態將串口引腳重新初始化為浮置,這顯然不符合軟件設計思路,通訊效率會低很多,所以使用多選一芯片肯定更適合你的使用場合。當然也有可能你自己已經規避了這個問題,只是我沒理解到,希望我的想法能幫到你。作者: kingd 時間: 2018-3-26 21:11
多個之間會有干擾的作者: dalaoshi 時間: 2018-3-27 01:13
各位好!謝謝各位的回應。
xzh5508: 每個前端單片機在發出訊號前都會先檢查是否允許,所以不會接收不過來。程序如下:
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單片機的串口在空閑的時候是高電位的,應該是弱上拉雙向輸出入口,可能設定為其他IO口模式
會改善,但不確定那些IO口模式設定是否也對串口有效。有待實驗,我分析了輸出的MIDI碼,都是在同一行出錯,這是否意味著硬件干擾的可能性比較低,因為干擾應該隨機發生的,但我在設計新打樣板時一定要把可能出現的干擾降低,所以加了很多0.1u電容哈。
使用多選一芯片應該是好辦法,但是我很想知道究竟STC多串口并聯的方式是否確實可用,而且最多能并上幾個而不出錯。
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個前端機
000C15C0 1 1 90 3C 10 1 C 4 Note On ;第2個前端機
000C15C2 1 1 90 3C 10 1 C 4 Note On ;第3個前端機
000C15C8 1 1 90 3C 10 1 C 4 Note On ;第4個前端機
000C161A 1 1 90 3C 10 1 C 4 Note On ;第5個前端機
000C1662 1 1 90 40 30 1 E 4 Note On ;第1個前端機
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 開始出錯
000C2142 1 1 90 00 40 1 C -1 Note On
000C2143 1 1 90 00 00 1 C -1 Note Off
作者: dalaoshi 時間: 2018-3-30 00:53
經過幾天調試,結果是,5片STC12的RX并聯輸出到一片STC12的TX是可行的,不必經過什么晶體管隔離,亂碼問題是由于單片機的軟件還有些問題,前端單片機輸出時除了必須等待允許輸出的腳的高電位,在輸出完畢后還必須檢測允許輸出的腳回到低電位才可以離開,否則在剩余時間里若緩沖里還有數據要輸出就會再輸出而因為時間不夠而產生亂碼,程序更正如下:
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