熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2021-9-17 00:10
正文摘要:我怕我中斷初始化寫的有問題,發(fā)上來大家?guī)兔匆幌拢x謝串口1接收藍(lán)牙從機(jī)的數(shù)據(jù),串口2發(fā)送接收到的數(shù)據(jù)出 |
1、理論上是不可以同時(shí)的,但由于串行通訊慢,實(shí)際上是可以做到的。 2、軟件上做成一個(gè)只收一個(gè)只發(fā),協(xié)議上雙方也服從這個(gè)約定。 3、中斷據(jù)服務(wù)程序,運(yùn)行時(shí)間不能起過一個(gè)字節(jié)的拼裝收發(fā)時(shí)間,否則“1、”的不可以同時(shí)就發(fā)生了。 實(shí)際應(yīng)用中,這個(gè)做樣是不可取的,一個(gè)串口收、發(fā)就夠了。 采用兩個(gè)串口,數(shù)據(jù)通訊量也只能提高一倍,而增加一倍的波特率也同樣能達(dá)成目的。 當(dāng)然波特率會(huì)受到限制時(shí),而不得不通過增加串口數(shù)量來提升通訊數(shù)據(jù)量,但也不會(huì)采用一收一發(fā),而是一收發(fā)、另一個(gè)也收發(fā),這樣更機(jī)動(dòng)。 |
單片機(jī)資源有限巧妙分時(shí)是常用方法 |
無窮小量 發(fā)表于 2021-9-17 16:21 S1 的 REN 不用關(guān),一直開著接受,不影響,S1 可以高優(yōu)先級(jí),S2 不用, 因?yàn),?duì)方機(jī)不知道你這個(gè)單片機(jī)的實(shí)際情況,所以,接受要給足夠的優(yōu)先度,而 S2 發(fā)送,可以遷就 其他程序,等到不忙的時(shí)候再發(fā)送, 最后,優(yōu)先級(jí)只牽涉到 對(duì) TI RI 的響應(yīng), 所以,S2 只要你數(shù)據(jù) 放到了 SBUF2 里面,不會(huì)因?yàn)?S1 接受數(shù)據(jù)被打斷影響的。 |
188610329 發(fā)表于 2021-9-17 15:47 就是我用s1來接收,初始化的時(shí)候scon的REN=1,S2CON的REN = 0接收到指定字符,SCON 的TI和RI置0,之后SCON 的REN =0,S 2CON 的REN=1開始發(fā)送數(shù)據(jù)ES2=1 |
188610329 發(fā)表于 2021-9-17 15:47 用優(yōu)先級(jí)控制可以嗎請(qǐng)問 |
你嘴上說一個(gè) 收 一個(gè)發(fā) 實(shí)際上兩個(gè)都只在 判斷 RI 一般一個(gè)收,一個(gè)發(fā),建議用 S1 來收 S2 來發(fā), 只是負(fù)責(zé)發(fā)送的話,S2 只要 中斷觸發(fā),不用做任何判斷,就直接把 把 TI2 RI2 都置 0 , 就是中斷進(jìn)去就是直接 S2CON &= 0xfC; 然后標(biāo)記 S2Busy = 0; S1 要寫完整的判斷 if(RI) 怎么怎么, if(TI) 怎么怎么, 兩個(gè)結(jié)束 都要分別加上 RI =0; TI =0; 不然程序可能炮死,反正只要開了串口中斷,就算啥也不干,也必須有 TI =0; RI =0; 不然就會(huì)出問題。 |
可以查看寄存器列表,寄存器里面有接收發(fā)送控制位,如果想關(guān)閉某一功能直接對(duì)應(yīng)位置位0就可以。 |
好像單片機(jī)只能一個(gè)中斷一個(gè)中斷的運(yùn)行,這種同時(shí)可能有問題的。 |
Powered by 單片機(jī)教程網(wǎng)