C语言调用汇编语言程序一般有两种方法,一种是对汇编函数智等的定义来使用C语言,但是在函数的内部是通过#pragma asm和#pragma endasm关键字来写入汇编程序;另一种方式是将所有与函数有关的代码都用汇编来实现,这些汇编代码存储为单独的文件,以。A51和。ASM为文件后缀名,并将其添加到项目中,然后在要调用这些汇编程序的C文件中使用exter关键字来定义函数原型,这样就可以直接对其进行调用了。这里通过一个简单的例子介绍一下第一种调用方法。
例:在主程序中调用一个简单的汇编语言延时子程序。
#pragma SRC //这个语句加在程序开头。
main() {…… //C语言主程序delay();…… //C语言主程序}
void delay (void) {//汇编语言子程序#pragma asm//这条语句加在程序被调用汇编开头…… //汇编语言编写的程序#pragma endasm//这条语句加在程序被调用汇编末尾}
四、C51编程的几个注意事项
1.关于设置指针SP的问题编译器在把所有变量和缓冲区赋予地址后,自动把最后一个字节开始的地方作为SP的开始位置,体现了C51的优越性,很多事情在编译时就完成了。
2.data、idata、xdata、pdata的区别data:内部RAM的128个字节,可以用aCC直接读写,速度最快,生成的代码也最小。
idata:内部RAM的256个字节,其中前128和data的128完全相同,只是寻址方式不同。
xdata:外部扩展RAM,64k,用DPTR访问。
pdata:分页寻址外部扩展RAM,高8位在P2口中。
3.startup.a51的作用和汇编一样,在C5l中定义的变量和数组的初始化就在startup.a51中进行,如果在定义全局变量时带有数值,如unsigned char data xxx=100,那startup.a5l中就会有相关的赋值。如果没有xxx=100,startup.a5l就会把它清O。初始化完毕后,还会设置SP指针。