江蘇省徐州醫(yī)藥高等職業(yè)學校 鄧如兵
C語言是一種高級計算機編程語言,在51系列單片機中通常使用專用的C51語言為單片機編程,C51能夠直接操作硬件資源,提高了編程效率。
計算機語言分為低級語言和高級語言,單片機作為計算機系列中的專用計算機,在開發(fā)單片機應用系統(tǒng)時,也可以采用低級語言和高級語言。單片機常用的應用系統(tǒng)開發(fā)語言是匯編語言和C語言。匯編語言有其代碼短小、運行快速的優(yōu)點,但是有一個讓編程人員難以掌握的缺點。本文以51系列單片機為例,介紹C語言在單片機中的應用方法。
C51是一種用于51系列單片機編程的C語言,具備高級程序設計語言的特點,同時能夠直接操作硬件資源。C語言的三種基本結構包括順序結構、分支結構和循環(huán)結構;分支結構有雙分支結構和多分支結構;循環(huán)結構有當型循環(huán)結構、直到型循環(huán)結構。單片機程序設計也離不開這三種基本結構的運用。
單片機通常是為實時控制應用而設計制造的,把中央處理部件、存儲器和各種輸入/輸出接口等集成在一塊芯片上。Intel公司設計的51系列單片機是單片機中應用最廣泛的經典機型。
在利用單片機處理應用需求的時候,通常需要進行算法描述,可以用自然語言、偽代碼、傳統(tǒng)的流程圖、N-S盒圖和PAD圖來表示。一般習慣用傳統(tǒng)的流程圖、N-S盒圖和PAD圖來表達程序算法。這三種算法流程可用順序結構、雙分支結構、多分支結構、多分支結構、直到型循環(huán)結和當型循環(huán)結構表達?;窘Y構圖如圖1、2、3所示。
在單片機算法設計中,可以根據應用的需求,合理選擇傳統(tǒng)的流程圖、N-S盒圖和PAD圖來繪制程序算法流程圖。簡單的算法描述,通常選擇傳統(tǒng)的流程圖就可以完成。而在復制算法表達上,適合采用結構化層次分明的N-S盒圖和PAD圖來繪制程序算法,結合算法表達,實際編程最好采用模塊化、結構化的方法。
圖1 傳統(tǒng)的流程圖的基本控制結構順序結構
圖2 N-S盒圖的順序結構
圖3 PAD圖的順序結構
表1 程序結構排列表
程序結構排列見表1。程序結構按順序依次是頭文件引入、宏定義(可選)、自定義函數聲明(可選)、主函數(必選)、普通子函數(可選)、中斷子函數(可選)、中斷子程序(可選)。保存好的程序文件擴展名為*.c,頭文件擴展名為*.h。
部分源代碼示例如下:
多任務實時操作系統(tǒng)可選用rtx-51 tiny系統(tǒng),實時操作系統(tǒng)引入到單片機程序設計中,rtx-51 tiny系統(tǒng)沒有主函數,主函數就是任務0函數,程序從任務0開始執(zhí)行。其它任務要寫成無限循環(huán)的形式。中斷子函數寫法可以采用常規(guī)寫法,但是為了防止占用系統(tǒng)中斷,最可靠的寫法是在中斷函數里只是把信號發(fā)給另外一個任務,讓另外一個任務來處理中斷應用服務。
部分源代碼示例如下:
在Keilc軟件中做好對應的選項設置,編譯后即可生成目標代碼。編程時候要注意現場保護和工作寄存器空間的分配,防止寄存器沖突。
部分源代碼示例如下:
在單片機集成開發(fā)工具中,利用C語言寫出應用程序,再使用編譯器排除錯誤,再把寫好的代碼編譯為機器碼,同時生成HEX文件,最后利用編程器或者在線編程軟件把HEX可執(zhí)行文件寫入單片機內。寫入的代碼在樣機中進行運行調試,成功后就可以批量生產。
為了提高單片機應用系統(tǒng)的開發(fā)效率,通常可用利用proteus軟件來仿真處理器及其外圍電路,把硬件電路利用仿真軟件來進行模擬仿真;結合程序開發(fā)軟件,能夠對設計項目反復進行修改和測試,待設計項目功能實現后再對樣機進行實機調試。
51系列單片機常用的編程軟件是keil軟件,提供了包括C編譯器、宏匯編、連接器、庫管理和仿真調試器等在內的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。它支持眾多不同公司的51架構的芯片,它的界面和常用的微軟Vc++的界面相似,界面友好,易學易用。
Keil uVision編程中的常見錯誤:C51編譯器識別錯誤類型有三種。致命錯誤:偽指令控制行有錯,訪問不存在的源文件或頭文件等。語法及語義錯誤:語法和語義錯誤都發(fā)生在源文件中。
總結:C語言的應用,極大的方便了單片機應用系統(tǒng)的開發(fā)。在單片機中編程常用的方法是直接采用C語言編寫系統(tǒng)和應用程序,還可以借用專用的操作系統(tǒng)內核構建應用系統(tǒng),或者有特殊要求的情況下,可以采用嵌入匯編語言進行混合編程。