官术网_书友最值得收藏!

3.4 MCS-51單片機的C程序設計

盡管匯編語言在控制底層硬件方面有著良好的性能且執行效率高,但其本身是一種低級語言,編程效率低,可移植性和可讀性差,維護不方便。由于C語言可以采用模塊化的思想進行編程,很多軟件庫、函數等編寫好后可以重復利用,并且能方便地移植到其他工程中,因此采用C語言開發MCS-51單片機的軟件,可以加快軟件開發進度。

3.4.1 C51語言與標準C語言的簡單比較

針對MCS-51單片機軟件開發的C51語言是標準C語言的擴展,使用專用的編譯器,如Keil與Franklin等開發工具。盡管C51語言與標準C語言在語法格式上基本相同,但C51語言大多數擴展功能都是針對MCS-51單片機CPU的,主要有5類:存儲類型及存儲區域、存儲模式、存儲器類型聲明、變量類型聲明、位變量。

1.存儲類型及存儲區域

MCS-51單片機的程序存儲器最大外擴64KB,外部數據存儲器最多可擴展64KB,外部存儲器地址范圍均為0000H~0FFFFH。內部數據存儲器可用以下關鍵字說明。

data:直接尋址區,為內部數據存儲器的低128字節00H~7FH。

idata:間接尋址區,包括整個內部數據存儲器的256字節00H~0FFH。

bdata:可位尋址區,20H~2FH。

需要注意的是,MCS-51單片機的程序存儲器總共不超過64KB,而數據存儲器外部最多可以擴展64K,同時內部的數據存儲器也可以使用,只是訪問指令不同(訪問外部用MOVX指令,訪問內部使用MOV指令),因此MCS-51單片機的數據存儲器最多可以使用的空間為內部數據存儲器+64KB。

2.存儲模式

MCS-51單片機采用C51語言進行軟件開發時,需要確定其存儲模式。存儲模式決定了沒有明確指定存儲類型的變量、參數等的默認存儲區域,共有三種模式。

① Small模式:所有默認變量、參數均裝入內部數據存儲器,優點是訪問速度快,缺點是空間有限,只適用于小程序。

② Compact模式:所有默認變量均位于外部數據存儲器的一頁(256B),具體哪一頁可由P2端口指定,在STARTUP.A51文件中說明,也可用pData指定,優點是空間比Small模式寬裕,速度比Small模式慢,比Large模式快,是一種中間狀態。

③ Large模式:所有默認變量可放在多達64KB的外部數據存儲器中,優點是空間大,可存變量多,缺點是速度較慢。

3.存儲類型聲明

變量或參數的存儲類型可由存儲模式指定默認類型,也可由關鍵字直接指定。各類型分別用code、Data、iData、xData、pData說明,例:

4.變量類型聲明

C51語言提供以下幾種擴展數據類型。

① bit:位變量值,為0或1;

② sbit:從字節中定義的位變量,值為0或1;

③ sfr sfr:字節地址,0~255;

④ sfr16 sfr:字地址,0~65535。

其余數據類型(如char、short、int、long、float等)與標準C語言相同。

5.位變量與聲明

bit型變量可用于變量類型、函數聲明、函數返回值等,存儲于內部數據存儲器的20H~2FH。位變量必須在MCS-51單片機內部可位尋址單元(20H~2FH和SFR)中,否則程序會出錯。針對特殊功能寄存器,可做如下定義:

3.4.2 MCS-51單片機的軟件開發工具與程序設計

1.開發工具

Keil軟件是單片機編程工具。Keil集成開發環境可以對MCS-51單片機進行編程,如創建源程序、輸出執行文件、代碼測試、仿真等。

Keil軟件結構如圖3-1所示,提供對MCS-51單片機的匯編程序、C語言程序的編譯、連接、重定位、HEX文件創建、調試等功能,所有這些功能集成到Windows應用程序μVision3集成開發環境中,主要功能說明如下。

圖3-1 Keil軟件結構

1)μVision3 IDE

