Intel16位單片機(jī)的特殊串行通訊方式
1 概述
隨著單片機(jī)技術(shù)的發(fā)展和控制技術(shù)的提高,16位單片機(jī)已經(jīng)被廣泛地應(yīng)于工和民用領(lǐng)域。其中,Intel公司的80C196系列16位單片機(jī)目前應(yīng)用非常廣泛的一種。
80C196MC/MD 單片機(jī)集合了Intel16位單片機(jī)的所有特性,是196系列單片機(jī)中功能最強(qiáng)大的單片機(jī)之一。它有一個16位邏輯運(yùn)算單元,13路10位A/D轉(zhuǎn)換通道,一個EPA、PTS、兩個PWM脈寬調(diào)制單元和三個WFG(波形發(fā)生器)。由于它完善的硬件結(jié)構(gòu)、出色的運(yùn)算能力,使得196MC/MD單片機(jī)可以應(yīng)用于各個領(lǐng)域。它所獨(dú)有的WFG更使196MC/MD在電機(jī)變頻控制中倍受青睞。196MC/MD單片機(jī)的另一特色就是它獨(dú)特的通訊方式。與其它單片機(jī)不同,196MC/MD的通訊不是通過獨(dú)立的串行通訊接口實(shí)現(xiàn)的,而是利用EPA和PTS來實(shí)現(xiàn)的。這種方式不但能夠?qū)崿F(xiàn)一般串行口的完成的各種通訊功能。而且還能實(shí)現(xiàn)一些特殊的功能(如多串口的通訊)。要實(shí)現(xiàn)196MC/MD靈活多樣的串行通訊方式,關(guān)鍵是要掌握EPA和PTS的使用技巧。
2 EPA和PTS的工作原理
Intel公司在KC系列以后的16位單片機(jī)中增加了EPA(Event Process Array)事件處理陣列和PTS(Peripheral Transaction Server)外設(shè)事務(wù)服務(wù)器。其中外設(shè)事務(wù)服務(wù)器是微指令中斷控制器。196MC/MD的串行通訊以是利用它們來實(shí)現(xiàn)的。
196MC/MD 單片機(jī)是EPA中有兩種模塊,一種是捕獲/比較模塊,它用于支持一個對應(yīng)引腳的高速輸入/輸出功能。所謂“捕獲”是指它可以記載某個EPA引腳上電平發(fā)生跳變事件的時刻。EPA可以捕獲的事件包括下降沿跳變、上升沿跳變、上升或下降沿跳變。在串行通訊中正是利用此功能來“捕獲”串行輸入時的起始位的。所謂 “比較”是將定時器值與一個預(yù)先設(shè)定值進(jìn)行比較,如相等,則執(zhí)行指定的輸出功能。輸出功能包括輸出低電平、輸出高電平以及引腳電平翻轉(zhuǎn)等。由于“比較”功能可產(chǎn)生一個準(zhǔn)確的定時值,因此在串行輸入時可利用這一特性來確定第一個有效數(shù)據(jù)位的采樣時刻,EPA中的另一種模塊是“比較”模塊。它與“捕獲/比較” 模塊中的比較功能是一致的。串行通訊中利用該模塊的比較輸出功能來發(fā)送數(shù)據(jù),并與PTS相互協(xié)調(diào)工作以使其達(dá)到規(guī)定的波特率。
196MC/MD 的EPA中管理了4個捕獲/比較模塊和4個比較模塊,每個模塊在硬件上都有對應(yīng)的引腳。利用這些EPA管理的引腳可以構(gòu)成串行通訊的硬件接口。而且,對于每一個引腳都可以進(jìn)行串行通訊接口。因此,196MC/MD的串行安排比較靈活,同時,豐富的硬件資源也為實(shí)現(xiàn)多串口通訊提供了硬件保證。這是其它單片機(jī)無法與之相比的。
實(shí)現(xiàn)196MC/MD串行通訊另一難點(diǎn)是 PTS的使用。PTS是一個微指令的硬件中斷處理器,它可提供一種特殊的中斷服務(wù)。與普通中斷不同的是,它不改變堆棧的中斷服務(wù)。與普通中斷不同的是,它不改變堆棧以及PSW,也不打斷正常指令流。它將待處理的微指令插入在PTS控制塊中可與常指令同步執(zhí)行。這樣,就不需要額外的CPU開銷,當(dāng)產(chǎn)生PTS 中斷時,它可以按照PTS控制塊中規(guī)定的操作繼續(xù)進(jìn)行,直到PTS控制塊中規(guī)定的所有工作進(jìn)行完后才觸發(fā)一次對應(yīng)的變通中斷來申請一次CPU管理。因此 PTS中斷可以大大減輕CPU的負(fù)擔(dān)以使代碼執(zhí)行效率更高;同時它還要與普通中斷配合使用,是一種特殊的中斷方式。196MC/MD的PTS有4種操作方式,分別為單字節(jié)傳送方式、多字節(jié)傳送方式、A/D轉(zhuǎn)換方式和串行通訊方式,它們分別對應(yīng)于5種PTS控制模塊。其中串行通訊方式是196MC/MD所獨(dú)有的,它由兩個PTS控制塊組成,圖1為其結(jié)構(gòu)圖。
有關(guān)接收和發(fā)送的數(shù)據(jù)存放在由DATA(L)和DATA(H)構(gòu)成的數(shù)據(jù)單元中。其數(shù)據(jù)單元的寬度可達(dá)16位。波特率的設(shè)定參數(shù)放在BAUD(L)和BAUD (H)中。196MC/MD串行通訊的控制參數(shù)主要放在PTSCON和PTSCON1寄存器中。對這兩個寄存器進(jìn)行操作可以設(shè)定各種串行通訊方式。下面主要介紹這兩個寄存器。
PTSCON的操作格式如下:
其中:M2M1M0=011為發(fā)送方式;M2M1M0=001為接收方式;SA=1為同步SIO;SA=0為異步SIO。
MAJ=1為允許多數(shù)表決采樣;MAJ=0為禁止多數(shù)表決采樣。
PTSCON1具有異步和同步操作兩種模式。異步方式的PTSCON1操作格式為:
同步方式的PTSCON1格式為:
其中:PRAR為接收奇偶校驗(yàn)控制/狀態(tài)位;
PEN為奇偶校驗(yàn)選通們,PEN=1時選通;PEN=0時禁止;
FE為出錯標(biāo)志,F(xiàn)E=1說明傳輸出錯;
TPAR為發(fā)送奇偶校驗(yàn)控制位;
TRC是發(fā)送/接收控制位。
3 實(shí)現(xiàn)196MC/MD的串行通訊
在利用196MC/MD實(shí)現(xiàn)串行通訊時,首先選擇EPA中的一個捕獲比較模塊作為串行通訊,再選擇一個比較模塊作為串行通訊發(fā)送模塊。這樣就能構(gòu)成串行通訊的硬件端口。然后,對所選的EPA模塊開辟相應(yīng)的PTS通道,再根據(jù)通訊要求編寫串行通訊的發(fā)送和接收PTS模塊。最后使EPA和PTS兩者協(xié)同工作便能實(shí)現(xiàn)對串行通訊的控制。
下面以異步串行通訊為例介紹其實(shí)現(xiàn)方法:首先為串行接收方式選擇一個捕獲/比較模塊作為串行接收引腳。然后利用捕獲功能捕捉起始位,當(dāng)捕捉到起始位后將該模塊轉(zhuǎn)換為比較方式,并利用比較方式的精確定時來確定第一個采樣時刻。最后按照選定的時間間隔對輸入數(shù)據(jù)的位進(jìn)行采樣(要確保每次采樣都發(fā)生在數(shù)據(jù)位周期中心),這樣就可以正確接收串行數(shù)據(jù)了。這個采樣過程是通過對應(yīng)的EPA中斷和PTS配合來實(shí)現(xiàn)的。圖2是接收過程的時序圖。
接收過程開始后,先由EPA捕獲比較模塊捕捉起始位,捕獲到時產(chǎn)生一次EPA的普通中斷。在這個中斷處理程序中,將捕獲方式轉(zhuǎn)變?yōu)楸容^方式,并根據(jù)要求的波特率設(shè)定比較時間為個位周期,同時啟動PTS功能。在此后的個位周期,即第一個數(shù)據(jù)位周期的斷時刻到來時,第一個PTS周期開始執(zhí)行,并根據(jù)設(shè)定對該位數(shù)據(jù)進(jìn)行采樣(為了提高抗干擾能力,可以采用多數(shù)表決方式采樣),直到各位數(shù)據(jù)由PTS中斷根據(jù)設(shè)公平的波特率等參數(shù)直到各位數(shù)據(jù)由PTS中斷根據(jù)設(shè)定的波特率等參數(shù)采樣完成,系統(tǒng)都不需CPU再干預(yù)為止。等到一個數(shù)據(jù)單元接收完畢后,PTS中斷就結(jié)束了。這時,程序再次進(jìn)入一個EPA的普通中斷,在這個中斷中,可將PTS中接收的數(shù)據(jù)保存,然后將該EPA模塊設(shè)為捕獲方式,以捕獲下一個數(shù)據(jù)單元的起始位。以此方式反復(fù)運(yùn)行就可以逐一地接收數(shù)據(jù)單元了。對于串行發(fā)送方式,可以在EPA的捕獲/比較模塊或比較模塊中任選一個作為串行發(fā)送引腳。然后再根據(jù)要求編寫PTS控制塊,最后利用EPA的普通中斷和PTS配合來產(chǎn)生逐位發(fā)送的串行發(fā)送時序,圖3所示是其發(fā)送時序。其具體工作過程是:首先將待發(fā)送的數(shù)據(jù)單元與通訊參數(shù)一同寫入相應(yīng)的發(fā)送PTS控制塊中。然后在發(fā)送引腳上產(chǎn)生一個下降沿來作為起始位,接著就可以啟動PTS中斷了。在第一個PTS中斷中,先在PTS的控制下在發(fā)送引腳上發(fā)出一個位信號。然后再在以后的PTS中斷中按規(guī)定的波特率逐位發(fā)送關(guān)斷,此過程無須CPU 干預(yù),直到一個數(shù)據(jù)單元發(fā)送完成后進(jìn)入一次EPA的普通中斷為止。在這個中斷處理中,應(yīng)首先更新有關(guān)寄存器的設(shè)置,然后放入下一個特發(fā)送的數(shù)據(jù)單元,以構(gòu)造出新的PTS控制塊。之后再產(chǎn)生一個新的發(fā)送起始位,以重新啟動新一輪的PTS來發(fā)送下一個數(shù)據(jù)單元。這樣反復(fù)的運(yùn)行就實(shí)現(xiàn)了串行數(shù)據(jù)的發(fā)送。
4 結(jié)束語
實(shí)驗(yàn)證明,196MC/MD單片機(jī)的這種串行通訊方式在實(shí)際應(yīng)用中效果非常好。雖然相對于獨(dú)立串口來說,該方法略顯復(fù)雜。但是這種通訊方法的靈活性和實(shí)用性是其它獨(dú)立串口所無法比擬的。而且這種通訊方式充分顯示了Intel 16單片機(jī)技術(shù)中EPA和PTS的技術(shù)特點(diǎn),這也是196MC/MD單片機(jī)應(yīng)用的重要技術(shù)之一。