摘要:本文介紹了多功能顯示驅動器MCl4489與HCS12系列單片機的接口應用開發設計,給出了兩種不同接口電路,敘述軟件編程的步驟,并給出了相關的程序源代碼,經實驗表明SPI通訊具有更大的優勢。
關鍵詞:HCS12單片機;SPI;MCl4489;顯示
引言
對于任意一種功能完整的單片機應用系統,顯示功能往往是必不可少的。例如在智能車運行的過程中,對其速度和時間的實時監控是非常重要的,這樣方便了系統的調試。針對清華大學的HCS12型開發板,它具有豐富的I/O口資源,集成了多種功能模塊,可以廣泛的應用于生產過程控制系統。同時,MCl4489是MOTOTOLA公司生產的串行接口5位的7段LED數碼顯示器的譯碼/驅動芯片,它占用單片機軟件資源少,不需再外加電路即可與單片機協調工作,譯碼、掃描顯示都由MCl4489自動完成,無需單片機干預,每次只需改變顯示內容時才進行一次數據傳輸,因而大大節省了軟件開銷,提高了單片機的處理和運算能力,應用靈活方便。而目前,新型高速的16位、32位DSP型單片機成為主流,而且功能模塊也越來越豐富。針對這一特點我們將通用的SPI技術應用于MCl4489的顯示控制,同時也改進了用普通I/O口模擬控制的方法。
MC14489及特性
MC14489具有三線串行接口(SPI),可直接與具有SPI接口的CPU相連,也可采用軟件模擬SPI接口,最大串行時鐘頻率可達4MHz。它有一個8位的內部系統寄存器和一個24位的顯示寄存器。
MCl4489采用了所謂的“位抓取”技術,在向內部系統設置寄存器和顯示寄存器送數時不需要引導碼和地址碼,而是根據一次串行輸入數據的字節數由內部自動確定送往哪一個寄存器。若輸入的是單字節數據,將被送往系統設置寄存器,若輸入的是多字節數據,則被送往顯示寄存器。
多片MC14489可級聯使用以增加顯示位數。還可由輸入的顯示代碼決定全部顯示段為滿亮度或半亮度顯示。MCl4489的引腳排列如圖(圖1)所示。
MC14489與HCS12單片機接口軟件設計
MC14489采用同步串行數據輸入方式,數據傳輸中無需起始位、停止位和校驗位。在每個時鐘的上升沿將DATAIN端的數據鎖存到片內移位寄存器中,數據的傳輸是高位(MSB)在前。在ENABLE信號的上升沿將片內移位寄存器的數據存入控制寄存器或顯示寄存器中:在一個ENABLE有效期間,CPU的數據輸入到片內移位寄存器中,若輸入的是8位數據,則自動地在ENABLE信號上升沿將數據存入片內控制寄存器中,若是24位數據,則在ENABLE信號上升沿自動將數據存入片內的顯示寄存器中。

實現MCl4489與HCS12單片機的通訊,可采用多種連接方式:(1)采用準雙向口方式;(2)采用串行通訊方式;(3)使用CAN總線的混合編址方式。由于本開發板中CAN資源另作他用,故本文僅對前兩種方式加以討論。下面是相關電路及完整的實驗程序。
準雙向口方式
HCS12單片機內部有豐富的I/資源,同時也集成了多種功能模塊。其中PORTA、PORTB、PORTE、PORTK等接口在芯片處于擴展工作方式下,可被用作總線信號。
下面我們以PORTB口國例,采用軟件模擬的方法實現與三線串行接口芯片的連接,其中PORTB_BITO、PORTB_BITl、PORTB_BIT2分別連接到MC14489的ENABLE、CLOCK和DATA IN引腳,然后按圖2和圖3的時序用軟件方法實現串行數據的輸出和輸入。以下是MC14489與單片機接線圖(圖2)和實驗完整的程序。



}
串行通訊方式
HCS12單片機的SPI的簡述
SPI(Serial Peripheral Interface)是一種高速高效率的同步串行接口技術,這種接口技術主要用于MCU與外部的接口芯片間交換數據,這在MOTOROLA單片機中已經是一個標準模塊,也逐漸成為一種工業標準。雖然從數據傳送速率上講,并行接口要優越于串行接口,但是會使得系統連線比較復雜,在大多數的情況下,這種由提高系統復雜程度而帶來的數據傳輸速率的提高是得不償失的,所以目前,較多新型的高速16位、32位MCU都帶有SPI接口,使得系統更加簡單、可靠,已經得到了廣泛的應用。
SPI模塊具有和其他外部設備進行全雙工同步串行通信的功能,SPI操作可通過查詢SPI狀態標志或中斷驅動。所有SPI中斷都由CPU響應,而且SPTE(SPI發送器空)和NSPRF(SPI接收器滿)位還可設置為DMA服務請求使能。在SPI的傳輸過程中,數據的發送(串行移出)和接收(串行移入 )是同步的。串行時鐘使2條串行數據線上的移位和采樣都是同步的。通過軟件還可以控制SPI的時鐘相位和極性,適用于各種不同的驅動芯片。
SPI軟件編制方法
1>初始化
(1)PE=1,以允許SPI系統。
(2)置MSTR=1,以置MCU為主機方式。
(3)SPRl、SPRO為適當值,以使SPI時鐘(SCK)能滿足驅動芯片的時鐘需要。
(4)POL,CPHA為適當值,以使SPI時序能滿足驅動芯片的時序要求。對于MCl4489它要求,在SCK的上升沿輸入和在下降沿輸出數據,應選擇CPOL=1,CPHA=1的方式。
(5)是否使用SPI中斷來決定SPIE=0或1。一般情況下在SPI的時鐘頻率較高時,不必采用中斷方式,而可采用查詢方式。因為在SPI時鐘頻率為1MHz時,僅需8μs就可完成一次SPI傳送,如使用中斷,則響應中斷和中斷返回的執行時間就超過了8 μs。
(6)使用情況置DDRD的值。
2>數據的傳送
(1)允許指定的從器件,這一般用清零(對低電平有效的器件)和置位(對高電平有效的器件)接至該器件的允許輸出位來實現。
(2)向SPDR寫入需發送的數據(或地址、命令等),以啟動數據的傳送。
(3)等待SPIF=1。在傳送完成之前不能清除從器件的允許信號。
(4)禁止從器件,即清除從器件的允許信號。
對于多字節連續傳送的場合,在第(4)步時,不應禁止從器件,而應在讀入數據后,返回(2)、(3)步執行,直至多字節讀出或寫入操作完成后,才禁止從器件。
下面我們以HCS 12MCU為例,給出它與MCl4489的接口電路圖(圖3)和實驗程序。
實驗程序
unsigned int i.n;
void_SPl_Init(void){ /*SPI*初始化*/
SPIOBR=0x77; /*2048分頻*/
SPIOCR2=0x00;
SPIOCRI=0x56; /*SPI使能,主模式,上升沿觸發,ss輸出*/
DDRS DDRST=I;}
union
{ unsigned char byte;
struct
{unsigned char:7;
unsigned char bit7:1;
}bit;
}temp;
void delay(unsigned int count){
unsigned int k:
for(k=O;k void display(uchar DCMD){ PTS PTS7=0; while(!(SPIOSR0x80)) {SPIODR=DCMD;} PTS_PTS7=1;} void display l(uchar cmd,uchardatal,uchar data2){ inti=0: uchar dsp; PTS_PTS7=0x00; delay(1); SPIODR=dsp; /*需要讀的地址高8位*/ while(!SPIOSR_SPTEF); SPI0DR=datal;/*需要讀的地址低8位*/ while(!SPIOSR_SPTEF);/*等待發送完畢*/ SPIODR=data2;/*需要讀的地址高8位*/ while(!SPIOSR_SPTEF); delay(2000); PTS_PTS7=I:} void main(void){ SPI_Init(); display(0x01);/*寫MCl4489內部設置寄存器點亮所有LED*/ display l(0x05,0x43,0x21);/*LEDl~LED5分別顯示1234半亮度顯示*/ PORTB=0xf0; while(1){}} 結果分析 (1)用普通的I/O口模擬的方法常用,即使是針對沒有SPI的單片機系統,這種方法也可行,但其編程比較繁瑣,占用4個普通的I/O口,當單片機的I/O口資源比較緊張時要進行擴口。而且它容易受到內部的干擾,優先級別不夠。功耗較SPI通訊傳輸較大,反應的速度也較慢,有略微的延遲。 (2)SPI通訊傳輸穩定,子系統允許使用相同的時鐘發送和接收數據,使用靈活。每個管腳的方向都可以由軟件控制,而且傳輸速度快,實時性能好。 結語 MC14489集成度高,將鎖存、譯碼、驅動、掃描、時鐘都集成在一片IC中,使單片機外圍電路大為簡化,對單片機的軟、硬件資源占用也大大減少。HCS12單片機與MC14489的接口電路簡單,應用范圍廣,工作可靠。SPI的通訊模式傳輸速率較快,編程實現簡單,易掌握,且工作更穩定。 參考文獻: 1.Peter Spasov(著),李小洪(譯),‘微控制器原理與應用(第5版)’,清華大學,2006 2.邵貝貝,‘單片機嵌入式應用的在線開發方法’,清華大學,2004