μVision3 IDE集成了項目管理器、文件及代碼編輯器、基本的設置選項、生成工具、在線幫助等。利用μVision3創建源代碼(匯編文件或者C文件),并把這些文件添加到一個項目文件中,此時μVision3 IDE通過項目文件可以對源代碼執行編譯、匯編、連接等命令,實現對應用程序的設計與開發。

2)C51編譯器和A51匯編器

程序源代碼由μVision3 IDE創建,通過C51編譯器進行編譯(C文件),或者A51匯編器進行匯編(匯編文件)。編譯器和匯編器從源代碼生成可重定位的目標文件。Keil C51編譯器完全遵照標準C語言,支持C語言的所有特性。另外,Keil A51匯編器支持51系列單片機的全部指令集。

3)LIB51庫管理器

LIB51庫管理器允許從由編譯器或匯編器生成的目標文件創建目標庫,庫是一種被特別地組織過并在以后可以被重復使用的對象模塊。當連接器處理一個庫時,只有那些被使用的目標模塊才能被真正使用。

4)BL51連接器

BL51連接器利用從庫中提取的目標模塊和由編譯器或匯編器生成的目標模塊,創建一個絕對地址的目標模塊,一個絕對地址目標模塊或文件包含不可重定位的代碼和數據,將編譯生成的OBJ文件與庫文件連接定位生成絕對目標文件(ABS文件),所有的代碼和數據被安置在固定的存儲器單元中。此絕對地址目標文件可以用來寫入EPROM或其他存儲器件、由μVision3調試器用來模擬和調試、由仿真器用來測試程序。

經編譯后,工程中的源程序包含的.c、.asm、.h的多個模塊分別生成各自的OBJ文件。連接時,這些文件全列于目標文件列表中,作為最后輸入存儲器的文件,如果還使用了庫文件內容,則也要與庫文件(LIB文件)相連接,庫文件也必須列在其后。Outputfile為輸出文件名,默認為第一模塊名,后綴為.ABS。連接控制指令提供了連接定位時的所有控制功能。Commandfile為連接控制文件,包括了目標文件列表、庫文件列表及輸出文件、連接控制命令。

5)OH51目標文件轉換器

OH51目標文件轉換器能夠把編譯、連接好的目標文件轉換成能寫入EPROM中的HEX文件,也就是最后生成的機器碼文件。

6)μVision3調試器

μVision3調試器包含一個高速模擬器,能夠模擬整個51系列單片機系統程序,包括片上外圍器件和外部硬件。從選擇器件開始,這個器件的特性將自動配置。μVision3調試器為在實際目標板上測試程序提供了以下方法:

● 安裝+Monitor-51到目標系統,并且通過接口下載程序代碼;

● 利用高級的GDIAGDI接口,把μVision3調試器綁定到目標系統。

7)Monitor-51

μVision3調試器支持用Monitor-51進行目標板調試,此監控程序駐留在目標板的存儲器里,它利用串口和μVision3調試器進行通信,利用Monitor-51、μVision3調試器可以對目標硬件實行源代碼級的調試。Monitor-51對硬件有如下要求:硬件系統只能為51系列單片機的CPU。

帶5KB外部程序存儲器(從0地址開始),存放Monitor-51程序、256B的外部數據存儲器以及5KB的跟蹤緩沖區。此外,外部數據存儲器必須足夠容納所有應用程序代碼及數據,并且所有外部數據存儲器能一致訪問XDATA與Code空間。要使用一個定時器作為波特率發生器供串口使用,6B的空余堆??臻g提供給用戶作為測試用。

8)RTX51實時操作系統

RTX51是一個用于8051系列處理器的多任務實時操作系統,RTX51可以簡化那些復雜且時間要求嚴格的軟件設計工作,有兩個RTX51版本:RTX51 Full和RTX51 Tiny。

RTX51 Full使用四個任務優先權完成同時存在時間片輪轉調度和搶先的任務切換,RTX51工作在與中斷功能相似的狀態下,信號和信息可以通過郵箱系統在任務之間互相傳遞,可以從存儲池中分配和釋放內存,也可以強迫一個任務等待中斷超時或者從另一個任務或中斷發出信號或信息。

