單片機的一些開發實用技巧
函數名的轉換規律
主函數中的聲明 匯編符號名 說明
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)。


評論