|
|||||||||||
| 技術(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 |
請(qǐng)大俠指點(diǎn)一下兄弟,我這個(gè)串口程序?yàn)槭裁村e(cuò)誤? |
| 作者:lidongcumt 欄目:單片機(jī) |
ORG 0000H SJMP MAIN ORG 0003H SJMP INT0 ORG 0023H SJMP TXSVE ORG 0050H MAIN:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6H MOV PCON,#80H SETB TR1 MOV SCON,#40H SETB EA SETB EX0 MOV R0,#00H WAIT:SJMP $ INT0:SETB ES RETI TXSVE:CLR ES CLR TI MOV A,R0 MOV P1,A MOV C,PSW.0 CPL C MOV ACC.7,C MOV SBUF,A INC R0 RETI END 這是一個(gè)串口異步方式1下的發(fā)送程序,單片機(jī)頻率12M,波特率2400,奇校驗(yàn).我是希望按一下外部中斷0按鍵發(fā)送一次數(shù)據(jù),數(shù)據(jù)依次加一,同時(shí)送P1口二極管顯示.但是我這個(gè)程序不能工作,連二極管也不亮.為什么??請(qǐng)大家指點(diǎn)一下. |
| 2樓: | >>參與討論 |
| 作者: Ellensky 于 2006/4/8 14:30:00 發(fā)布:
T1的初值不對(duì)吧 12M的頻率,2400的波特率。T1的初值應(yīng)該是F3H |
|
| 3樓: | >>參與討論 |
| 作者: lidongcumt 于 2006/4/8 14:33:00 發(fā)布:
補(bǔ)充一點(diǎn) 補(bǔ)充一點(diǎn),我是用這個(gè)程序和電腦通信,電腦上用的是通信測(cè)試軟件. |
|
| 4樓: | >>參與討論 |
| 作者: Ellensky 于 2006/4/8 14:33:00 發(fā)布:
T1 |
|
| 5樓: | >>參與討論 |
| 作者: lidongcumt 于 2006/4/8 14:35:00 發(fā)布:
Ellensky Ellensky T1的初值應(yīng)該是F3H? 你怎么算出來(lái)的? |
|
| 6樓: | >>參與討論 |
| 作者: Ellensky 于 2006/4/8 14:37:00 發(fā)布:
不好意思,對(duì)的,我沒(méi)注意你的SMOD=1 |
|
| 7樓: | >>參與討論 |
| 作者: Ellensky 于 2006/4/8 14:45:00 發(fā)布:
把頻率改為11.0592試試 |
|
| 8樓: | >>參與討論 |
| 作者: lidongcumt 于 2006/4/8 15:07:00 發(fā)布:
Ellensky 這個(gè)沒(méi)法改 |
|
| 9樓: | >>參與討論 |
| 作者: wo21 于 2006/4/8 15:27:00 發(fā)布:
程序錯(cuò)誤,根本就進(jìn)不了串口中斷。。。。 你只是在INT0中打開(kāi)串口,然后就回主程序執(zhí)行,在主程序中又沒(méi)有發(fā)送數(shù)據(jù),所以根本就進(jìn)不了串口中斷。 |
|
| 10樓: | >>參與討論 |
| 作者: wo21 于 2006/4/8 15:29:00 發(fā)布:
不信的話你可以單步執(zhí)行看是否能進(jìn)串口中斷。。。 |
|
| 11樓: | >>參與討論 |
| 作者: lidongcumt 于 2006/4/8 15:41:00 發(fā)布:
這樣可以嗎? ORG 0000H SJMP MAIN ORG 0003H SJMP INT0 ORG 0023H SJMP TXSVE ORG 0050H MAIN:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6H MOV PCON,#80H SETB TR1 MOV SCON,#40H SETB EA SETB EX0 MOV R0,#00H MOV A,R0 MOV SBUF,A WAIT:SJMP $ INT0:SETB ES RETI TXSVE:CLR ES CLR TI INC R0 MOV A,R0 CPL A MOV P1,A MOV C,PSW.0 CPL C MOV ACC.7,C MOV SBUF,A RETI END |
|
| 12樓: | >>參與討論 |
| 作者: lidongcumt 于 2006/4/8 15:43:00 發(fā)布:
謝謝!!!你說(shuō)的對(duì),現(xiàn)在能進(jìn)入串口中斷了. 但通信還是不行 是單片機(jī)程序問(wèn)題,還是上位機(jī)問(wèn)題 |
|
| 13樓: | >>參與討論 |
| 作者: wo21 于 2006/4/8 15:50:00 發(fā)布:
這樣不行! 好好設(shè)計(jì)一下程序流程,你這樣只能進(jìn)一次串口中斷。。。。 |
|
| 14樓: | >>參與討論 |
| 作者: lidongcumt 于 2006/4/8 16:04:00 發(fā)布:
wo21 wo21 你看應(yīng)該怎么改? 我不明白為什么要先發(fā)送一個(gè)數(shù)據(jù)才能進(jìn)入中斷? 初始化時(shí)TI不是等于1嗎??? |
|
| 15樓: | >>參與討論 |
| 作者: 電子老鷹 于 2006/4/8 16:56:00 發(fā)布:
不發(fā)送數(shù)據(jù),怎么會(huì)有中斷標(biāo)志? TI是硬件置位,你自己不可能做到.上電復(fù)位是0. 你的情況,應(yīng)該在按鍵中斷里完成發(fā)送工作.用查詢方式判斷是否發(fā)完. 你現(xiàn)在的情況,在按鍵中斷里開(kāi)串口中斷,好象要牽涉到優(yōu)先級(jí)問(wèn)題.具體自己琢磨吧. 至于上位機(jī)收不到數(shù)據(jù),沒(méi)仔細(xì)看你程序,但感覺(jué)波特率應(yīng)該先查下.誤差好象不要大于5%. 否則,應(yīng)將初值改為F3,SMOD=0. 另外上位軟件參數(shù)要設(shè)置正確. |
|
| 16樓: | >>參與討論 |
| 作者: wo21 于 2006/4/8 17:08:00 發(fā)布:
改! 兩種辦法,不必用串口中斷即可。 1.在INT0中發(fā)送串口數(shù)據(jù),就不用串口中斷了。 ORG 0000H SJMP MAIN ORG 0003H SJMP INT0 ORG 0050H MAIN:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6H MOV PCON,#80H SETB TR1 MOV SCON,#40H MOV R0,#00H SETB EA SETB EX0 WAIT:SJMP $ INT0:MOV A,R0 MOV P1,A MOV C,PSW.0 CPL C MOV ACC.7,C MOV SBUF,A JNB TI,$ CLR TI RETI END 2.在主程序中設(shè)一標(biāo)志位,40H,初始化為0。判斷40H,若為1則發(fā)送數(shù)據(jù),0則等待。 ORG 0000H SJMP MAIN ORG 0003H SJMP INT0 ORG 0050H MAIN:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6H MOV PCON,#80H SETB TR1 MOV SCON,#40H SETB EA SETB EX0 SETB ES MOV R0,#00H MOV 40H,#00H WAIT:MOV A,40H CJNE A,#1,WAIT MOV A,R0 MOV P1,A MOV C,PSW.0 CPL C MOV ACC.7,C MOV SBUF,A JNB TI,$ CLR TI MOV 40H,#00H AJMP WAIT INT0:MOV 40H,#1 RETI END |
|
| 17樓: | >>參與討論 |
| 作者: lidongcumt 于 2006/4/10 8:34:00 發(fā)布:
還是有問(wèn)題啊 通信還是不行啊 |
|
| 18樓: | >>參與討論 |
| 作者: wo21 于 2006/4/10 9:04:00 發(fā)布:
琢磨琢磨! 兄弟,還是你自己弄吧。先單步在電腦上調(diào)試好了,再寫(xiě)入片子,我?guī)筒涣四懔耍?br> |
|
| 19樓: | >>參與討論 |
| 作者: lidongcumt 于 2006/4/10 9:14:00 發(fā)布:
謝謝!!! |
|
| 20樓: | >>參與討論 |
| 作者: lidongcumt 于 2006/4/10 16:35:00 發(fā)布:
想了一天了,還是不行 ORG 0000H SJMP MAIN ORG 0003H SJMP INT0 ORG 0050H MAIN:MOV TMOD,#20H MOV TL1,#0F3H MOV TH1,#0F3H MOV PCON,#00H SETB TR1 MOV SCON,#40H MOV R0,#00H SETB EA SETB EX0 WAIT:SJMP $ INT0:MOV A,R0 CPL A MOV P1,A MOV A,R0 ; MOV C,PSW.0 ; CPL C ;MOV ACC.7,C MOV SBUF,A JNB TI,$ CLR TI INC R0 RETI END 上位機(jī)用的調(diào)試軟件是 串口調(diào)試助手V2.2 我把上位機(jī)的TXD\RXD相連,讓上位機(jī)自己收發(fā)沒(méi)問(wèn)題;單片機(jī)的TXD\RXD也有電壓波動(dòng),應(yīng)該也有輸出.但為什么不能通信??? 沒(méi)辦法還需要高手指點(diǎn). 我想了幾天了 |
|
| 21樓: | >>參與討論 |
| 作者: 電子老鷹 于 2006/4/10 20:31:00 發(fā)布:
看你挺可憐的. 怎么搞這么長(zhǎng)時(shí)間. 我簡(jiǎn)單看了你的程序,串口部分的設(shè)置和運(yùn)行沒(méi)什么問(wèn)題. 把與串口無(wú)關(guān)的東西屏蔽掉,直接在主程序里發(fā)送數(shù)據(jù),看成功否. 若還不成功,可能是硬件問(wèn)題.檢查232電路,細(xì)節(jié)也不放過(guò),不要想當(dāng)然. 另外上位機(jī)設(shè)置應(yīng)該是"波特率2400,8位數(shù)據(jù),無(wú)奇偶校驗(yàn)".上位機(jī)能自己收發(fā)說(shuō)明不了你的問(wèn)題,只能說(shuō)上位機(jī)本身是好的. 哦還有COM口別插錯(cuò)或選錯(cuò). 也就這么些東西了.感覺(jué)你好象某個(gè)細(xì)節(jié)沒(méi)弄清楚. * - 本貼最后修改時(shí)間:2006-4-10 20:32:26 修改者:電子老鷹 |
|
|
|
| 免費(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) |