AT89C5131是一個基于52內核的單片機。AT89C5131的USB2.0全速從接口的結構如圖3所示,其包括USB D+/D-的接口緩沖,數字鎖相環,串行接口引擎(SIE)和通用功能接口(UFI)。其中數字鎖相環以單片機的時鐘為輸入,產生了USB接口其他部分所需的48MHz時鐘。串行接口引擎完成USB通信物理層NRZI碼的編碼與解碼,CRC生成以及校驗與糾錯。通用功能接口包含了一個雙端口的數據存儲器,其一端與串行接口引擎鏈接,另一端通過數據總線與單片機相連接,使單片機可以通過特殊功能寄存器完成對USB2.0從接口的控制與通信。
1 系統硬件設計
基于AT89C5131的通信和控制模塊主要完成以下功能:在通信方面,通過USB實現與計算機的通信,接收計算機對設備的控制命令和計算機發送的數據,并將設備的工作狀態發送給計算機,同時將計算機傳來的控制命令和數據通過SPI接口傳送到其他設備模塊,并收集其他設備模塊的狀態信息;在控制方面,AT89C5131負責收集設備控制顯示面板的控制命令,更新設備顯示狀態等。由于采用USB通信系統,AT89C5131除了能夠根據控制面板控制設備的運行,也能根據計算機的命令控制設備的運行,實現了對設備的雙重控制。該系統中AT89C5131的外圍連接如圖1所示。
?
1.1 AT89C5131的鍵盤端口特性及鍵盤設計
AT89C5131擁有一個允許與8×n矩陣鍵盤連接的鍵盤接口,其輸入均具有高或低電平可編程中斷能力。鍵盤接口與C51內核的通信通過3個特殊功能寄存器實現,分別是鍵盤電平選擇寄存器(KBLS)、鍵盤中斷使能寄存器(KBE)和鍵盤標志寄存器(KBF)。
AT89C5131的鍵盤輸入被設計為分享同一個中斷向量的8個獨立的中斷源,寄存器IEN1中的中斷使能位KBD允許鍵盤中斷全局的使能及不使能,根據KBLS每一位的值,每一個鍵盤輸入都有檢測出可編程電平的能力,然后鍵盤檢測就被反應到KBF中,而通過軟件使用KBE可以屏蔽中斷標志KBF.正是這樣的結構使得鍵盤排列可以從1×n延伸至8×n的矩陣,同時還使得P1輸入用于其他用途。
在該設計中,將4個鍵盤端口(P1.O,P1.2,P1.3,P1.4)及2個外部中斷端口(P3.2,P3.3)與控制面板上的6個按鍵相連;實現系統的內外、啟停、暫停繼續控制及參數組的選擇等功能。這6個端口都采用低電平觸發產生中斷。
1.2 USB各端口的特性及USB通信設計
AT89C5131的USB2.0全速從接口包含了7個終端點,其中0號終端點被配置成為默認的控制終端點。其他1~6號終端點都可以通過特殊寄存器配置為控制(Control),突發(Bulk),中斷(Interrupt)和周期性(Isochronous)模式。由于每一個終端點都由一組獨立的寄存器對該終端點進行控制、狀態識別和數據的存取,則如果將這些寄存器直接映射到51單片機的特殊功能寄存器地址空間顯然是容納不下的。因此,這7個終端點的7組寄存器在單片機的地址空間中其實使用的是同一組寄存器的地址,而通過一個特殊功能寄存器(UEPNUM)來選擇當前該組寄存器實際選擇的是哪個終端點的寄存器組,這樣就大大節省了所占用的地址空間,為集成其他特殊外設提供了可能。
在該設計中,PC機將數據通過USB傳給AT89C5131,傳輸完一次后AT89C5131向PC機回傳數據傳輸正確與否的標志,PC機可以根據收到的標志進行相應的操作。PC機向AT89C5131傳輸的數據主要是參數和控制命令兩種類型。為將其區分開來,使用USB的端口4和端口6接收這兩種數據。其中,端口4用來接收控制命令;端口6用來接收參數。相應地,控制命令的回傳使用端口5;參數的回傳使用端口3.為簡單起見,端口3~端口6均被配置為批量類型;端口3、端口5為IN端口;端口4、端口6為OUT端口。