聯(lián)系電話
- 聯(lián)系人:
- 方園
- 電話:
- 021-51089719
- 手機(jī):
- 13524819926
- 傳真:
- 021-51089719 企業(yè)QQ:690531563
- 地址:
- 上海市普陀區(qū)大渡河路1142弄1號樓
- 個(gè)性化:
- www.inde-electrical.com
- 網(wǎng)址:
- www.inde-electrical.com
掃一掃訪問手機(jī)商鋪
RS-232是PC世界中zui常見的串行接口,。大多數(shù)RS-232接口以固定傳輸速率與接收器通信,例如9600波特,。但是如果變送器以不同的傳輸速率運(yùn)行會(huì)發(fā)生什么,?不同的傳輸速率要求接收器檢測速率并將軟件調(diào)整到新的通信速度。以下關(guān)于接收器如何檢測RS-232接口的傳輸速率的描述沒有描述接收和發(fā)送例程的實(shí)現(xiàn),。相反,,它描述了一個(gè)由發(fā)射器和接收器組成的系統(tǒng)。發(fā)送器(例如,PC)將字符發(fā)送到接收器,。接收器是一種低成本μC,,可檢測傳輸速率并根據(jù)新速率調(diào)整其軟件。實(shí)現(xiàn)原理很簡單,。
發(fā)送器向接收器發(fā)送校準(zhǔn)值,。接收器測量接收校準(zhǔn)值位的時(shí)間?;谠摐y量,,接收器計(jì)算1比特的傳輸時(shí)間。該方法將此時(shí)間用于波特率發(fā)生器,。訣竅是測量輸入比特流的時(shí)間并計(jì)算接收1比特的平均時(shí)間,。自動(dòng)波特例程的這種實(shí)現(xiàn)假設(shè)接收器知道校準(zhǔn)值的比特序列并且接收器知道何時(shí)校準(zhǔn)。該技術(shù)使用PIC16C54BμC,。 μC通過MAX232芯片連接到PC,。 PC將校準(zhǔn)字符發(fā)送到μC,。我們選擇ASCII值為“,?”因?yàn)楸忍匦蛄?。自?dòng)波特率例程測量接收比特流中的那些的時(shí)間,然后將時(shí)間除以6,。結(jié)果是例程接收或發(fā)送1位所需的時(shí)間,。
由于PIC16C54B沒有硬件USART,,因此軟件程序會(huì)測量位序列的時(shí)序。清單1給出了autobaud例程的源代碼,。校準(zhǔn)字符包含一個(gè)起始位,一個(gè)停止位和無奇偶校驗(yàn)位,。對于時(shí)間測量,,該技術(shù)使用16位計(jì)數(shù)器,該計(jì)數(shù)器提供一系列傳輸速度,。在例程的第壹部分,,軟件初始化計(jì)數(shù)器和自動(dòng)波特率狀態(tài)寄存器AUTOB_STATUS。寄存器存儲(chǔ)有關(guān)自動(dòng)波特率例程的輸入信號是否太慢或太快的信息,。您可以使用此信息檢查校準(zhǔn)過程是否成功,。初始化之后,自動(dòng)波特率程序查找起始位,這是一個(gè)邏輯從一到零的轉(zhuǎn)換,。檢測到起始位后,,自動(dòng)波特率程序會(huì)查找反向轉(zhuǎn)換。檢測到此轉(zhuǎn)換后,,例程開始使用16位軟件計(jì)數(shù)器測量時(shí)間,。軟件遞增16位計(jì)數(shù)器的低字節(jié),直到計(jì)數(shù)器溢出,。
當(dāng)發(fā)生溢出時(shí),16位計(jì)數(shù)器的高字節(jié)遞增1,。這個(gè)過程一直持續(xù)到從邏輯1變?yōu)榱慊蛴?jì)數(shù)器的高字節(jié)溢出為止,。在任何一種情況下,例程都會(huì)在AUTOB_STATUS中設(shè)置一個(gè)標(biāo)志,,以指示輸入信號是快還是慢,。否則,軟件計(jì)算1位的傳輸時(shí)間,。此時(shí)間會(huì)生成發(fā)送或接收例程的波特率,。這些例程需要1比特的傳輸時(shí)間,以產(chǎn)生用于比特采樣的延遲或用于比特傳輸,。軟件通過將測量時(shí)間除以校準(zhǔn)值中傳輸?shù)臄?shù)量來計(jì)算1位的傳輸時(shí)間,。在校準(zhǔn)值“?”的情況下,,有必要將測量時(shí)間除以6,。除以6需要將16位計(jì)數(shù)器/寄存器向右移動(dòng)三次,同時(shí)從左側(cè)繪制零,。除法后,,程序?qū)⑽粫r(shí)間除以2,計(jì)算半位的傳輸,。該時(shí)間圖在接收例程中用于將位采樣置于位的中間,。除以2需要將16位計(jì)數(shù)器簡單地移位到左側(cè)的一個(gè)位置。程序?qū)⒋瞬僮鞯慕Y(jié)果存儲(chǔ)在兩個(gè)寄存器中:AUTOHALF_LOW和AUTOHALF_HIGH,。
程序完成此計(jì)算后,,需要將1.5位的傳輸時(shí)間調(diào)整為軟件開銷。該調(diào)整涉及減去執(zhí)行發(fā)送或接收例程所需的指令周期數(shù),。減法后,,軟件會(huì)驗(yàn)證結(jié)果是否小于零。如果是這樣,,輸入信號太快,,并且例程在AUTOB_STATUS寄存器中設(shè)置錯(cuò)誤標(biāo)志,。調(diào)整后,軟件通過驗(yàn)證16位計(jì)數(shù)器的值為零來驗(yàn)證輸入信號是否過快,。如果輸入信號不是太快,,則自動(dòng)波特率例程返回到操作系統(tǒng)。
(來源:網(wǎng)絡(luò),,版權(quán)歸原作者)