新聞中心

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

BC7281A串行通訊的解決方案

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

2004年7月A版


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

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

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

典型應(yīng)用電路

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

BC7281A與MCU之間的通訊

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

  由于BC7281A的2線串行接口是自行規(guī)定的,一般MCU都不具備此通訊接口,但可以采用軟件實現(xiàn)。MCU發(fā)送指令或數(shù)據(jù)到BC7281A子程序為SEND,MCU接收數(shù)據(jù)子程序為RECEIVE,采用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ā)送握手請求脈沖

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ā)送握手請求脈沖

                     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

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

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

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

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

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

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

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

解決方法

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

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

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

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

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

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

結(jié)語

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

參考文獻:

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



評論


相關(guān)推薦

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

關(guān)閉