51單片機與ARINC429航空總線(xiàn)接口設計
1 DEI1016的主要功能
?。模牛桑保埃保妒牵模澹觯椋悖?Engineering Incorporated 生產(chǎn)的一種可支持ARINC429航空總線(xiàn)協(xié)議的串行接收、發(fā)送器件。該器件的主要功能如下:
●串行數據字長(cháng)為32或25位;
●串行數據速率為100kbps或12.5kbps;
●具有獨立的收、發(fā)電路;
●兩個(gè)獨立的接收器可直接與ARINC429總線(xiàn)接口;
●具有串/并接收數據轉換,和并/串發(fā)送數據轉換功能;
●對接收的數據可進(jìn)行奇偶狀態(tài)校驗;并可對發(fā)送數據奇偶狀態(tài)進(jìn)行設置;
●可自動(dòng)產(chǎn)生字與字之間的間隔;
●采用單一+5V供電。
2 DEI1016的工作原理
?。模牛桑保埃保兜囊_功能及特點(diǎn)以前已有介紹,現僅對該器件的工作原理作以描述。
2.1 DEI1016的復位及初始化
電路上電后,首先在MR引腳施加200μs的低電平脈沖以使DEI1016復位,然后把控制字寫(xiě)到16位數據總線(xiàn)上,這樣,在LDCW引腳施加低電平便可把控制字寫(xiě)入到控制字寄存器,爾后便可接收和發(fā)送數據。
2.2 DEI1016的數據發(fā)送過(guò)程
?。模牛桑保埃保兜臄祿l(fā)送時(shí)序如圖1所示。發(fā)送數據時(shí),首先應查詢(xún)TXR引腳是否為高電平,若是高電平,表明發(fā)送存儲器已空;此時(shí)置ENTX引腳為低電平可停止發(fā)送數據,并把要發(fā)送的數據寫(xiě)到16位數據總線(xiàn)上。之后,若要發(fā)送數據字1,則置LD1為低,LD2為高;若發(fā)送數據字2,則置LD1為高,LD2為低此時(shí)再查詢(xún)TXR引腳是否為低電平,若為低電平,表明發(fā)送數據已裝載到存儲器中,此時(shí)再置ENTX引腳為高電平即可發(fā)送數據。DEI1016的發(fā)送存儲器最多可裝載8個(gè)32位字長(cháng)的數據,DEI1016采用的是先進(jìn)先出的發(fā)送順序。
2.3 DEI1016的數據接收過(guò)程
?。模牛桑保埃保兜臄祿邮諘r(shí)序如圖2所示。當接收器1接收到數據后,系統會(huì )置DR1為低電平;而當接收器2接收到數據后,系統將置DR2為低電平。欲使接收器1將接收數據的字1送至16位數據總線(xiàn)上,應先置SEL為低電平,再置OE1為低電平且置OE2為高。而后再置SEL為高電平,便可將字2送至16位數據總線(xiàn)。要使接收器2的數據送至16位數據總線(xiàn)上,則置OE2為低電平,OE1為高電平即可。
表1 74LS373功能表
輸出控制OE | 使能G | 輸入D | 輸出Q |
L | H | H | H |
L | H | L | L |
L | L | X | Qo |
H | X | X | Z |
3?。粒裕福梗茫担才cDEI1016的接口設計
?。粒裕福梗茫担玻ǎ眨保肝晃⒖仄髋cDEI1016的16位數據總線(xiàn)進(jìn)行數據交換時(shí),必須先利用鎖存器來(lái)鎖存數據。其接口電路框圖見(jiàn)圖3。發(fā)送數據時(shí),U1先把要發(fā)送的數據分成低8位和高8位送出,并進(jìn)入U3、U4鎖存,爾后再把16位數據一同送至DEI1016U2 的數據總線(xiàn)上。U3、U4、U5、U6均選用74LS373芯片,它們的內部均由D鎖存器和三態(tài)輸出門(mén)組成,其功能表如表1所列。當OE為低電平,且G為高電平時(shí),輸出Q與輸入D之間為直通方式。而當OE為高電平,且G由高電平跳變?yōu)榈碗娖胶?D端輸入數據被D鎖存器鎖存,之后即使D端(P0口)輸入數據再發(fā)生變化,也不會(huì )影響已鎖存的數據。如果OE為低電平,系統將輸出原先鎖存的數據。為了鎖存低8位數據,需要由U1的WR和地址選通信號Y7(由譯碼器U7譯出)經(jīng)或非門(mén)U8去控制U3的G端。實(shí)際上,只有U1在執行寫(xiě)操作時(shí), WR和Y7才同時(shí)為低電平,而此時(shí)低8位數據才能被U3暫時(shí)鎖存。高8位數據的鎖存與此類(lèi)似M,U1的P3.4由高變低可打開(kāi)U3、U4的輸出門(mén),從而使U3、U4把數據送至U2的數據總線(xiàn),當U1的P1.3或P1.4由高變低以把16位數據裝入發(fā)送存儲器后,P3.4會(huì )由低變高,此時(shí)U3、U4輸出為高阻抗狀態(tài),但不會(huì )影響U2的數據輸出狀態(tài)。其發(fā)送程序如下:
mov?。洌穑簦?#e000h
mov a,#d1l ;取字1的低8位
movx @dptr,a ;把字1的低8位鎖入U3
mov?。洌穑簦?#c000h
mov a,#d1h ;取字1的高8位
movx @dptr,a ;把字1的高8位鎖入U4
clr p3.4 ;打開(kāi)U3、U4的輸出
nop
clr p1.3 ;字1數據裝入DEI1016
nop
setb p3.4 ;關(guān)閉U3、U4的輸出
setb p1.3
mov?。洌穑簦?#e000h
mov a,#d2l ;取字2的低8位
movx @dptr,a ;把字2的低8位鎖入U3
mov?。洌穑簦?#c000h
mov a,#d2h ;取字2的高8位
movx @dptr,a ;把字2的高8位鎖入U3
clr p3.4 ;打開(kāi)U3、U4的輸出
nop
clr p1.4 ;字2數據裝入DEI1016
nop
setb p3.4
setb p1.4
用U1接收數據,應將DR1、DR2及TXR經(jīng)與門(mén)U13接至U1的INT0,在INT0口產(chǎn)生中斷后,U1便執行讀操作,并通過(guò)RD和Y5控制U14、U15以讀入DR1、DR2及TXR的狀態(tài)。U2接收到數據或發(fā)送數據完畢后,即向U1的INT0口申請中斷,并在中斷程序中判斷DR1、DR2及TXR的狀態(tài)。TXR為低表明發(fā)送完畢,而DR1或DR2為低則表明已收到數據。此時(shí)可置P1.2(SEL)為低電平,同時(shí)也置P1.0(接DEI1016的OE1)或P1.1 接DEI1016的OE2 為低電平,以使字1的數據出現在數據總線(xiàn)上,而使P1.0、P1.1經(jīng)U11異或后輸出以使U5、U6的G端為高電平,從而把數據鎖入U5、U6。由于RD分別與Y7、Y6相或后的輸出是與U5、U6的OE門(mén)相連接的,因此,U1 執行讀操作時(shí),應先后打開(kāi)U5、U6的OE門(mén)來(lái)把數據讀入。其接收程序如下:(以接收器1為例)。
clr p1.2 ;置DEI1016的SEL=0,讀字1
clr p1.0 ;置DEI1016的/OE1=0
setb p1.1 ;置DEI1016的/OE2=1
nop
mov dptr,#e000h
movx a,@dptr ;把字1的低8位讀入
mov 10h,a
mov dptr,#c000h
movx a,@dptr ;把字1的高8位讀入
mov 11h,a
setb p1.2 ;置DEI1016的SEL=1,讀字2
nop
mov dptr,#e000h
movx a,@dptr ;把字2的低8位讀入
mov 12h,a
mov dptr,#c000h
movx a,@dptr ;把字2的高8位讀入
mov 13h,a
setb p1.0 ;置DEI1016的/OE1=1
setb p1.1 ;置DEI1016的/OE2=1
setb p1.2 ;置DEI1016的SEL=1
DEI1016的兩路接收可能產(chǎn)生同時(shí)接收的現象。即在上述兩路共用一個(gè)中斷源時(shí),如果某一路申請中斷已進(jìn)入接收程序,那么另一路同時(shí)接收的數據就可能被屏蔽。解決方法是:進(jìn)入中斷程序后,在接收數據過(guò)程中再查詢(xún)另一路DR的狀態(tài)。當然,如果每路單獨使用一個(gè)中斷源,效果將會(huì )更好。
4 結束語(yǔ)
實(shí)際上,上述AT89C52與DEI1016的接口電路經(jīng)改進(jìn)也可以應用到其它16位數據總線(xiàn)接口的電路中,而如果用ISP器件替代鎖存器及其門(mén)電路,還可大大減小電路板的面積。
評論