|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教:單片機232通訊問題 |
| 作者:lxguang231 欄目:單片機 |
怎么單片機可以收到PC的數(shù)據(jù),但是就是PC收不到單片機的數(shù)據(jù),只是在單片機上電或者是重新打開串口時PC會收到“00”,莫名其妙的。請高手賜教。下邊是我的程序: ;*************************************************** RCV_RDY BIT 10H ;接收標志位 ;--------------------------------------------------- ORG 0000H AJMP START ORG 30H ;---------------主程序--------------------------------- START: CLR RCV_RDY INIT_SERIAL: mov SP,#5fh ;初始化串口, mov TMOD,#20h ;T1: 工作模式2 mov PCON,#00h ;SMOD=0 mov TH1,#0FDH ;初始化波特率 9600 MOV TL1,#0FDH mov SCON,#50h ; 方式1: 8 ,1 , N SETB REN ;允許接收 SETB TR1 ;T1開始工作 WAIT: JBC RCV_RDY,SEND ;若接收完畢標志位為1,則轉(zhuǎn)SEND JBC RI,RECEIVE ;RI為1則先清零RI,再轉(zhuǎn)RECEIVE AJMP WAIT ;若RI為0,繼續(xù)等待 ;===========串口子程序開始============================== RECEIVE:MOV A,SBUF ;接收數(shù)據(jù) MOV P1,A MOV R0,A SETB RCV_RDY AJMP WAIT SEND: MOV A,R0 ;發(fā)送數(shù)據(jù) MOV SBUF,A JNB TI,$ CLR TI AJMP WAIT ;============串口子程序結(jié)束=============================== END * - 本貼最后修改時間:2005-9-16 12:26:42 修改者:lxguang231 |
| 2樓: | >>參與討論 |
| 作者: zw820506 于 2005/9/16 15:54:00 發(fā)布:
我認為應該是MOV @R0,A 后面的是MOV A,@R0 |
|
| 3樓: | >>參與討論 |
| 作者: bighill 于 2005/9/16 16:09:00 發(fā)布:
沒什么問題啊 我覺得沒什么問題啊,怎么收不到? |
|
| 4樓: | >>參與討論 |
| 作者: z41992929 于 2005/9/16 16:24:00 發(fā)布:
程序沒問題! 考慮檢查哈電路,主要在發(fā)送那條路上。。。 |
|
| 5樓: | >>參與討論 |
| 作者: sdyxm21 于 2005/9/17 8:31:00 發(fā)布:
沒看出問題來 |
|
| 6樓: | >>參與討論 |
| 作者: diannaoza 于 2005/9/18 20:37:00 發(fā)布:
我看也沒問題 是不是你的硬件沒接對呀! |
|
| 7樓: | >>參與討論 |
| 作者: dengm 于 2005/9/19 7:43:00 發(fā)布:
應該為硬件問題 ;*************************************************** RCV_RDY BIT 10H ;接收標志位 ;--------------------------------------------------- ORG 0000H AJMP START ORG 30H ;---------------主程序--------------------------------- START: CLR RCV_RDY INIT_SERIAL: mov SP,#5fh ;初始化串口, mov TMOD,#20h ;T1: 工作模式2 mov PCON,#00h ;SMOD=0 mov TH1,#0FDH ;初始化波特率 9600 MOV TL1,#0FDH mov SCON,#50h ; 方式1: 8 ,1 , N SETB REN ;允許接收 SETB TR1 ;T1開始工作 SETB TI ; TX buffer empty ; ================================================== WAIT: JBC RCV_RDY,SEND ;若接收完畢標志位為1,則轉(zhuǎn)SEND JBC RI,RECEIVE ;RI為1則先清零RI,再轉(zhuǎn)RECEIVE AJMP WAIT ;若RI為0,繼續(xù)等待 ;===========串口子程序開始============================== RECEIVE:MOV A,SBUF ;接收數(shù)據(jù) MOV P1,A MOV R0,A SETB RCV_RDY AJMP WAIT SEND: JBC TI, SEND_2 SJMP SEND SEND_2: MOV A,R0 ;發(fā)送數(shù)據(jù) MOV SBUF,A AJMP WAIT ;============串口子程序結(jié)束=============================== END ;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4 ;NEW ;--------------------------------------------------- STACK EQU 60H ORG 0000H AJMP START ORG 30H ;---------------主程序--------------------------------- START: CLR RCV_RDY INIT_SERIAL: mov SP,#(STACK-1) ;初始化串口, mov TMOD,#20h ;T1: 工作模式2 mov PCON,#00h ;SMOD=0 mov TH1,#0FDH ;初始化波特率 9600 MOV TL1,#0FDH mov SCON,#50h ; 方式1: 8 ,1 , N SETB REN ;允許接收 SETB TR1 ;T1開始工作 ; ================================================== WAIT: JBC RI,RECEIVE ;RI為1則先清零RI,再轉(zhuǎn)RECEIVE SJMP WAIT ;若RI為0,繼續(xù)等待 ;===========串口子程序開始============================== RECEIVE: PUSH SBUF ;接收數(shù)據(jù) MOV P1, STACK ; DISPLAY RXed DATA AT PINS OF P1 POP SBUF ;發(fā)送數(shù)據(jù) SJMP WAIT ;LOOP ;============串口子程序結(jié)束=============================== END |
|
| 8樓: | >>參與討論 |
| 作者: lxguang231 于 2005/9/23 11:00:00 發(fā)布:
問題找到啦 非常感謝各位,問題找出來了,是MAX232芯片壞了,換了一塊一切OK啦, |
|
| 9樓: | >>參與討論 |
| 作者: 孔令勝 于 2005/9/23 11:40:00 發(fā)布:
請問:AT28C256空片子能編進去M27256內(nèi)部的程區(qū)嗎?怎么編? |
|
| 10樓: | >>參與討論 |
| 作者: 阿西西里 于 2005/9/23 14:40:00 發(fā)布:
M27256? |
|
| 11樓: | >>參與討論 |
| 作者: 南方的老樹 于 2005/9/25 22:19:00 發(fā)布:
應該在串口上掛2個燈,馬上就能定位故障! |
|
| 12樓: | >>參與討論 |
| 作者: 西安周公 于 2005/9/25 23:02:00 發(fā)布:
AT28C256空片子能編進去M27256內(nèi)部的程序 |
|
| 13樓: | >>參與討論 |
| 作者: foxqiu 于 2005/9/26 10:06:00 發(fā)布:
南方的老樹: 請問,怎么掛led燈?串接還是下拉led? |
|
| 14樓: | >>參與討論 |
| 作者: 南方的老樹 于 2005/9/26 10:31:00 發(fā)布:
在TTL電平上是串接1K的電阻,上拉到VCC; 如果是RS232口線上,是串聯(lián)一個LED下拉到地。 因為TTL電平,0是0V電平; RS232電平,0是+9V電平;1是-9V; |
|
| 15樓: | >>參與討論 |
| 作者: xiaoyu9632 于 2005/9/26 19:15:00 發(fā)布:
暈倒! 這個程序真的能執(zhí)行成功嗎?連串口中斷都沒有打開。問題實在太多 |
|
| 16樓: | >>參與討論 |
| 作者: foxfox 于 2005/9/26 21:12:00 發(fā)布:
xiaoyu9632,你說為什么要打開串口中斷? |
|
| 17樓: | >>參與討論 |
| 作者: lxguang231 于 2005/9/27 9:45:00 發(fā)布:
沒中斷可以查詢啊,, |
|
| 18樓: | >>參與討論 |
| 作者: 南方的老樹 于 2005/9/30 3:59:00 發(fā)布:
不使用中斷問題很多,除非你就干串口這一件事情 可是問題也很多。 要知道,串口有誤碼,丟失數(shù)據(jù),那么,難道您就在那里癡情等待?不見不散?啥也不做了? 常規(guī)的做法是,串口進入中斷子程序,收取一個數(shù)據(jù),放到數(shù)據(jù)緩沖區(qū)中,然后退出中斷,在主流程中根據(jù)協(xié)議分析數(shù)據(jù)。 這樣CPU的資源占用的最少,您還可以干點別的事情。 |
|
| 19樓: | >>參與討論 |
| 作者: javie 于 2005/9/30 9:15:00 發(fā)布:
又學了一招 我是說接LED的 但是后面說的串口中斷什么的,我覺得說的并不好 |
|
| 20樓: | >>參與討論 |
| 作者: sdyxm21 于 2005/9/30 9:58:00 發(fā)布:
接個LED比較好 這個方法不錯! |
|
| 21樓: | >>參與討論 |
| 作者: lxguang231 于 2005/9/30 16:56:00 發(fā)布:
南方的老樹說的沒錯。 老樹說的沒錯,我現(xiàn)在也感覺到程序問題多多, 本來寫的程序是要按照一定的協(xié)議(自己定的)收到一組數(shù)據(jù):有3字節(jié)命令字,一個奇偶校驗位,一個波特率位,一個數(shù)據(jù)長度位,幾個數(shù)據(jù)。根據(jù)奇偶校驗位和波特率位自動設(shè)置波特率,結(jié)果總是莫名其妙的接收數(shù)據(jù)錯誤。我改了幾次程序都步行,郁悶中…… 唉,看來還是改成中斷方式的好些,(第一次寫程序,)以后還要向大俠們多多請教。 對啦,老樹說的接LED我還不怎么明白,是不是接上后發(fā)送和接收數(shù)據(jù)時就會有顯示?? |
|
| 22樓: | >>參與討論 |
| 作者: 南方的老樹 于 2005/10/1 2:10:00 發(fā)布:
做電路板,小批量的都要接LEd作為開關(guān)量和串口的指示 便于定位程序流程和故障情況。 做數(shù)字電路,不需要示波器。就是靠LEd來觀察流程和硬件的輸入輸出。提高調(diào)試的效率。 當然會有顯示。LED嘛,有電流就會亮,通常讓它工作在5mA比較理想。 對于TTL電平,發(fā)光二極管LED上拉1K的電阻到VCC;電流大概在4mA; 對于232電平,發(fā)光二極管LED下拉3K的電阻到gnd;電流大概在3mA;不想把RS232的電平拉下來太多,但是又想直觀地看到RS232的數(shù)據(jù)的收發(fā)情況; 為什么TTL電平上拉電阻,而RS232電平卻是下拉電阻,你想想RS232電平就知道了。 如果是成熟產(chǎn)品,不欲讓人看到程序流程和降低成本和空間,一般就不再使用LED指示了。 開發(fā)階段使用LED尤其重要。 * - 本貼最后修改時間:2005-10-1 2:59:25 修改者:南方的老樹 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |