|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
又鉆牛角尖了!高手請進(jìn)! |
| 作者:tc9148 欄目:單片機(jī) |
查了很多書,都沒有找到51的定時器0/1與uart部分的硬件連接的詳細(xì)原理圖,都是用幾句話簡單介紹。 高手貼個圖!謝謝! |
| 2樓: | >>參與討論 |
| 作者: tc9148 于 2005/12/19 23:25:00 發(fā)布:
自己頂一下!^-^! 就是定時器和串口的連接的原理結(jié)構(gòu)圖!雖然程序我明白! 但是我不明白定時器的中斷信號如何控制串口,書上好像沒有找到? |
|
| 3樓: | >>參與討論 |
| 作者: martial 于 2005/12/20 8:26:00 發(fā)布:
定時器是為通訊產(chǎn)生波特率用的,不是硬件連接的 |
|
| 4樓: | >>參與討論 |
| 作者: tc9148 于 2005/12/20 21:53:00 發(fā)布:
能否詳細(xì)說說。! |
|
| 5樓: | >>參與討論 |
| 作者: martial 于 2005/12/20 23:19:00 發(fā)布:
串口通訊最簡單的是3線制 就是接收rxd,發(fā)送端txd,公共地GND三線從單片機(jī)上連出來與外部電平轉(zhuǎn)換芯片或其它單片機(jī)相連。定時器是在單片機(jī)內(nèi)部的,直接用就是了。查查單片機(jī)方面的書,基本上都有呀 |
|
| 6樓: | >>參與討論 |
| 作者: MEIBOY 于 2005/12/20 23:28:00 發(fā)布:
的確再鉆!不過有個性。 定時器為串口產(chǎn)生波特率的,51中是用的t1。也就是說如果用了t1做波特率發(fā)生器,同時就不能做t1定時器了。你仔細(xì)看看波特率計算公式中的16,這個16時候含義的,意思是16個t1脈沖為uart一個位長。硬件的連接一般的書上沒有,你可以仔細(xì)看datasheet,或者找51的公開core看看,不過那就費勁了! |
|
| 7樓: | >>參與討論 |
| 作者: tc9148 于 2005/12/21 13:09:00 發(fā)布:
to:樓上的 謝謝你了。 還是你理解我的意思了!datasheet我看了,但是沒有,我才在這里想搞明白的。 我看了作為波特率發(fā)生器時t1的初始化程序,但是與一般的定時作用的初始化不同,少了setb ea和setb et1。 是不是可以這樣理解:關(guān)閉ea和et1,只開et1,單片機(jī)就自動認(rèn)為是作為波特率發(fā)生器呢?還有這個中間的t1中斷是如何影響串口的呢!溢出標(biāo)志TF1不會沒有用吧(我見過的串口通信程序里沒有判斷語句)!不可能定時器t1一直在工作,串口一直在發(fā)送數(shù)據(jù),這之間總的有個類似的握手時序圖吧! 程序我也編過不少,但是覺得不高明白這個問題,心里不舒服呀。 |
|
| 8樓: | >>參與討論 |
| 作者: stoneymumu 于 2005/12/21 13:23:00 發(fā)布:
t1作為串口移位時鐘用 t1定時后出的波形,通過分頻,作為串口的數(shù)據(jù)移位時鐘。 以前做過串口通信的,挺早,記不大清了。 好像 給t1寄存器服值后,開啟t1,再寫串口控制字,使t1作為移位時鐘用,這樣t1就不會產(chǎn)生中斷了,只作為時鐘存在。 這是tf1就沒用了,具體的串口通信中,mcu內(nèi)部已經(jīng)有一點協(xié)議了,就是怎么移出數(shù)、接受數(shù)、判斷發(fā)送或接收完,你可以通過控制字改變這些。 實際應(yīng)用中,自己得寫點協(xié)議,弄個楨、包頭什么的,安全點 |
|
| 9樓: | >>參與討論 |
| 作者: foxqiu 于 2005/12/21 18:54:00 發(fā)布:
內(nèi)部應(yīng)該有握手的。 |
|
| 10樓: | >>參與討論 |
| 作者: tc9148 于 2005/12/21 20:20:00 發(fā)布:
to:stoneymumu 難道是因為遇到了 mov a, sbuf這個語句,他就轉(zhuǎn)到為串口服務(wù)了? 我想弄明白的是:到底t1是見到那個語句或者標(biāo)志,就為串口服務(wù)了呢? 好想許多程序都沒有用到定時器的工作方式3呀!。。。 t0據(jù)說也可以的! 不好意思!鉆的很厲害^-^! 睡覺都失眠了。。。! |
|
| 11樓: | >>參與討論 |
| 作者: computer00 于 2005/12/21 20:43:00 發(fā)布:
這個由硬件控制很容易的,建議好好學(xué)學(xué)數(shù)字電路^_^ |
|
| 12樓: | >>參與討論 |
| 作者: tc9148 于 2005/12/21 21:04:00 發(fā)布:
to:computer00 不要灌水! |
|
| 13樓: | >>參與討論 |
| 作者: computer00 于 2005/12/21 21:33:00 發(fā)布:
我沒灌水啊, T1一直都在為串口服務(wù)啊,它的溢出負(fù)責(zé)采樣串口的接收;如果有數(shù)據(jù)發(fā)送時,負(fù)責(zé)將數(shù)據(jù)按設(shè)定的時間間隔發(fā)出去。就這么回事。 |
|
| 14樓: | >>參與討論 |
| 作者: maychang 于 2005/12/21 21:52:00 發(fā)布:
Re 樓主 T1作波特率發(fā)生器時,仍可以作定時器用,仍可以產(chǎn)生定時中斷,這些與波特率發(fā)生器功能無關(guān)。當(dāng)然,波特率已確定,定時中斷產(chǎn)生的時間間隔也就完全確定了,而且很快(間隔時間很短)用起來非常不方便,只能設(shè)置一個軟計數(shù)器,每次定時中斷發(fā)生時這個軟計數(shù)器加一,根據(jù)軟計數(shù)器計數(shù)值確定時間,這樣來使用。 T1作波特率發(fā)生器時,實際上每次溢出都檢查一次RXD電平。這也與定時和中斷無關(guān)。 硬件聯(lián)接圖記得在datasheet中有,我找找看。 |
|
| 15樓: | >>參與討論 |
| 作者: tc9148 于 2005/12/21 22:12:00 發(fā)布:
to:maychang 我在ATMEL公司的網(wǎng)站上也下載了很多資料,不過沒有找到~~~~ |
|
| 16樓: | >>參與討論 |
| 作者: maychang 于 2005/12/21 22:21:00 發(fā)布:
沒找到也別失眠 ATMEL公司生產(chǎn)單片機(jī)是后來的事,最早生產(chǎn)51單片機(jī)的是INTEL。 我恍惚記得是INTEL公司的datasheet。 |
|
| 17樓: | >>參與討論 |
| 作者: maychang 于 2005/12/21 22:24:00 發(fā)布:
上面說的T1作波特率發(fā)生器同時產(chǎn)生中斷 我用過一次,不過也就是一次。 |
|
| 18樓: | >>參與討論 |
| 作者: 李冬發(fā) 于 2005/12/21 22:35:00 發(fā)布:
八幾年的書,這些都很清楚,找找看 |
|
| 19樓: | >>參與討論 |
| 作者: tc9148 于 2005/12/21 23:48:00 發(fā)布:
to:maychang 去INTEL的網(wǎng)站上逛了逛 找到了~~~~ 里面提到了, 1.t1(只能是t1)要工作必須要關(guān)閉中斷使能。--這說明不能在用來定時了~,只能安安心心的給串口服務(wù)了。哈哈! 2.16分頻接發(fā)送時鐘端。 謝謝maychang 還是你“高”。! ^-^! |
|
| 20樓: | >>參與討論 |
| 作者: maychang 于 2005/12/22 2:02:00 發(fā)布:
何必如此? 人非圣賢,孰能無過? 要是我說錯了,改正就是。 何況我并沒有說錯? 下面是段小程序,使用T1作波特率發(fā)生器,同時使用定時中斷。匯編一下,寫到片子里,立見分曉。這里用的是89C2051,當(dāng)然51或52也可以運行。 ;************************************************************** ; TESTCOMM 測試串口及定時中斷 ; Dec. 22 2005 開始 使用89C2051,時鐘11.0592MHZ ; 版本號 1.0 波特率1200 ;測試 ;************************************************************** ; 系統(tǒng)要求 ;檢查定時器1在作為波特率發(fā)生器時,能否產(chǎn)生中斷 ;************************************************************** ;************************************************************** ;通訊格式: ;上位機(jī)發(fā) 02H 33H 03H ;本機(jī)接收到03H后,發(fā)送1個字符"U" ;************************************************************** ;************************************************************** ;波特率1200,8位重裝模式,TH1初值E8H,故26.041666us發(fā)生一次中斷, ;38400次為1秒,65536次為1.70666秒. ;本機(jī)在一條口線上接一個發(fā)光管,利用此發(fā)光管指示1秒定時 ;使用DPTR作為二字節(jié)定時中斷次數(shù)軟計數(shù)器 ;************************************************************** ;************************************************************** ; 資源分配 ;外中斷0 ;外中斷1 ;定時/計數(shù)器0 ;定時/計數(shù)器1 ;串口 ;P1口 ;P3口 ;*******片內(nèi)RAM地址分配**************************************** ; Address Attribute Table STACK EQU 68H ;68-7FH為堆棧區(qū)(24字節(jié)),SP初始化為67H LED BIT P1.0 ;發(fā)光管 FD BIT P3.2 ;喂狗 ;******外設(shè)地址分配******************************************** ;************************************************************** ;******* 中斷程序表 ******************************************* ;INTR0 外部0中斷,本機(jī)未用 ;TMR0 定時器0中斷,本機(jī)未用 ;INTR1 外部1中斷,本機(jī)未用 ;TMR1 定時器1用于串口波特率 ;SERL 串行口中斷,用于通訊 ;******* 子程序表 ********************************************* ;************************************************************** ;************************************************************** ORG 0000H ;Entrance of initial 初始化入口 AJMP START ORG 0003H ;Entrance of INT0 外中斷0入口 AJMP INTR0 ORG 000BH ;Entrance of TMR0 定時器0中斷入口 AJMP TMR0 ORG 0013H ;Entrance of INT1 外中斷1入口 AJMP INTR1 ORG 001BH ;Entrance of TMR1 定時器1中斷入口 AJMP TMR1 ORG 0023H ;Entrance of SERL PORT 串行中斷入口 AJMP SERL ;************************************************************** ;************************************************************** ;版本標(biāo)志 ORG 0060H DB 'TESTCOMM V1.0' ORG 0070H DB 'Dec. 22 2005' ;******* 初始化 *********************************************** ORG 0080H ;Main programme 主程序 START: MOV SP,#STACK-1 ;Initial SP 初始化棧針 MOV TH1,#0E8H ;定時器1賦初值(11.0592MHZ,波特率1200) MOV TL1,#0E8H CLR A MOV DPL,A MOV DPH,A MOV SCON,#01110000B ;設(shè)置串口工作方式,8位UART,允許接收 MOV TMOD,#00100001B ;定時器0為16位,計數(shù)機(jī)器周期,無門控. ;定時器1自動重裝,計數(shù)機(jī)器周期,波特率發(fā)生器. MOV TCON,#01010101B ;開定時器0和1,外中斷為沿觸發(fā). MOV IP, #00001000B ;定時器1中斷高優(yōu)先級. MOV IE, #10011000B ;允許串口中斷和定時器1中斷.開總中斷 ;*********************************************** IDLE: SETB FD ;喂狗 MOV TMOD,#00100001B ;重復(fù)設(shè)置 MOV IP, #00001000B MOV IE, #10011000B MOV TH1, #0E8H ;11.0592MHZ,波特率1200 ORL TCON,#01010101B ;TCON不得簡單重寫入!!!! ORL SCON,#01110000B ;重設(shè)置串口,8位UART,允許接收 ANL SCON,#01110011B ;SCON不得簡單重寫入!!!! CLR FD NOP NOP NOP NOP NOP NOP AJMP IDLE ;************************************************************** ;************************************************************** ;中斷例程 ;************************************************************** ;************************************************************** ;外部0中斷,本機(jī)未用 INTR0: RETI ;************************************************************** ;定時器0中斷,本機(jī)未用 TMR0: RETI ;************************************************************** ;外部1中斷,本機(jī)未用 INTR1: &nb |
|
| 21樓: | >>參與討論 |
| 作者: kyflash 于 2005/12/22 4:29:00 發(fā)布:
AVR的串口就不占用定時器,呵呵 |
|
| 22樓: | >>參與討論 |
| 作者: dodome521 于 2005/12/22 8:33:00 發(fā)布:
PIC的也不占用呢,現(xiàn)在好多片子都有獨立的波特率 發(fā)生器 |
|
| 23樓: | >>參與討論 |
| 作者: tc9148 于 2005/12/22 12:42:00 發(fā)布:
to:maychang 看了你寫的程序, 我知道我的差距有多大了~~ 再次感謝~~ |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |