<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

BC7281A串行通訊的解決方案

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

2004年7月A版


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

關(guān)鍵詞系統;;

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

典型應用電路

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

BC7281A與MCU之間的通訊

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

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

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

SEND:   CLR        CLK

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

WAIT1:        JB        DAT,SEND    ; DAT

              CLR        CLK             ;建立通訊

              SETB        CLK

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

              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接收數據子程序

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

                     SETB        CLK

WAIT3:        JB        DAT,WAIT3 ;建立通訊

                     CLR        CLK ; CLK ,

                     SETB        CLK

                     MOV        BIT_COUNT,#8

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

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

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

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

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

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

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

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

解決方法

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

調整程序結構

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

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

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

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

結語(yǔ)

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

參考文獻:

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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>