用PICC编译器开发PIC系列单片机的代码

[09-12 17:35:03]   来源:http://www.88dzw.com  单片机学习   阅读:8312

文章摘要:PICC函数参数的传递是根据被传参数的长度,用W、被调函数的自动变量区域或被调函数的参数区域传递,传递代码比较高效。传递给函数的参数可以通过一个由问号“?”、下划线“_”及函数名加一个偏移量构成的标号获取。下面为一调用求和子程序的源泉代码:Unsigned char add_function(unsigned char augend,unsigned char addend);Void main(void){unsigned char temp1,temp2,temp3;tem3=add_function(temp1,temp2);}unsigned char add_function(uns

用PICC编译器开发PIC系列单片机的代码,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com

PICC函数参数的传递是根据被传参数的长度,用W、被调函数的自动变量区域或被调函数的参数区域传递,传递代码比较高效。传递给函数的参数可以通过一个由问号“?”、下划线“_”及函数名加一个偏移量构成的标号获取。下面为一调用求和子程序的源泉代码:

Unsigned char add_function(unsigned char augend,unsigned char addend);

Void main(void)

{

unsigned char temp1,temp2,temp3;

tem3=add_function(temp1,temp2);

}

unsigned char add_function(unsigned char augend,unsigned char addend)

{

return(augend + addend);

}

编译后生成的汇编程序为:

_main

; _temp2 assigned to?a_main+0

;_temp3 assigned to ?a_main+1

; _temp1 assigned to ?a_main+2

bcf status,5

bcf status,6

movf (((?a_main+0))),w

movwf(((?_add_function)))

movf (((?a_main+2))),w

fcall (_add_function)

movwf(((?a_main+1)))

_add_function

; _augend assigned to ?a_add_function+0

; _augend stored from w

bcf status,5

bcf status,6

movwf(((?a_add_function+0)))

movf (((?a_add_function+0))),w

addwf (((?_add_function+0))),w

return

3 PICC语言和汇编语言的混合编程

一般情况下,主程序都是用C语言编写的。C语言与汇编语言最大的区别在于,汇编程序执行效率较高,因为,C语言首先要用C编译器生成汇编代码,在不少情况下,C编译器生成的汇编代码不如用手工生成的汇编代码效率高。在PICC中,可以用两种方法在C程序中调用汇编程序。一种方法是使用#asm,#endasm及asm()在C语言中直接嵌入汇编代码,#asm和#endasm指令分别用于标示嵌入汇编程序块的开头和结属;asm()用于将单条汇编指令嵌入到编译器生成的代码中,如下所示:

void func1(void){

asm("NOP");

#asm

nop

rlf_var,f

#endasm

asm("rlf_var,f");

}

需要注意的是,嵌入汇编不是完整意义上的汇编,是一种伪汇编指令,使用时必须注意它们与编译器生成代码之间的互相影响。

另一种方法是将汇编作为一个独立的模块,用汇编编译器(ASPIC)生成目标文件,然后用链接器和C语言生成的其它模块的目标文件链接在一起。如果变量要公用时,则在另一个模块中说明为外部类型,并允许使用形式参数和返回值。

例如,如果在C模块中使用汇编模块中的函数,那么在C中可知下声明:

extern char rotate_left(char);

本声明说明了要调用的这个外部函数有一个char型形式参数,并返回一个char型的值。而rotate_left()函数的真正函数体在外部可以被ASPIC编译的汇编模块(文件名后缀.as)中,具体代码可以如下编写:

上一页  [1] [2] [3]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行