单片机混合编程的基本方式

一、单片机混合编程的基本方式

单片机C语言和汇编语言混合编程可分为汇编中调用C51函数和C51程序中引用汇编,而在C51程序中使用汇编语言又包括两种情况:C51程序调用汇编程序模块的变量和函数以及直接嵌入式汇编。本节将介绍如何进行汇编语言和C语言的混合编程,以及如何修改由C程序变异后产生的汇编代码,从而得到精确地控制时间。

1.增加段和局部变量

在把汇编程序加入到C程序之前,必须使汇编程序和C程序一样具有明确的边界、参数、返回值和局部变量。在编写汇编功能函数时仿照C函数,并按照C51的参数传递标准,则程序就会有很好的可读性,并且易于维护,很容易和C语言编写的程序进行连接。

2.函数声明

为了使汇编程序段和C程序能够兼容,必须为汇编语言编写的程序段指定段名并进行定义。如果要在它们之间传递函数,则必须保证汇编程序用来传递函数的存储区和C函数使用的存储区一致。被调用的汇编函数不仅要在汇编程序中使用伪指令以使CODE选项有效,并声明为可再定义的段类型,而且还要在调用它的C语言主程序中进行声明。函数名转换规律见表9-6。

表9-6 函数名转换规律

【例9-8】一个典型的可被C程序调用的汇编函数。

上例中,汇编文件的格式化比较简单,只需给存放功能函数的段指定一个段名。由于程序存放于代码区内,段名的开头为PR,这两个字符是为了和C51的内部命名转换兼容,命名转换规律见表9-7。

表9-7 存储区命名转换规律

RSEG为段名的属性,表示连接器可把该段放置在代码区的任意位置。当段名确定后,文件必须声明公共符号,如上例中的PUBLIC CLRMEM语句,然后编写代码。对于有传递参数的函数必须符合参数的传递规则,Keil C51在内部RAM中传递参数时一般都用当前寄存器组,当函数接收3个以上参数时,存储区中的一个默认段将用来传递剩余的参数。详细的参数传递规则请参看本章第一节的寄存器参数传递部分。