UART的軟件實(shí)現(xiàn)
2004年4月A版
摘 要:本文討論了UART的軟件實(shí)現(xiàn)方法,介紹了Holtek單片機(jī)在工業(yè)應(yīng)用中用軟件構(gòu)成UART的接口電路。
關(guān)鍵詞:UART;接口技術(shù);軟件外設(shè)
在各種MCU應(yīng)用系統(tǒng)中,經(jīng)常需要與其他的設(shè)備或系統(tǒng)進(jìn)行數(shù)據(jù)通訊,UART是比較常用的一種通訊模式。當(dāng)應(yīng)用系統(tǒng)要求多路UART,或者基于性能、成本綜合考慮選用了不帶UART的MCU時(shí),我們可以考慮用軟件構(gòu)建UART以實(shí)現(xiàn)系統(tǒng)的數(shù)據(jù)通訊要求。
有人對(duì)軟件UART工作效率和可靠性持否定態(tài)度。事實(shí)上系統(tǒng)要求的各項(xiàng)功能的實(shí)現(xiàn)是采用軟件還是硬件,通常要綜合考慮系統(tǒng)要求、可支配資源、成本。最后的結(jié)果總是在考慮上述因素之后的一個(gè)折衷。如果系統(tǒng)本身實(shí)時(shí)性要求不是很高,而MCU的其他資源又允許的話,完全可以以軟件的方式構(gòu)造合乎使用要求的軟件UART。
UART
串行數(shù)據(jù)通訊時(shí),數(shù)據(jù)按位傳送,任何時(shí)候線上僅有一位數(shù)據(jù)。因此收、發(fā)雙方必須同步,以從二進(jìn)制位流中正確地讀出每一位數(shù)據(jù)。異步串行通訊中,收、發(fā)方的同步不采用時(shí)鐘線來進(jìn)行,而是由通訊雙方約定一個(gè)波特率,每一個(gè)傳送單元通過一個(gè)“起始位”來同步。當(dāng)接收方監(jiān)測(cè)到一個(gè)有效起始位,便按照約定的波特率的一個(gè)倍頻(例如16倍頻)對(duì)數(shù)據(jù)進(jìn)行采樣接收。由于每一個(gè)傳送單元的位數(shù)較少(通常不超過11位),而接收采樣的頻率要高于通訊波特率,即使收發(fā)雙方的時(shí)基存在一定誤差,仍然可以保證準(zhǔn)確的通訊。
在空閑狀態(tài),傳送線為邏輯“1”狀態(tài)。數(shù)據(jù)的傳送總是以一個(gè)“起始位”開始的,接著是要傳送的若干數(shù)據(jù)位,低位先行,最后是一個(gè)“1”狀態(tài)的“停止位”。例如在文檔中用“9600 N.8.1”描述一個(gè)UART,就表示UART使用9600bps的波特率,幀格式為一個(gè)起始位、8個(gè)數(shù)據(jù)位、一個(gè)停止位。
當(dāng)接收方檢測(cè)到一個(gè)“1”向“0”的跳變,便視為可能的起始位。起始位被確認(rèn)后,依次接收數(shù)據(jù)位和停止位,若檢測(cè)不到正確的停止位,可視為傳送出錯(cuò)而放棄。
下面以Holtek的HT49R70在復(fù)費(fèi)率電表中的應(yīng)用為例,說明如何實(shí)現(xiàn)一個(gè)符合實(shí)際使用要求的軟件UART。
硬件接口
HT49R70片內(nèi)集成了41
評(píng)論