新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > BC7281A串行通訊的解決方案

BC7281A串行通訊的解決方案

作者:中科院上海技術(shù)物理研究所 陳木旺 陳育偉 童子磊 時(shí)間:2004-11-23 來(lái)源:電子產(chǎn)品世界 收藏

2004年7月A版


摘   要:本文重點(diǎn)闡述數(shù)碼管顯示及鍵盤接口專用控制芯片與MCU串行通訊中應(yīng)注意的幾個(gè)問(wèn)題,給出了有效的解決方法,并提出了改進(jìn)建議。

關(guān)鍵詞系統(tǒng);;

  傳統(tǒng)的數(shù)碼管顯示和鍵盤接口一般直接采用MCU的I/O口對(duì)鍵盤或數(shù)碼管進(jìn)行動(dòng)態(tài)掃描的方法,硬件上需要較多的外圍部件,且占用MCU大量I/O口,軟件上則浪費(fèi)CPU資源,且給編程人員帶來(lái)很大的不便。數(shù)碼管顯示及鍵盤接口專用控制芯片以其實(shí)現(xiàn)方法簡(jiǎn)單、功能強(qiáng)大等顯著特點(diǎn)得到廣泛的應(yīng)用。這種芯片外圍部件少、與MCU通訊一般采用串行接口或總線、在硬件上和軟件上都占用極少資源、且功能強(qiáng)大、使得編程人員可以將更多的時(shí)間花在控制上。目前的這類接口芯片主要有:BC728X、HD7279A、ZLG7290、CH451等,是其中性價(jià)比較高的一種。

典型應(yīng)用電路

  BC7281A的典型應(yīng)用電路如圖1所示,顯示位數(shù)為16位,連接的鍵盤個(gè)數(shù)為64個(gè),其外接移位寄存器采用74HC164,控制MCU采用ATMEL公司的AT89C51,為簡(jiǎn)單起見(jiàn),圖中僅畫出與BC7281A相關(guān)的電路。

BC7281A與MCU之間的通訊

  BC7281A與MCU之間的通訊是采用2線高速串行接口,這兩個(gè)連線分別是數(shù)據(jù)線DAT和同步時(shí)鐘線CLK,其中DAT為雙向數(shù)據(jù)傳輸線,BC7281A既用該線從MCU接收數(shù)據(jù),也用該線向MCU發(fā)送數(shù)據(jù)。BC7281A的DAT引腳為漏極開(kāi)路輸出結(jié)構(gòu),使用時(shí)須在該線上加20KW左右的上拉電阻。CLK引腳為串行時(shí)鐘接口的同步時(shí)鐘,由MCU控制,下降沿有效。串行接口數(shù)據(jù)寬度為8位,時(shí)序圖如圖2所示。

  由于BC7281A的2線串行接口是自行規(guī)定的,一般MCU都不具備此通訊接口,但可以采用軟件實(shí)現(xiàn)。MCU發(fā)送指令或數(shù)據(jù)到BC7281A子程序?yàn)镾END,MCU接收數(shù)據(jù)子程序?yàn)镽ECEIVE,采用51指令系統(tǒng)編寫,其中DATA_OUT為MCU向BC7281A發(fā)送數(shù)據(jù)的寄存器,該寄存器既能直接尋址又能位尋址,DATA_IN為MCU接收BC7281A的數(shù)據(jù)寄存器,CLK和DAT定義為MCU的I/O口,分別連接到BC7281A芯片上的CLK和DAT引腳。

MCU發(fā)送指令或數(shù)據(jù)到BC7281A子程序

SEND:   CLR        CLK

              SETB        CLK             ;發(fā)送握手請(qǐng)求脈沖

WAIT1:        JB        DAT,SEND    ; DAT

              CLR        CLK             ;建立通訊

              SETB        CLK

WAIT2:        JNB        DAT,WAIT2 ;發(fā)送串行數(shù)據(jù)

              MOV        BIT_COUNT,#8

SEND_LOOP:       MOV        C,DATA_OUT.7 ; BIT7

                     MOV        DAT,C

                            CLR        CLK ; CLK                                                                     

                            SETB        CLK

                     MOV        A,DATA_OUT

                            RL         A

                     MOV        DATA_OUT,A

                            NOP

                            NOP

                            DJNZ        BIT_COUNT,SEND_LOOP

                            SETB        DAT

                            NOP

                            NOP

                            RET

MCU接收數(shù)據(jù)子程序

RECEIVE:       CLR        CLK      ;發(fā)送握手請(qǐng)求脈沖

                     SETB        CLK

WAIT3:        JB        DAT,WAIT3 ;建立通訊

                     CLR        CLK ; CLK ,

                     SETB        CLK

                     MOV        BIT_COUNT,#8

RECV_LOOP:       NOP             ;發(fā)送串行數(shù)據(jù)

                     NOP

                     MOV        A,DATA_IN

                     MOV        C,DAT

                     RLC      A

                     MOV        DATA_IN,A

                     CLR        CLK

                     SETB        CLK

                     DJNZ        BIT_COUNT,RECV_LOOP

                            NOP ;

                     NOP

                     RET

  在使用過(guò)程中,只要根據(jù)需要調(diào)用SEND或RECEIVE子程序即可。但在某些情況下可能引起嚴(yán)重的問(wèn)題,通訊時(shí)間過(guò)長(zhǎng)會(huì)影響顯示在數(shù)據(jù)傳送期間,BC7281A將不會(huì)進(jìn)行顯示和鍵盤掃描,因此雖然數(shù)據(jù)傳送的速度并沒(méi)有下限的限制,但如果數(shù)據(jù)的傳送時(shí)間大于掃描周期(最小為8mS),將會(huì)對(duì)顯示造成影響。

  一般情況下,通訊周期是很短的,用Insight ME-52H仿真器測(cè)試MCU與BC7281A單個(gè)字節(jié)的通訊周期,時(shí)鐘由仿真器內(nèi)部提供,為12MHz,測(cè)得SEND平均的通訊周期在170mS左右,RECEIVE的為160mS左右,遠(yuǎn)遠(yuǎn)小于掃描周期,不會(huì)影響顯示。但在有中斷的情況下,就可能間接延長(zhǎng)通訊周期了,因?yàn)橹袛嗍请S機(jī)的,MCU就有可能在通訊期間響應(yīng)中斷,則此時(shí)的傳送時(shí)間還應(yīng)包括中斷響應(yīng)的時(shí)間,如果中斷處理時(shí)間較長(zhǎng),就可能影響顯示了。

  例如,在中斷服務(wù)程序里利用UART發(fā)送批量數(shù)據(jù),為了確保數(shù)據(jù)的正確發(fā)送,必須在每個(gè)字節(jié)發(fā)送完畢后即發(fā)送緩沖器為空時(shí)才發(fā)送下一個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)的發(fā)送時(shí)間由波特率決定,在波特率為9600bps,采用10位異步收發(fā)方式情況下,則傳送一個(gè)8位的數(shù)據(jù)至少需要1(1/960S)mS,實(shí)驗(yàn)證明,當(dāng)發(fā)送數(shù)據(jù)量為8個(gè)時(shí),數(shù)碼管顯示有明顯的閃爍現(xiàn)象,并隨著發(fā)送數(shù)據(jù)量的增加,閃爍更加明顯。

  顯然,在中斷源比較多,且中斷比較頻繁的情況下,就可能在一個(gè)傳遞周期內(nèi)多次響應(yīng)中斷(包括中斷嵌套),即使每個(gè)中斷的響應(yīng)時(shí)間較短,通訊時(shí)間也會(huì)顯著的延長(zhǎng),也會(huì)引起閃爍現(xiàn)象。

通訊協(xié)議被破壞導(dǎo)致數(shù)據(jù)傳送錯(cuò)誤

  由于MCU與BC7281A的通訊是采用2根半雙工的串行總線,傳送數(shù)據(jù)時(shí)要求以字節(jié)為單位進(jìn)行傳送,即傳送一個(gè)字節(jié)后才能傳送下一個(gè)字節(jié),否則會(huì)引起傳送數(shù)據(jù)錯(cuò)誤。

  如果調(diào)用這些通訊子程序的指令分布在主程序和中斷服務(wù)程序里,就可能出現(xiàn)以下情況:主程序正在執(zhí)行某條通訊指令期間,響應(yīng)中斷服務(wù)程序里的另一條通訊指令,此時(shí)通訊協(xié)議將出錯(cuò),導(dǎo)致數(shù)據(jù)傳送錯(cuò)誤。特別是會(huì)出現(xiàn)在以下情況:主程序完成顯示功能,鍵盤采用中斷方式,這時(shí)若在中斷服務(wù)程序出現(xiàn)讀取鍵值的指令,將會(huì)引起數(shù)據(jù)傳輸出錯(cuò)。因此要求所有調(diào)用通訊指令均在主程序或中斷服務(wù)程序中。

