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