单片机的一些开发实用技巧
函数名的转换规律
主函数中的声明 汇编符号名 说明
Void func(void) FUNC 无参数传递
Void func(char)_FUNC 带寄存器参数传递
Void func(void)reentrant_?FUNC 重入函数包含栈内参数传递
表1
接收参数寄存器
参数序号charintLong,float通用指针
1R7R6、R7R4~R7R1~R3
2R5R4、R5--
3R3R2、R3--
表2
返回值类型与寄存器对照
返回值类型寄存器说明
BitC(标志位)由具体标志位返回
Char/unsigned char/1_byte指针R7单字节由R7返回
Int/ unsigned int/2_byte指针R6、R7双字节由R6、R7返回,高位在R6中,低位在R7中
Long/ unsigned longR4~R7四字节由R4~R7返回,高位在R4中,低位在R7中
FloatR4~R732bit IEEE格式,指数和符号位在R7中
通用指针R1~R3存储类型在R3中,高位在R2,低位在R1
表3
下面通过两个实例说明。
例4(无参数传递):
1.按照Keil的使用方法,建立工程文件并添加C51编写的主程序test4.c(图5)。
/*------------程序名test4.c------------*/
#include P 晶振频率12.000MHz<>
/****************/
void delay(void);//延时函数声明
/***************/
void main (void)//主函数,其功能使P1.0交替输出高、低电平的方波
{
while(1)
{P1_0=!P1_0;
delay();}
}
图5
2.用汇编语言编制一段205μS精确延时程序ttest4.asm并添加到工程中(图6)。UDELAY SEGMENT CODE
RSEG UDELAY
PUBLICDELAY
DELAY: MOV R0,#100
LOOP:
DJNZ R0,LOOP
RET
END
图6
3.点击Rebuild target(重建所有目标文件)即可得到正确的编译结果(图7)。
图7
例5(有参数传递):1.按照Keil的使用方法,建立工程文件并添加C51编写的主程序test5.c(图8)。
评论