摘要:介紹利用AT89C52單片機(jī)作為多功能可編程接口的方法。該接口具有1個(gè)鍵盤/顯示接口,2個(gè)16位定時(shí)/計(jì)數(shù)器和1個(gè)全雙工異步串行通信口。其模塊化的設(shè)計(jì),可以給用戶使用帶來許多方便。
關(guān)鍵詞:多功能接口 串行通信 軟件譯碼
AT89C52(簡(jiǎn)稱89C52)的廣泛使用,使單片機(jī)的價(jià)格大大下降。目前,89C52的市場(chǎng)零售價(jià)已經(jīng)低于8255、8279、8253、8250等專用接口芯片中的任何一種;而89C52的功能實(shí)際上遠(yuǎn)遠(yuǎn)超過以上芯片。因此,如把89C52作為接口芯片使用,在經(jīng)濟(jì)上是合算的。在本人設(shè)計(jì)的系統(tǒng)中,將89C52設(shè)計(jì)為多功能可編程接口,其相關(guān)程序固化在片內(nèi)的Flash ROM中。該芯片(以下簡(jiǎn)稱多功能接口)具有如下功能:①有1個(gè)專用的鍵盤/顯示接口;②有1個(gè)全雙工異步串行通信接口;③有2個(gè)16位定時(shí)/計(jì)數(shù)器。這樣,1個(gè)89C52芯片,承擔(dān)了3個(gè)專用接口芯片的工作;不僅使成本大大下降,而且優(yōu)化了硬件結(jié)構(gòu)和軟件設(shè)計(jì),給用戶帶來許多方便。
1 硬件結(jié)構(gòu)
把89C52當(dāng)作接口使用,接口自身必須盡可能地少占用硬件資源,與主系統(tǒng)之間的連接線也應(yīng)盡可能少,這樣才能少占主機(jī)引腳,把更多的資源留給系統(tǒng)。本設(shè)計(jì)中,主機(jī)與多功能接口之間采用串行通信。主機(jī)與多功能接口之間有四根連接線:CE、CLK、DAT、INTR。CE用于作片選信號(hào)輸入端。此引腳為低電平時(shí),主機(jī)能與多功能接口進(jìn)行數(shù)據(jù)傳送。CLK為時(shí)鐘輸入端,當(dāng)主機(jī)向多功能接口發(fā)送指令時(shí),此引腳電平上升表示數(shù)據(jù)有效。DAT為串行數(shù)據(jù)輸入/輸出端。INTR為多功能接口輸出端。當(dāng)多功能接口內(nèi)的數(shù)據(jù)準(zhǔn)備好時(shí),由INTR向主機(jī)發(fā)低電平,通知主機(jī),數(shù)據(jù)已準(zhǔn)備就緒,可以進(jìn)行讀操作。該信號(hào)可供主機(jī)查詢,也可用作發(fā)向主機(jī)的中斷請(qǐng)求信號(hào)。
89C52的P0、P1、P2口用作鍵盤/顯示接口。用程序掃描的方法進(jìn)行鍵盤輸入和顯示輸出。P0口作為字段口,P1口作為鍵盤的列輸入口,P2作為顯示器的字位口以及鍵盤的行掃描輸出口。由于顯示器字位口電流較大,P2口需進(jìn)行電流驅(qū)動(dòng)。該多功能接口最多可連接8個(gè)LED顯示器和1個(gè)8×8鏈盤矩陣。其硬件原理如圖1所示。
P3.2、P3.3、P3.6、P3.7分別用作CE、CLK、DAT和INTR信號(hào);而P3.0、P3.1用作異步串行通信數(shù)據(jù)線RXD和TXD;P3.4、P3.5分別是OUT0/T0和OUT1/T1信號(hào)線。該引腳在定時(shí)器工作于連續(xù)脈沖方式時(shí),可輸出通斷比與頻率可編程的連續(xù)脈沖;工作在計(jì)數(shù)器方式時(shí),該引腳作為外部計(jì)數(shù)脈沖輸入端輸入計(jì)數(shù)脈沖。
圖1
2 通信協(xié)議
實(shí)現(xiàn)多功能接口的關(guān)鍵是主機(jī)和多功能接口之間的通信。在本設(shè)計(jì)中,采用主從方式進(jìn)行通信,所有的操作都由主機(jī)發(fā)出操作指令。多功能接口在收到主機(jī)發(fā)來的操作指令后,對(duì)操作碼進(jìn)行軟件譯碼。根據(jù)操作碼的內(nèi)容轉(zhuǎn)入相應(yīng)的工作通道,并從操作數(shù)部分獲取所需要的數(shù)據(jù)。
多功能接口采用串行方式與主機(jī)通信。串行數(shù)據(jù)從DAT引腳送入芯片,并由CLK端同步。當(dāng)片選信號(hào)CE變低后,DAT引腳上的數(shù)據(jù)在CLK引腳的上升沿被寫入多功能接口的寄存器中。
串行接口的時(shí)序如圖2所示。
圖2
由于多功能接口接收指令的工作用軟件進(jìn)行,因此,圖中的t1、t2、t3、t4、t5時(shí)間較長,要求t1-t4時(shí)間在10μs~1000μs。指令有兩類:一類寫指令,一類是讀指令。寫指令中不管是操作碼還是操作數(shù),其數(shù)據(jù)傳送方向均為從主機(jī)到多功能接口;而對(duì)讀指令來講,操作碼部分的數(shù)據(jù)方向是從主機(jī)到多功能接口,而操作數(shù)部分的數(shù)據(jù)方向是從多功能接口到主機(jī)。
t5是讀指令中操作碼與操作數(shù)之間需要的時(shí)間間隔,t5應(yīng)在30μs~1000μs的范圍。在讀操作時(shí),CLK時(shí)鐘的上升沿來到時(shí),多功能接口將數(shù)據(jù)送到DAT引腳上。
3 指令編碼
多功能接口共有13條指令。指令長度為1字節(jié)、2字節(jié)、3字節(jié)和4字節(jié)不等。
(1)復(fù)位指令
機(jī)器碼為00H。當(dāng)多功能接口收到復(fù)位指令后,所有字符消隱,所有定時(shí)器清零,定時(shí)中斷和串行中斷關(guān)閉。其狀態(tài)與系統(tǒng)上電復(fù)位的情況相似。
(2)顯示數(shù)據(jù)指令
該指令向多功能接口的顯示緩沖器中發(fā)送顯示數(shù)據(jù)。這是一個(gè)2字節(jié)指令,其指令編碼如下:
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| dip | 0 | 0 | 0 | d3 | d2 | d1 | d0 |
其中dip為小數(shù)點(diǎn)控制位,a2、a1、a0為位地址,d3、d2、d1、d0為待顯示的字符,其格式如表1、2所列。
(3)閃爍指令
該指令控制各個(gè)數(shù)碼管的閃爍屬性。d7~d0分別對(duì)應(yīng)數(shù)碼管1~8,1為閃爍,0為不閃爍。





