摘要:本文介紹了多功能顯示驅(qū)動(dòng)器MCl4489與HCS12系列單片機(jī)的接口應(yīng)用開發(fā)設(shè)計(jì),給出了兩種不同接口電路,敘述軟件編程的步驟,并給出了相關(guān)的程序源代碼,經(jīng)實(shí)驗(yàn)表明SPI通訊具有更大的優(yōu)勢(shì)。
關(guān)鍵詞:HCS12單片機(jī);SPI;MCl4489;顯示
引言
對(duì)于任意一種功能完整的單片機(jī)應(yīng)用系統(tǒng),顯示功能往往是必不可少的。例如在智能車運(yùn)行的過程中,對(duì)其速度和時(shí)間的實(shí)時(shí)監(jiān)控是非常重要的,這樣方便了系統(tǒng)的調(diào)試。針對(duì)清華大學(xué)的HCS12型開發(fā)板,它具有豐富的I/O口資源,集成了多種功能模塊,可以廣泛的應(yīng)用于生產(chǎn)過程控制系統(tǒng)。同時(shí),MCl4489是MOTOTOLA公司生產(chǎn)的串行接口5位的7段LED數(shù)碼顯示器的譯碼/驅(qū)動(dòng)芯片,它占用單片機(jī)軟件資源少,不需再外加電路即可與單片機(jī)協(xié)調(diào)工作,譯碼、掃描顯示都由MCl4489自動(dòng)完成,無需單片機(jī)干預(yù),每次只需改變顯示內(nèi)容時(shí)才進(jìn)行一次數(shù)據(jù)傳輸,因而大大節(jié)省了軟件開銷,提高了單片機(jī)的處理和運(yùn)算能力,應(yīng)用靈活方便。而目前,新型高速的16位、32位DSP型單片機(jī)成為主流,而且功能模塊也越來越豐富。針對(duì)這一特點(diǎn)我們將通用的SPI技術(shù)應(yīng)用于MCl4489的顯示控制,同時(shí)也改進(jìn)了用普通I/O口模擬控制的方法。
MC14489及特性
MC14489具有三線串行接口(SPI),可直接與具有SPI接口的CPU相連,也可采用軟件模擬SPI接口,最大串行時(shí)鐘頻率可達(dá)4MHz。它有一個(gè)8位的內(nèi)部系統(tǒng)寄存器和一個(gè)24位的顯示寄存器。
MCl4489采用了所謂的“位抓取”技術(shù),在向內(nèi)部系統(tǒng)設(shè)置寄存器和顯示寄存器送數(shù)時(shí)不需要引導(dǎo)碼和地址碼,而是根據(jù)一次串行輸入數(shù)據(jù)的字節(jié)數(shù)由內(nèi)部自動(dòng)確定送往哪一個(gè)寄存器。若輸入的是單字節(jié)數(shù)據(jù),將被送往系統(tǒng)設(shè)置寄存器,若輸入的是多字節(jié)數(shù)據(jù),則被送往顯示寄存器。
多片MC14489可級(jí)聯(lián)使用以增加顯示位數(shù)。還可由輸入的顯示代碼決定全部顯示段為滿亮度或半亮度顯示。MCl4489的引腳排列如圖(圖1)所示。
MC14489與HCS12單片機(jī)接口軟件設(shè)計(jì)
MC14489采用同步串行數(shù)據(jù)輸入方式,數(shù)據(jù)傳輸中無需起始位、停止位和校驗(yàn)位。在每個(gè)時(shí)鐘的上升沿將DATAIN端的數(shù)據(jù)鎖存到片內(nèi)移位寄存器中,數(shù)據(jù)的傳輸是高位(MSB)在前。在ENABLE信號(hào)的上升沿將片內(nèi)移位寄存器的數(shù)據(jù)存入控制寄存器或顯示寄存器中:在一個(gè)ENABLE有效期間,CPU的數(shù)據(jù)輸入到片內(nèi)移位寄存器中,若輸入的是8位數(shù)據(jù),則自動(dòng)地在ENABLE信號(hào)上升沿將數(shù)據(jù)存入片內(nèi)控制寄存器中,若是24位數(shù)據(jù),則在ENABLE信號(hào)上升沿自動(dòng)將數(shù)據(jù)存入片內(nèi)的顯示寄存器中。
實(shí)現(xiàn)MCl4489與HCS12單片機(jī)的通訊,可采用多種連接方式:(1)采用準(zhǔn)雙向口方式;(2)采用串行通訊方式;(3)使用CAN總線的混合編址方式。由于本開發(fā)板中CAN資源另作他用,故本文僅對(duì)前兩種方式加以討論。下面是相關(guān)電路及完整的實(shí)驗(yàn)程序。
準(zhǔn)雙向口方式
HCS12單片機(jī)內(nèi)部有豐富的I/資源,同時(shí)也集成了多種功能模塊。其中PORTA、PORTB、PORTE、PORTK等接口在芯片處于擴(kuò)展工作方式下,可被用作總線信號(hào)。
下面我們以PORTB口國(guó)例,采用軟件模擬的方法實(shí)現(xiàn)與三線串行接口芯片的連接,其中PORTB_BITO、PORTB_BITl、PORTB_BIT2分別連接到MC14489的ENABLE、CLOCK和DATA IN引腳,然后按圖2和圖3的時(shí)序用軟件方法實(shí)現(xiàn)串行數(shù)據(jù)的輸出和輸入。以下是MC14489與單片機(jī)接線圖(圖2)和實(shí)驗(yàn)完整的程序。
}
串行通訊方式
HCS12單片機(jī)的SPI的簡(jiǎn)述
SPI(Serial Peripheral Interface)是一種高速高效率的同步串行接口技術(shù),這種接口技術(shù)主要用于MCU與外部的接口芯片間交換數(shù)據(jù),這在MOTOROLA單片機(jī)中已經(jīng)是一個(gè)標(biāo)準(zhǔn)模塊,也逐漸成為一種工業(yè)標(biāo)準(zhǔn)。雖然從數(shù)據(jù)傳送速率上講,并行接口要優(yōu)越于串行接口,但是會(huì)使得系統(tǒng)連線比較復(fù)雜,在大多數(shù)的情況下,這種由提高系統(tǒng)復(fù)雜程度而帶來的數(shù)據(jù)傳輸速率的提高是得不償失的,所以目前,較多新型的高速16位、32位MCU都帶有SPI接口,使得系統(tǒng)更加簡(jiǎn)單、可靠,已經(jīng)得到了廣泛的應(yīng)用。
SPI模塊具有和其他外部設(shè)備進(jìn)行全雙工同步串行通信的功能,SPI操作可通過查詢SPI狀態(tài)標(biāo)志或中斷驅(qū)動(dòng)。所有SPI中斷都由CPU響應(yīng),而且SPTE(SPI發(fā)送器空)和NSPRF(SPI接收器滿)位還可設(shè)置為DMA服務(wù)請(qǐng)求使能。在SPI的傳輸過程中,數(shù)據(jù)的發(fā)送(串行移出)和接收(串行移入 )是同步的。串行時(shí)鐘使2條串行數(shù)據(jù)線上的移位和采樣都是同步的。通過軟件還可以控制SPI的時(shí)鐘相位和極性,適用于各種不同的驅(qū)動(dòng)芯片。
SPI軟件編制方法
1>初始化
(1)PE=1,以允許SPI系統(tǒng)。
(2)置MSTR=1,以置MCU為主機(jī)方式。
(3)SPRl、SPRO為適當(dāng)值,以使SPI時(shí)鐘(SCK)能滿足驅(qū)動(dòng)芯片的時(shí)鐘需要。
(4)POL,CPHA為適當(dāng)值,以使SPI時(shí)序能滿足驅(qū)動(dòng)芯片的時(shí)序要求。對(duì)于MCl4489它要求,在SCK的上升沿輸入和在下降沿輸出數(shù)據(jù),應(yīng)選擇CPOL=1,CPHA=1的方式。
(5)是否使用SPI中斷來決定SPIE=0或1。一般情況下在SPI的時(shí)鐘頻率較高時(shí),不必采用中斷方式,而可采用查詢方式。因?yàn)樵赟PI時(shí)鐘頻率為1MHz時(shí),僅需8μs就可完成一次SPI傳送,如使用中斷,則響應(yīng)中斷和中斷返回的執(zhí)行時(shí)間就超過了8 μs。
(6)使用情況置DDRD的值。
2>數(shù)據(jù)的傳送
(1)允許指定的從器件,這一般用清零(對(duì)低電平有效的器件)和置位(對(duì)高電平有效的器件)接至該器件的允許輸出位來實(shí)現(xiàn)。
(2)向SPDR寫入需發(fā)送的數(shù)據(jù)(或地址、命令等),以啟動(dòng)數(shù)據(jù)的傳送。
(3)等待SPIF=1。在傳送完成之前不能清除從器件的允許信號(hào)。
(4)禁止從器件,即清除從器件的允許信號(hào)。
對(duì)于多字節(jié)連續(xù)傳送的場(chǎng)合,在第(4)步時(shí),不應(yīng)禁止從器件,而應(yīng)在讀入數(shù)據(jù)后,返回(2)、(3)步執(zhí)行,直至多字節(jié)讀出或?qū)懭氩僮魍瓿珊?,才禁止從器件?/p>
下面我們以HCS 12MCU為例,給出它與MCl4489的接口電路圖(圖3)和實(shí)驗(yàn)程序。
實(shí)驗(yàn)程序
unsigned int i.n;
void_SPl_Init(void){ /*SPI*初始化*/
SPIOBR=0x77; /*2048分頻*/
SPIOCR2=0x00;
SPIOCRI=0x56; /*SPI使能,主模式,上升沿觸發(fā),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);/*等待發(fā)送完畢*/ SPIODR=data2;/*需要讀的地址高8位*/ while(!SPIOSR_SPTEF); delay(2000); PTS_PTS7=I:} void main(void){ SPI_Init(); display(0x01);/*寫MCl4489內(nèi)部設(shè)置寄存器點(diǎn)亮所有LED*/ display l(0x05,0x43,0x21);/*LEDl~LED5分別顯示1234半亮度顯示*/ PORTB=0xf0; while(1){}} 結(jié)果分析 (1)用普通的I/O口模擬的方法常用,即使是針對(duì)沒有SPI的單片機(jī)系統(tǒng),這種方法也可行,但其編程比較繁瑣,占用4個(gè)普通的I/O口,當(dāng)單片機(jī)的I/O口資源比較緊張時(shí)要進(jìn)行擴(kuò)口。而且它容易受到內(nèi)部的干擾,優(yōu)先級(jí)別不夠。功耗較SPI通訊傳輸較大,反應(yīng)的速度也較慢,有略微的延遲。 (2)SPI通訊傳輸穩(wěn)定,子系統(tǒng)允許使用相同的時(shí)鐘發(fā)送和接收數(shù)據(jù),使用靈活。每個(gè)管腳的方向都可以由軟件控制,而且傳輸速度快,實(shí)時(shí)性能好。 結(jié)語 MC14489集成度高,將鎖存、譯碼、驅(qū)動(dòng)、掃描、時(shí)鐘都集成在一片IC中,使單片機(jī)外圍電路大為簡(jiǎn)化,對(duì)單片機(jī)的軟、硬件資源占用也大大減少。HCS12單片機(jī)與MC14489的接口電路簡(jiǎn)單,應(yīng)用范圍廣,工作可靠。SPI的通訊模式傳輸速率較快,編程實(shí)現(xiàn)簡(jiǎn)單,易掌握,且工作更穩(wěn)定。 參考文獻(xiàn): 1.Peter Spasov(著),李小洪(譯),‘微控制器原理與應(yīng)用(第5版)’,清華大學(xué),2006 2.邵貝貝,‘單片機(jī)嵌入式應(yīng)用的在線開發(fā)方法’,清華大學(xué),2004