C51語言

單片機C51語言是由C語言繼承而來的。和C語言不同的是,C51語言運行於單片機平台,而C語言則運行於普通的桌面平台。C51語言具有C語言結構清晰的優點,便於學習,同時具有彙編語言的硬體操作能力。對於具有C語言編程基礎的讀者,能夠輕鬆地掌握單片機C51語言的程式設計。

主要特點

單片機C51語言兼備高級語言與低級語言的優點。

單片機C51實驗板 單片機C51實驗板

語法結構和標準C語言基本一致,語言簡潔,便於學習。

運行於單片機平台,支持的微處理器種類繁多,可移植性好。對於兼容的8051系列單片機,只要將一個硬體型號下的程式稍加修改,甚至不加改變,就可移植到另一個不同型號的單片機中運行。

具有高級語言的特點,儘量減少底層硬體暫存器的操作。

單片機C51語言提供了完備的數據類型、運算符及函式供使用。

C51語言是一種結構化程式設計語言,可以使用一對花括弧“{}”將一系列語句組合成一個複合語句,程式結構清晰明了。

C51語言代碼執行的效率方面十分接近彙編語言,且比彙編語言的程式易於理解,便於代碼共享。

“Hello world”程式

編程技巧

C語言是一種高級程式設計語言,它提供了十分完備的規範化流程控制結構。因此採用C51語言設計單片機套用系統程式時,首先要儘可能地採用結構化的程式設計方法,這樣可使整個套用系統程式結構清晰,易於調試和維護。對於一個較大的程式,可將整個程式按功能分成若干個模組,不同的模組完成不同的功能。對於不同的功能模組,分別指定相應的入口參數和出口參數,而經常使用的一些程式最好編成函式,這樣既不會引起整個程式管理的混亂,還可增強可讀性,移植性也好。

在程式設計過程中,要充分利用C51語言的預處理命令。對於一些常用的常數,如TRUE,FALSE,PI以及各種特殊功能暫存器,或程式中一些重要的依據外界條件可變的常量,可採用宏定義"#define"或集中起來放在一個頭檔案中進行定義,再採用檔案包含命令"#include"將其加入到程式中去。這樣當需要修改某個參量時,只須修改相應的包含檔案或宏定義,而不必對使用它們的每個程式檔案都作修改,從而有利於檔案的維護和更新。現舉例說明如下:

例1 對於不同的單片機晶振,程式取不同的延時時間,而且可根據外界條件的變化修改延時時間的長短。對於這樣的程式,可利用宏定義和條件編譯來實現。程式如下:

#define flag 1

#ifdef flag==1

#define fosc 6M

delay=10;

#elif flag = = 0

#define fosc 8M

delay=12;

#else

#define fosc 12M

delay=20;

#endif

main()

{

for(I=0;I

}

這樣源程式不作任何修改就可適用於不同時鐘頻率的單片機系統,並可根據情況的不同取不同的delay值,完成不同的目的。

混合編程

C51編譯器能對C語言源程式進行高效率的編譯,生成高效簡潔的代碼,在絕大多數場合採用C語言編程即可完成預期的目的。但有時為了編程直觀或某些特殊地址的處理,還須採用一定的彙編語言編程。而在另一些場合,出於某種目的,彙編語言也可調用C語言。在這種混合編程中,關鍵是參數的傳遞和函式的返回值。它們必須有完整的約定,否則數據的交換就可能出錯,例 C語言程式與彙編語言程式的調用,其子程式如下:

PUBLIC AD ;入口地址

SEG_AD SEGMENT CODE ;程式段

RSEG SEG_AD

USING 0

AD: MOV R6,#00

MOV R7,#00

SETB P1.1

ACALL DELAY

CLR P1.1

ACALL DELAY

MOV R0,#10

RR0: SETB P1.2

NOP

CLR P1.2

DJNZ R0,RR0

ACALL DELAY

MOV 30H,R6 ;A/D轉換的高

;兩位保存在R6中

ACALL CIR

MOV R6,30H

SETB P1.2

NOP

CLR P1.2

MOV 30H,R6

ACALL CIR

MOV R6,30H

MOV R0,#8 ;A/D轉換的低

;8位保存在R7中

RR2: SETB P1.2

NOP

CLR P1.2

MOV 30H,R7

ACALL CIR

MOV R7,30H

DJNZ R0,RR2

RET

CIR: CLR C

MOV C,P1.0

MOV A,30H

RLC A

MOV 30H,A

RET

END

在以上程式中,函式的返回值為一無符號整型數,根據調用規則,返回值的高位必須在R6中,低位在R7中,這樣才可保證數據的傳遞不出錯。另外,在調用過程中,必須注意暫存器的入棧。這樣在以後用到A/D轉換時,在C語言中調用彙編語言子程式AD()即可。

數據類型

在C51語言中,每個變數或者常量在使用前都必須指明數據類型。

相關詞條

相關搜尋

熱門詞條

聯絡我們