单片机的C51语言具有高级语言和低级语言的优点。
语法结构与标准C语言基本相同,语言简单易学。
它运行在单芯片平台上,支持各种微处理器,具有良好的可移植性。
对于兼容的8051系列MCU,只要稍微修改或更改一个硬件型号下的程序,就可以将其移植到另一个MCU。
借助高级语言功能,可最大限度地减少底层硬件寄存器的运行。
MCU 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延迟= 20; #endif main(){for(I = 0; I< DELAY; I ++);< FONT>这样的源程序可以应用于具有不同时钟频率的单片机系统而无需任何修改,并且可以根据不同的情况采用不同的延迟值来完成不同的目的。
C51编译器可以有效地编译C源程序,生成高效简洁的代码,并在大多数情况下使用C编程来实现预期目的。
但有时为了编程直观或某些特殊的地址处理,您还必须使用某种汇编语言编程。
在其他情况下,汇编语言也可以出于某种目的调用C语言。
在这种混合编程中,关键是参数的传递和函数的返回值。
它们必须有完整的约定,否则数据交换可能是错误的。
例如,C程序和汇编语言程序调用,子程序如下:PUBLIC AD;入境地址SEG_AD SEGMENT CODE;块RSEG SEG_AD使用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, RET END在上面的程序中,函数的返回值是无符号整数。
根据调用规则,返回值的高值必须是R6,在R7中低,在这种有保证的传送数据之前没有错误。
另外,在通话过程中,你必须注意寄存器的堆栈。
这样,当稍后使用A / D转换时,可以用C语言调用汇编语言子程序AD()。
在C51语言中,每个变量或常量必须在使用之前指示数据类型。