|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
串口問(wèn)題搞了兩天沒(méi)結(jié)果,請(qǐng)大家?guī)蛶兔?看看源程?/h1> |
| 作者:行星 欄目:單片機(jī) |
DEL833: ;MOV R6,#02H MS11: MOV R7 ,#44 ; 9600bout ; DJNZ R7,$ ;DJNZ R6,MS11 RET ; ********************************** ;******** 89C51發(fā)送數(shù)據(jù)給PC 機(jī)子程序**** INPUT: CLR C MOV TXD1,C ;發(fā)送起始位 LCALL DEL833 ;延時(shí) MOV R3,#8 REP: RRC A MOV TXD1 ,C LCALL DEL833 DJNZ R3,REP ;發(fā)送8 位數(shù)據(jù) SETB C ;發(fā)送停止位 MOV TXD1,C LCALL DEL833 RET ;********從PC 機(jī)接收數(shù)據(jù)子程序******** OUTPUT: JB RXD1, $ ; 判斷是否有起始位出現(xiàn) LCALL DEL833 MOV R3,#8 OUT: MOV C ,RXD1 RRC A LCALL DEL833 DJNZ R3,OUT ; 接收8 位數(shù)據(jù) JNB RXD1 ,$ ; 判斷是否有停止位出現(xiàn) RET 我用串口調(diào)試工具測(cè)試過(guò)拉,發(fā)送數(shù)據(jù)一切正常,但就是接受不到數(shù)據(jù)是什么原因啊?高人指點(diǎn)一下,十分感謝! |
| 2樓: | >>參與討論 |
| 作者: 2shift 于 2005/10/17 16:24:00 發(fā)布:
接收程序有錯(cuò)誤! 判斷到有起始位后,不應(yīng)該延時(shí)“DEL833”,應(yīng)該是DEL833+DEL833/2,以后的延時(shí)就是DEL833了,知道為什么把?模擬的接受程序接收位流時(shí),在每個(gè)位周期的中間點(diǎn)判斷比較好。 |
|
| 3樓: | >>參與討論 |
| 作者: 行星 于 2005/10/20 8:39:00 發(fā)布:
十分感謝樓上的指點(diǎn) 我試一下,看看,再次感謝。 |
|
| 4樓: | >>參與討論 |
| 作者: 行星 于 2005/10/20 8:56:00 發(fā)布:
2shift,我已經(jīng)修改過(guò)拉,但是不行 我已經(jīng)按照你的意思修改果拉,但是還是收不到數(shù)據(jù),為什么?能幫我在分析一下嗎? |
|
| 5樓: | >>參與討論 |
| 作者: 2shift 于 2005/10/20 9:16:00 發(fā)布:
仔細(xì)檢查你的起始位接受的對(duì)不對(duì)?還有邏輯 我告訴你的方法沒(méi)有問(wèn)題,我已經(jīng)做過(guò)n次了 |
|
| 6樓: | >>參與討論 |
| 作者: wujinlei 于 2005/10/20 9:22:00 發(fā)布:
有問(wèn)題 單片機(jī)發(fā)送/接收數(shù)據(jù),是用中斷標(biāo)志位TI和RI來(lái)判斷的,起始位和終止位是由單片機(jī)硬件在選擇了發(fā)送模式后自動(dòng)添加的,以上程序根本不會(huì)通信 |
|
| 7樓: | >>參與討論 |
| 作者: 2shift 于 2005/10/20 9:41:00 發(fā)布:
這是一個(gè)軟件模擬的串口通訊,不是硬件的 |
|
| 8樓: | >>參與討論 |
| 作者: 行星 于 2005/10/20 16:46:00 發(fā)布:
我試過(guò)在低波特率下通訊 我用2400 4800用單片機(jī)和單片機(jī)之間進(jìn)行收發(fā)測(cè)試,都可以成功,但一換位和 PC通訊,就只能發(fā)不能收啦?這是什么原因?能幫我解釋一下嗎? |
|
| 9樓: | >>參與討論 |
| 作者: coke 于 2005/10/20 17:56:00 發(fā)布:
用示波器看一下就知道了. 1.確定PC是否有數(shù)據(jù)送給MCU 2.端口是否上拉或其他設(shè)置. |
|
| 10樓: | >>參與討論 |
| 作者: 行星 于 2005/10/21 8:44:00 發(fā)布:
我已經(jīng)用示波器看過(guò) 示波器可以看到波形,但好像mcu抓不到。 |
|
| 11樓: | >>參與討論 |
| 作者: CXCHINA 于 2005/10/21 10:08:00 發(fā)布:
你這個(gè)程序要注意幾點(diǎn)! 你寫(xiě)的這個(gè)串口程序尤其應(yīng)注意以下幾點(diǎn): 1、接收的首個(gè)起始位應(yīng)加去抖動(dòng)干擾確認(rèn),還要注意是否和PC機(jī)約定的時(shí)間長(zhǎng)度一致。加幾個(gè) NOP,保證后面接收數(shù)據(jù)正好是時(shí)間的中間點(diǎn)上接收。 2、接收時(shí)一定得正確地捕獲起始位。因此軟件中要加保證楨同步的措施。 3、接收發(fā)送程序前,SETB RXD1,發(fā)送前 SETB TXD1 4、加一個(gè)校驗(yàn)字節(jié)。 5、接收退出條件判斷停止位時(shí)防止死循環(huán),增加或改為延時(shí)自動(dòng)退出。 * - 本貼最后修改時(shí)間:2005-10-21 10:18:22 修改者:CXCHINA |
|
| 12樓: | >>參與討論 |
| 作者: along_yu 于 2005/10/21 11:13:00 發(fā)布:
搞定沒(méi)有?匯編模擬串口真容易啊! |
|
| 13樓: | >>參與討論 |
| 作者: 行星 于 2005/10/21 16:10:00 發(fā)布:
讓樓上的見(jiàn)笑拉 十分感謝CXCHINA ,我再試一下,真是令人頭痛阿,技術(shù)不佳,讓大家見(jiàn)笑拉。 |
|
| 14樓: | >>參與討論 |
| 作者: wenbilin 于 2005/10/23 9:20:00 發(fā)布:
應(yīng)一步一步的查原因! |
|
| 15樓: | >>參與討論 |
| 作者: Torda 于 2005/10/23 18:36:00 發(fā)布:
好像延時(shí)有問(wèn)題 9600bps對(duì)應(yīng)的延時(shí)時(shí)間應(yīng)該是104us。你那個(gè)延時(shí)誤差好像比較大。 |
|
| 16樓: | >>參與討論 |
| 作者: 行星 于 2005/10/25 8:45:00 發(fā)布:
如果改為中斷方式,會(huì)不會(huì)對(duì)起始位的讀取好一點(diǎn)呢? |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |