寧志剛,尹軍利,李圣,夏云芝
(南華大學 電氣工程學院,湖南 衡陽)
單片機原理及應用是理論性和實踐性都較強的一門課程。通過該課程的學習,讓學生熟悉單片機的內部結構和工作原理,掌握單片機軟、硬件設計方法和技巧,提高學生的實踐動手能力,為單片機系統開發奠定基礎。為了達到這門課程的培養目標,必須重視實踐教學環節,構建適合該課程實踐培養需求的實驗教學模式[1]。單片機實驗通常采用實驗箱教學方式。實驗箱教學模式采用模塊連線方式,學生做完實驗后往往弄不清楚電路實際接線圖[2]。一個實驗通常在2個課時內完成。在有限的實驗時間內,學生要弄清楚實驗工作原理、編寫程序代碼、調試程序和完成系統調試,相當一部分同學不能按時保質保量完成。虛實結合的實驗模式能克服這種實驗模式的弊端。虛擬實驗不受時間、空間和實驗設備的限制,學生可以充分利用課余時間隨時隨地搭建虛擬的實驗電路圖、編寫和調試程序、完成軟硬件聯調。虛擬實驗是理想化的實驗模式,實物實驗往往跟這一模式不完全一致[3]。通過實物實驗,能夠提高學生的調試能力和排除實際故障能力[4]。虛實結合的實驗模式能夠結合虛擬實驗和實物實驗的優勢,提高實驗的教學效果[6]。本文以虛實結合的串行A/D轉換實驗為例,對虛實結合的實驗模式進行探索和實踐。
TLC549時序圖如圖1所示。TLC549具有I/O CLOCK時鐘信號和片選兩個控制輸入端。tsu是下降沿到I/O CLOCK上升沿的最小間隔時間,大約為1.4μs。ten是下降沿到DATA OUT輸出數據的最小間隔時間,大約為1.2μs。

圖1 TLC549時序圖
TLC549是8位逐次逼近式串行A/D轉換器。內部包含系統時鐘、采樣、保持、A/D轉換器、數據寄存器及控制邏輯電路。TLC549每25us重復一次“輸入—轉換—輸出”。當片選信號為高電平時,DATA OUT處于高阻態,此時I/O時鐘被禁止。當片選信號從高電平跳變為低電平時,前次A/D轉換結果的最高有效位MSB(A7)從DATA OUT端輸出。在接下來的7個I/O CLOCK周期的下降沿依次輸出前次A/D轉換結果的后7位(A6~A0),前7個I/O CLOCK周期結束后8位數據已經全部輸出。從第4個I/O CLOCK周期的下降沿開始進行本次A/D轉換采樣,采樣持續到第8個I/O CLOCK周期的下降沿。從第8個I/O CLOCK周期的下降沿開始進入保持狀態,開始進行本次A/D轉換。這時,片選信號必須變為高電平。該高電平至少保持17us,直到A/D轉換結束。否則,片選信號從高電平跳變為低電平,引起系統復位。
TLC549串行A/D轉換虛擬實驗主要包括搭建虛擬實驗平臺、編寫程序代碼、程序代碼分析、程序調試、軟硬件聯調等步驟。這部分工作在課前預習實驗時完成。
搭建的串行A/D轉換虛擬實驗平臺如圖2所示。實驗平臺主要包括主控模塊、TLC549串行A/D轉換模塊和顯示模塊。主控模塊控制器選用AT89C51單片機。AT89C51的引腳P20、P21和P22分別接TLC549串行A/D轉換器的數據輸出端SDO、時鐘信號SCLK和片選信號。A/D轉換器的VREF+接+5V電壓,VREF-接地;AIN為模擬信號輸入端,外接電壓變化范圍為0~5V。顯示模塊由6位數碼管、LED驅動芯片74LS245和緩沖器7407組成。6位數碼管采用動態顯示,由AT89C51的P1口提供段碼,P3口提供位選信號。

圖2 TLC549串行A/D轉換虛擬實驗平臺
根據TLC549時序圖,參照教材中TLC2543串行A/D轉換程序代碼[6],編寫TLC549串行A/D轉換程序代碼。這里主要介紹關鍵函數A/D轉換函數,其代碼如下:

因為TLC549是8位串行A/D轉換器,所以A/D轉換函數中的n取8。_nop_()是單周期指令。如果單片機的晶振頻率是12MHz,運行一條_nop_()指令,需要1us。時鐘信號高電平和低電平都采用兩條_nop_()指令進行延時,時鐘周期信號高電平寬度和低電平寬度都是2us。TLC549進行A/D轉換時,高電平至少保持17us。程序中變為高電平后,采用17條_nop_()指令進行延時。ADC函數和AD函數的數據類型是unsigned int,它對應的數據長度是16位。若A/D轉換結果是166,對應的二進制數是10100110。下面詳細分析A/D轉換結果串行輸出過程:1)片選信號下降沿,輸出A/D轉換結果最高位第8位A7(1),再左移1位,輸出二進制串變為10。2)第1個時鐘下降沿,輸出A/D轉換結果次高位第7位數據(0)。因為輸出數據位是0,輸出二進制串不變,還是10。然后左移1位,輸出二進制串變為100。3)第2個時鐘下降沿,輸出A/D轉換結果第6位數據(1),即100與0x01進行或運算,輸出二進制串變為101。然后左移1位,輸出二進制串變為1010。4)第3個時鐘下降沿,輸出A/D轉換結果第5位數據(0)。輸出二進制串不變,還是1010。然后左移1位,輸出二進制串變為10100。5)第4個時鐘下降沿,輸出A/D轉換結果第4位數據(0)。輸出二進制不變,還是10100。然后左移1位,輸出二進制串變為101000。6)第5個時鐘下降沿,輸出A/D轉換結果第3位數據(1),即101000與0x01進行或運算,二進制串變為101001。然后左移1位,輸出二進制串變為1010010。7)第6個時鐘下降沿,輸出A/D轉換結果第2位數據(1),即1010010與0x01進行或運算,二進制串變為1010011。然后左移1位,輸出二進制串變為10100110。8)第7個時鐘下降沿,輸出A/D轉換結果第1位數據(0)。輸出二進制串不變,還是10100110。然后左移1位,輸出二進制串變為101001100。這時候,A/D轉換結果已全部輸出,數據長度為9位。因為AD函數的數據長度是16位,9位數據還處于有效數據長度范圍之內。最終輸出數據還需要進行一次右移操作,輸出結果變為8位,對應地輸出二進制串為10100110(166)。
利用Keil C51軟件對程序代碼進行調試,將生成的.hex文件下載到AT89C51處理器當中,進行軟硬件聯調,運行的結果如圖2所示。
實物實驗采用浙江天煌科技實業有限公司研制的THGMU-1型多種單片機開發綜合實驗箱完成。實驗時利用實驗箱上的TLC549 A/D轉換器進行A/D轉換實驗,將THKL-C51單片機仿真器插到模塊的鎖緊插座中。采用USB線連接計算機與仿真器,計算機與單片機實驗系統之間采用串行通信方式。實驗系統的電位器提供模擬量輸入,模擬輸入電壓的取值范圍是0~5V左右。調節電位器旋鈕,顯示值隨著變化。旋鈕順時針旋轉時,可調電壓值增大。模擬量轉換成數字量后,采用LED數碼管顯示數字量。采用8P排線將單片機系統的P1和P3口分別連接8位數碼管段選端口JD1和位選端口JD2,8位數碼管采用動態顯示方式。單片機系統的P20、P21和P22引腳分別連接A/D轉換器的DATA、CLK和CS-549,A/D轉換器的模擬信號輸入端AIN連接電位器的可調電壓輸出端口。Proteus仿真系統與實驗箱單片機系統的位選地址分布不相同。只要修改位選地址,就可將程序代碼移植到單片機實驗箱實物實驗當中。實物實驗時,要嚴格按照實驗步驟進行實驗。否則,就會出現數據通信擁塞現象。實物實驗圖如圖3所示。

圖3 實物實驗圖
這種虛實結合的單片機實驗模式已成功應用于我校單片機實驗教學過程當中,是一種成功的實踐教學模式。在新冠疫情期間網絡在線教學過程當中,學生可先在家中完成虛擬實驗,返校后再補做實物實驗。這種實驗模式發揮了虛擬實驗和實物實驗的優勢,充分考慮學生的學習時間和學習空間,最大限度提高了實驗的教學效果,培養了學生的工程實踐能力和創新能力。