RTX51 Tiny是RTX51的子集,它可以很容易地在沒有任何外部存儲器的單片8051系統上運行,RTX51 Tiny僅支持時間片輪轉任務切換和使用信號進行任務切換,不支持搶先式的任務切換,不包括消息歷程,沒有存儲器池分配程序。

2.程序設計

采用Keil軟件進行程序開發的流程如下:首先,創建一個工程,從器件庫中選擇目標器件,進行工具設置;其次,用C語言或匯編語言編寫源程序;然后,用工程管理器生成應用,修改源程序中的錯誤;最后,對代碼進行測試、連接和應用。

本小節通過一個實例來說明C51程序的開發過程。使用Keil軟件的步驟如下。

① 創建一個新工程,選擇Project→New Project菜單命令,出現對話框,將工程的描述內容存放到myproj.uv2文件中,如圖3-2所示。

圖3-2 創建新工程

② 工程建立后,會出現一個器件選擇對話框,如圖3-3所示,大多數MCS-51單片機的內核和編程基本一致,都采用Intel公司的51單片機內核,因此這里選擇Atmel公司的51單片機系列中的AT89C51就可以了。

圖3-3 器件選擇對話框

③ 用C語言或匯編語言創建源程序。

選擇File→New菜單命令來新建一個源文件,打開一個空的編輯窗口,輸入源代碼,把此文件保存為main.c。

【例3.8】 創建一個源代碼文件。

創建了源文件后,就可以把它加入新建的工程。例如,可以右擊文件組來彈出快捷菜單,選擇菜單中的Add Files命令,打開相應對話框,從對話框中選擇生成的文件main.c。程序加入后,工程框架建立完成,但是還要進行相應的配置才能完成后續工作,如設置文件的編譯方式等,如圖3-4所示。選擇ProjectOptions for Target‘Target 1’菜單命令,就會彈出一個對話框,設置文件和工程的編譯屬性,設置完成后可以對工程的程序進行編譯。

④ 用項目管理器對源代碼進行編譯。

單擊工具欄上的Build圖標,可以編譯所有的源文件并生成應用。當源代碼中有語法錯誤時,μVision3將在Output Window的Build頁顯示這些錯誤和告警信息,雙擊一個信息將打開此信息對應的文件并定位到語法錯誤處,如圖3-5所示,左圖為源代碼中的錯誤信息,修改源代碼,編譯成功后生成右圖,包含代碼長度、HEX文件名等信息。

圖3-4 新工程配置

圖3-5 編譯結果

⑤ 調試和應用。

編譯成功后,就可以開始調試和應用了。調試有兩種方式,一種是軟件模擬,這樣不需要把程序下載到目標板上,通過μVision3的內部模擬器即可模擬;另一種是硬件模擬,須創建一個HEX文件并下載到內部程序存儲器。HEX文件是ASCII文本文件,全部由可打印的ASCII字符組成(可以用“記事本”程序打開)。在HEX文件中,每一行是一條記錄,由十六進制數組成的機器碼或者靜態數據組成。HEX文件常用來保存單片機或其他處理器的目標程序代碼。如圖3-6所示為HEX文件設置。

單片機程序編寫好后,編譯通過,則可下載到實際的目標板上進行測試。目前,很多編程工具支持單片機程序下載,如Keil仿真器、南京偉福公司的偉福仿真器。之后,使單片機重新復位,下載的程序即可正常運行。

圖3-6 HEX文件設置

主站蜘蛛池模板: 墨玉县| 策勒县| 英吉沙县| 措美县| 遂宁市| 饶河县| 永康市| 乌兰浩特市| 浦县| 泸溪县| 阳春市| 林口县| 阿坝| 晋州市| 两当县| 财经| 大姚县| 宁远县| 庆安县| 行唐县| 镇原县| 镇赉县| 株洲县| 互助| 定日县| 含山县| 泰来县| 濉溪县| 乐亭县| 响水县| 万全县| 靖州| 连江县| 京山县| 金坛市| 枞阳县| 通许县| 团风县| 河津市| 来宾市| 高陵县|