單片�C51語言是由C語言繼承而來�。和C語言不同的是,C51語言運行于單片機平臺,而C語言則運行于普通的桌面平臺。C51語言具有C語言結構清晰的優(yōu)點,便于學習,同時具�匯編語言的硬件操作能力。對于具有C語言編程基礎的讀�,能夠輕松地掌握單片機C51語言的程序設計�
單片機C51語言�?zhèn)湔Z言與低級語言的優(yōu)��
語法結構和標準C語言基本一�,語言簡潔,便于學��
運行于單片機平臺,支持的微處理器種類繁多,可移植性好。對于兼容的8051系列單片機,只要將一個硬件型號下的程序稍加修�,甚至不加改變,就可移植到另一個不同型號的單片機中運行�
具有語言的特�,盡量減少底層硬件寄存器的操��
單片機C51語言提供了完備的�(shù)�(jù)類型、運算符及函�(shù)供使��
C51語言是一種結構化程序設計語言,可以使用一對花括號“{}”將一系列語句組合成一個復合語�,程序結構清晰明了�
C51語言代碼�(zhí)行的效率方面十分接近匯編語言,且比匯編語言的程序易于理�,便于代碼共享�
“Hello world”程�
C語言是一種程序設計語言,它提供了十分完備的�(guī)范化流程控制結構。因此采用C51語言設計單片機應用系�(tǒng)程序�,首先要盡可能地采用結構化的程序設計方法,這樣可使整個應用系�(tǒng)程序結構清晰,易于調試和維護。對于一個較大的程序,可將整個程序按功能分成若干個模塊,不同的模塊完成不同的功能。對于不同的功能模塊,分別指定相應的入口參數(shù)和出口參�(shù),而經常使用的一些程序編成函�(shù),這樣既不會引起整個程序管理的混亂,還可增強可讀�,移植性也��
在程序設計過程中,要充分利用C51語言的預處理命令。對于一些常用的常數(shù),如TRUE,F(xiàn)ALSE,PI以及各種特殊功能寄存器,或程序中一些重要的依據(jù)外界條件可變的常�,可采用宏定�"#define"或集中起來放在一個頭文件中進行定義,再采用文件包含命令"#include"將其加入到程序中�。這樣當需要修改某個參量時,只須修改相應的包含文件或宏定義,而不必對使用它們的每個程序文件都作修�,從而有利于文件的維護和更新?,F(xiàn)舉例說明如下�
�1 對于不同的單片機晶振,程序取不同的延時時�,而且可根�(jù)外界條件的變化修改延時時間的長短。對于這樣的程�,可利用宏定義和條件編譯來實�(xiàn)。程序如下:
#define flag 1
#ifdef flag==1
#define fosc 6M
delay=10;
#elif flag � � �
#define fosc 8M
delay=12;
#else
#define fosc 12M
delay=20;
#endif
main()
{
for(I=0;I
}
這樣源程序不作任何修改就可適用于不同時鐘頻率的單片機系統(tǒng),并可根�(jù)情況的不同取不同的delay�,完成不同的目的�
C51編譯器能對C語言源程序進行高效率的編譯,生成高效簡潔的代碼,在絕大多數(shù)場合采用C語言編程即可完成預期的目�。但有時為了編程直觀或某些特殊地址的處�,還須采用一定的匯編語言編程。而在另一些場�,出于某種目�,匯編語言也可調用C語言。在這種混合編程�,關鍵是參數(shù)的傳遞和函數(shù)的返回�。它們必須有完整的約定,否則�(shù)�(jù)的交換就可能出錯,� 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轉換的高
?。粌晌槐4嬖�6�
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
在以上程序中,函�(shù)的返回值為一無符號整型數(shù),根�(jù)調用�(guī)�,返回值的高位必須在R6�,低位在R7中,這樣才可保證�(shù)�(jù)的傳遞不出錯。另�,在調用過程中,必須注意寄存器的入棧。這樣在以后用到A/D轉換�,在C語言中調用匯編語言子程序AD()即可�
在C51語言�,每個變量或者常量在使用前都必須指明�(shù)�(jù)類型�
維庫電子�,電子知�,一查百��
已收錄詞�156528