RS-232是PC世界中最常見(jiàn)的串行接口。大多數(shù)RS-232接口以固定傳輸速率與接收器通信,例如9600波特。但是如果變送器以不同的傳輸速率運(yùn)行會(huì)發(fā)生什么?不同的傳輸速率要求接收器檢測(cè)速率并將軟件調(diào)整到新的通信速度。以下關(guān)于接收器如何檢測(cè)RS-232接口的傳輸速率的描述沒(méi)有描述接收和發(fā)送例程的實(shí)現(xiàn)。相反,它描述了一個(gè)由發(fā)射器和接收器組成的系統(tǒng)。發(fā)送器(例如,PC)將字符發(fā)送到接收器。接收器是一種低成本μC,可檢測(cè)傳輸速率并根據(jù)新速率調(diào)整其軟件。實(shí)現(xiàn)原理很簡(jiǎn)單。
發(fā)送器向接收器發(fā)送校準(zhǔn)值。接收器測(cè)量接收校準(zhǔn)值位的時(shí)間?;谠摐y(cè)量,接收器計(jì)算1比特的傳輸時(shí)間。該方法將此時(shí)間用于波特率發(fā)生器。訣竅是測(cè)量輸入比特流的時(shí)間并計(jì)算接收1比特的平均時(shí)間。自動(dòng)波特例程的這種實(shí)現(xiàn)假設(shè)接收器知道校準(zhǔn)值的比特序列并且接收器知道何時(shí)校準(zhǔn)。該技術(shù)使用PIC16C54BμC。 μC通過(guò)MAX232芯片連接到PC。 PC將校準(zhǔn)字符發(fā)送到μC。我們選擇ASCII值為“?”因?yàn)楸忍匦蛄小W詣?dòng)波特率例程測(cè)量接收比特流中的那些的時(shí)間,然后將時(shí)間除以6。結(jié)果是例程接收或發(fā)送1位所需的時(shí)間。
由于PIC16C54B沒(méi)有硬件USART,因此軟件程序會(huì)測(cè)量位序列的時(shí)序。清單1給出了autobaud例程的源代碼。校準(zhǔn)字符包含一個(gè)起始位,一個(gè)停止位和無(wú)奇偶校驗(yàn)位。對(duì)于時(shí)間測(cè)量,該技術(shù)使用16位計(jì)數(shù)器,該計(jì)數(shù)器提供一系列傳輸速度。在例程的第一部分,軟件初始化計(jì)數(shù)器和自動(dòng)波特率狀態(tài)寄存器AUTOB_STATUS。寄存器存儲(chǔ)有關(guān)自動(dòng)波特率例程的輸入信號(hào)是否太慢或太快的信息。您可以使用此信息檢查校準(zhǔn)過(guò)程是否成功。初始化之后,自動(dòng)波特率程序查找起始位,這是一個(gè)邏輯從一到零的轉(zhuǎn)換。檢測(cè)到起始位后,自動(dòng)波特率程序會(huì)查找反向轉(zhuǎn)換。檢測(cè)到此轉(zhuǎn)換后,例程開(kāi)始使用16位軟件計(jì)數(shù)器測(cè)量時(shí)間。軟件遞增16位計(jì)數(shù)器的低字節(jié),直到計(jì)數(shù)器溢出。
當(dāng)發(fā)生溢出時(shí),16位計(jì)數(shù)器的高字節(jié)遞增1。這個(gè)過(guò)程一直持續(xù)到從邏輯1變?yōu)榱慊蛴?jì)數(shù)器的高字節(jié)溢出為止。在任何一種情況下,例程都會(huì)在AUTOB_STATUS中設(shè)置一個(gè)標(biāo)志,以指示輸入信號(hào)是快還是慢。否則,軟件計(jì)算1位的傳輸時(shí)間。此時(shí)間會(huì)生成發(fā)送或接收例程的波特率。這些例程需要1比特的傳輸時(shí)間,以產(chǎn)生用于比特采樣的延遲或用于比特傳輸。軟件通過(guò)將測(cè)量時(shí)間除以校準(zhǔn)值中傳輸?shù)臄?shù)量來(lái)計(jì)算1位的傳輸時(shí)間。在校準(zhǔn)值“?”的情況下,有必要將測(cè)量時(shí)間除以6。除以6需要將16位計(jì)數(shù)器/寄存器向右移動(dòng)三次,同時(shí)從左側(cè)繪制零。除法后,程序?qū)⑽粫r(shí)間除以2,計(jì)算半位的傳輸。該時(shí)間圖在接收例程中用于將位采樣置于位的中間。除以2需要將16位計(jì)數(shù)器簡(jiǎn)單地移位到左側(cè)的一個(gè)位置。程序?qū)⒋瞬僮鞯慕Y(jié)果存儲(chǔ)在兩個(gè)寄存器中:AUTOHALF_LOW和AUTOHALF_HIGH。
程序完成此計(jì)算后,需要將1.5位的傳輸時(shí)間調(diào)整為軟件開(kāi)銷。該調(diào)整涉及減去執(zhí)行發(fā)送或接收例程所需的指令周期數(shù)。減法后,軟件會(huì)驗(yàn)證結(jié)果是否小于零。如果是這樣,輸入信號(hào)太快,并且例程在AUTOB_STATUS寄存器中設(shè)置錯(cuò)誤標(biāo)志。調(diào)整后,軟件通過(guò)驗(yàn)證16位計(jì)數(shù)器的值為零來(lái)驗(yàn)證輸入信號(hào)是否過(guò)快。如果輸入信號(hào)不是太快,則自動(dòng)波特率例程返回到操作系統(tǒng)。
-
接收器
+關(guān)注
關(guān)注
14文章
2454瀏覽量
71753 -
PCB打樣
+關(guān)注
關(guān)注
17文章
2968瀏覽量
21622 -
華強(qiáng)PCB
+關(guān)注
關(guān)注
8文章
1831瀏覽量
27698 -
華強(qiáng)pcb線路板打樣
+關(guān)注
關(guān)注
5文章
14629瀏覽量
42946
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論