解決方法

  從上面的分析可以看出,這些問(wèn)題主要是由中斷引起的,可以采用在軟件上調(diào)整程序結(jié)構(gòu),硬件上進(jìn)一步完善等方法加以解決,具體如下:

調(diào)整程序結(jié)構(gòu)

  禁止在通訊期間內(nèi)響應(yīng)中斷:禁止在通訊期間內(nèi)響應(yīng)中斷,就是在每次調(diào)用通訊子程序前關(guān)閉所有的中斷,調(diào)用完畢后再開(kāi)放中斷,這樣傳遞時(shí)間就不會(huì)增加,也不會(huì)出現(xiàn)在同一個(gè)通訊周期里分時(shí)傳送兩個(gè)數(shù)據(jù)的情況。該方法雖然簡(jiǎn)單,但有一定的局限性,對(duì)于有些實(shí)時(shí)性要求很高的場(chǎng)合,或者利用中斷實(shí)現(xiàn)精確延時(shí)等場(chǎng)合就不適用了。

  采用中斷配合查詢標(biāo)志位:該方法中,對(duì)于實(shí)時(shí)性要求高或執(zhí)行時(shí)間較短的中斷則直接在相應(yīng)的中斷服務(wù)程序中完成,其他的中斷則采用中斷配合查詢標(biāo)志位的方法處理,即僅在中斷服務(wù)程序里設(shè)置中斷標(biāo)志位,在主程序里查詢?cè)摌?biāo)志位的狀態(tài),若有中斷發(fā)生則進(jìn)行相應(yīng)的處理,這樣就可以將原來(lái)中斷服務(wù)程序中的處理部分轉(zhuǎn)移至主程序了,也就不會(huì)出現(xiàn)通訊子程序的指令分布在主程序和中斷服務(wù)程序的情況了,也就避免了在一個(gè)通訊期間內(nèi)分時(shí)傳送兩個(gè)數(shù)據(jù),同時(shí)也有效的減少了中斷時(shí)間。另外,盡量減少通訊的頻率,如在顯示的數(shù)據(jù)不變化時(shí)不更新BC7281A中相應(yīng)的顯示寄存器,這樣就可以減少在通訊期間響應(yīng)中斷的可能性了,也提高了CPU的利用率,可以作為該方法的有效補(bǔ)充。

用硬件實(shí)現(xiàn)雙向通訊

  上述這兩種解決方法在一定程度上給編程人員帶來(lái)不便,主要原因是由軟件來(lái)完成MCU和BC7281A之間的通訊,如均用硬件實(shí)現(xiàn),對(duì)編程人員來(lái)說(shuō)完全可以將BC7281A完全看成“黑匣子”,就會(huì)給編程人員提供更大的自由度,從這種意義上說(shuō),也提高了性能。目前標(biāo)準(zhǔn)的串行接口或串行總線有SPI接口、I2C總線、MicroWire接口、MSBus總線、1-Wire總線等?,F(xiàn)在很多單片機(jī)都支持這些標(biāo)準(zhǔn)串行接口或總線(即使沒(méi)有也可以用軟件實(shí)現(xiàn)),如MicroChip公司的PIC16F87X系列單片機(jī)就同時(shí)支持SPI接口和I2C總線。采用其中的某一種接口或總線后,MCU與數(shù)碼管顯示及鍵盤掃描控制芯片的通訊協(xié)議由硬件實(shí)現(xiàn),幾乎不占用CPU的資源,也不必考慮上述提到的情況,使用起來(lái)更加方便。

結(jié)語(yǔ)

  BC781A價(jià)格低廉,功能強(qiáng)大,外圍電路少,軟件控制簡(jiǎn)單,使用方便;但在應(yīng)用時(shí)會(huì)出現(xiàn)數(shù)據(jù)傳送錯(cuò)誤等問(wèn)題,可以使用多種軟硬件方法解決。在機(jī)載多通道掃描儀(MAMS)黑體定標(biāo)源系統(tǒng)中采用了本文提出的調(diào)整程序結(jié)構(gòu)的解決方法,該系統(tǒng)于日前進(jìn)行航空試驗(yàn),試驗(yàn)結(jié)果表明,系統(tǒng)在較惡劣的電磁環(huán)境中,仍能可靠運(yùn)行,效果令人滿意。

參考文獻(xiàn):

1. BC7281A 128段LED顯示及64鍵鍵盤控制芯片數(shù)據(jù)手冊(cè). 北京凌志比高公司.



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