本文給出在μPD78045F上采用軟件模擬方式,使用2個I/O口線和一個8位定時器實現(xiàn)異步串行UART功能的方法,。本方法占用資源少,,設(shè)置和使用簡單方便,幀格式可自由改變,。
設(shè)計思路
每一個UART都應具備如下功能:
異步串行發(fā)送和接收的基本單位是幀,,通常每幀包括以下部分:
本設(shè)計中,發(fā)送采用主動查詢方式,,可使用任一輸出端口,,本文中將P12.1設(shè)置為輸出口,作為TxD;由于異步通訊中接收是被動的和隨機的,,因此只能采用中斷方式,,P0.1是外部中斷INTP1的外部引腳,設(shè)計中使用它作為RxD,設(shè)置為下降沿觸發(fā)方式,,可及時檢測到起始位的邏輯0電平,,進入中斷處理程序進行數(shù)據(jù)接收。
波特率發(fā)生器使用8位定時器TM1,,產(chǎn)生指定波特率下的1個發(fā)送/接收位時序長度,即“位定時”,。UART的并行數(shù)據(jù)到串行數(shù)據(jù)的轉(zhuǎn)換,、每幀數(shù)據(jù)格式的生成、發(fā)送和接收功能都由軟件來控制完成,。在指定波特率下,,位定時為1,000,000ms / 波特率,硬件系統(tǒng)采用fx=4.9152 MHz的主晶振,,軟件設(shè)置定時器計數(shù)時鐘為4分頻,,即:fx/4=1.2288 MHz ,達到指定波特率位定時常數(shù)為:1228800 / 波特率 ,。常用的波特率對應的位定時常數(shù)列在表1中,。

以下設(shè)置通訊參數(shù)為9600波特率,1位起始位,,6位數(shù)據(jù)位,,發(fā)送順序從MSB到LSB,偶校驗,,2位停止位,。


圖1 發(fā)送過程流程圖

圖2 接收過程流程圖
軟件流程
發(fā)送
發(fā)送過程采用主動查詢方式完成,為保證每個發(fā)送位的時長相同,,整個過程關(guān)閉中斷,。首先,設(shè)定定時器定時一位時長,,啟動定時器,,關(guān)閉中斷,開始一幀的發(fā)送;然后,,在發(fā)送一位時長的低電平(起始位)后,,按最高位在先的順序依次發(fā)送6個數(shù)據(jù)位,同時計算偶校驗位,,并在數(shù)據(jù)位后發(fā)送;最后,,發(fā)送2位時長高電平作為停止位,結(jié)束一幀的發(fā)送,。關(guān)閉定時器,,開放中斷,發(fā)送過程結(jié)束。發(fā)送流程見圖1,。
接收
接收過程是在中斷處理程序中完成的,。中斷是由下降沿觸發(fā)的,進入中斷的時刻是處在接收起始位的時段,。為了保證接收準確,,在檢測到起始位后,不能在每一位時長的開始而應在其中間進行采樣,。進入中斷程序后,,首先通過設(shè)定定時器,等待一位半時長,,跳過整個起始位和半時長的首個數(shù)據(jù)位,,然后開始按最高位在先的協(xié)議接收六個時長的數(shù)據(jù)位,每接收一位進行串并轉(zhuǎn)換和校驗位計算;隨后接收校驗位并與計算機結(jié)果比較,,確定是否接收正確,。出于簡化程序,校驗位接收完畢后,,沒有讀取停止位,。最后關(guān)閉定時器,結(jié)束接收過程,,中斷返回,。
在μPD78045F的中斷系統(tǒng)中,高優(yōu)先級中斷的響應時間最長32個CPU時鐘,,這些時延應在程序中進行補償,,尤其在高速率通訊時位定時時長很短,補償尤為重要,。補償?shù)姆椒ㄊ菑奈欢〞r中減去最長時延32個時鐘,。在9600波特率、定時器 4分頻計數(shù)情況下,,應減去 32/4=8個定時器計數(shù),。接收中斷處理流程見圖2。
結(jié)語
本文介紹的軟件UART實現(xiàn)方法,,已在項目中實際應用,,達到功能要求,工作穩(wěn)定可靠,。從以上方案可以看出,,本方法的最高波特率可達38400,每一幀的格式可靈活改變,,其中數(shù)據(jù)位長度和發(fā)送順序均沒有限制,,可根據(jù)需要發(fā)送數(shù)十位的數(shù)據(jù)位,。