RS-232是PC世界中最常見的串行接口。大多數RS-232接口以固定傳輸速率與接收器通信,例如9600波特。但是如果變送器以不同的傳輸速率運行會發生什么?不同的傳輸速率要求接收器檢測速率并將軟件調整到新的通信速度。以下關于接收器如何檢測RS-232接口的傳輸速率的描述沒有描述接收和發送例程的實現。相反,它描述了一個由發射器和接收器組成的系統。發送器(例如,PC)將字符發送到接收器。接收器是一種低成本μC,可檢測傳輸速率并根據新速率調整其軟件。實現原理很簡單。
發送器向接收器發送校準值。接收器測量接收校準值位的時間。基于該測量,接收器計算1比特的傳輸時間。該方法將此時間用于波特率發生器。訣竅是測量輸入比特流的時間并計算接收1比特的平均時間。自動波特例程的這種實現假設接收器知道校準值的比特序列并且接收器知道何時校準。該技術使用PIC16C54BμC。 μC通過MAX232芯片連接到PC。 PC將校準字符發送到μC。我們選擇ASCII值為“?”因為比特序列。自動波特率例程測量接收比特流中的那些的時間,然后將時間除以6。結果是例程接收或發送1位所需的時間。
由于PIC16C54B沒有硬件USART,因此軟件程序會測量位序列的時序。清單1給出了autobaud例程的源代碼。校準字符包含一個起始位,一個停止位和無奇偶校驗位。對于時間測量,該技術使用16位計數器,該計數器提供一系列傳輸速度。在例程的第一部分,軟件初始化計數器和自動波特率狀態寄存器AUTOB_STATUS。寄存器存儲有關自動波特率例程的輸入信號是否太慢或太快的信息。您可以使用此信息檢查校準過程是否成功。初始化之后,自動波特率程序查找起始位,這是一個邏輯從一到零的轉換。檢測到起始位后,自動波特率程序會查找反向轉換。檢測到此轉換后,例程開始使用16位軟件計數器測量時間。軟件遞增16位計數器的低字節,直到計數器溢出。
當發生溢出時,16位計數器的高字節遞增1。這個過程一直持續到從邏輯1變為零或計數器的高字節溢出為止。在任何一種情況下,例程都會在AUTOB_STATUS中設置一個標志,以指示輸入信號是快還是慢。否則,軟件計算1位的傳輸時間。此時間會生成發送或接收例程的波特率。這些例程需要1比特的傳輸時間,以產生用于比特采樣的延遲或用于比特傳輸。軟件通過將測量時間除以校準值中傳輸的數量來計算1位的傳輸時間。在校準值“?”的情況下,有必要將測量時間除以6。除以6需要將16位計數器/寄存器向右移動三次,同時從左側繪制零。除法后,程序將位時間除以2,計算半位的傳輸。該時間圖在接收例程中用于將位采樣置于位的中間。除以2需要將16位計數器簡單地移位到左側的一個位置。程序將此操作的結果存儲在兩個寄存器中:AUTOHALF_LOW和AUTOHALF_HIGH。
程序完成此計算后,需要將1.5位的傳輸時間調整為軟件開銷。該調整涉及減去執行發送或接收例程所需的指令周期數。減法后,軟件會驗證結果是否小于零。如果是這樣,輸入信號太快,并且例程在AUTOB_STATUS寄存器中設置錯誤標志。調整后,軟件通過驗證16位計數器的值為零來驗證輸入信號是否過快。如果輸入信號不是太快,則自動波特率例程返回到操作系統。
-
接收器
+關注
關注
14文章
2476瀏覽量
72065 -
PCB打樣
+關注
關注
17文章
2968瀏覽量
21772 -
華強PCB
+關注
關注
8文章
1831瀏覽量
27863 -
華強pcb線路板打樣
+關注
關注
5文章
14629瀏覽量
43120
發布評論請先 登錄
相關推薦
評論