单片机开发中的一些实用技巧(下)
#include
图5
2.用汇编语言编制一段205μS精确延时程序ttest4.asm并添加到工程中(图6)。
UDELAY SEGMENT CODE
RSEG UDELAY
PUBLIC DELAY
DELAY: MOV R0,#100
LOOP:
DJNZ R0,LOOP
RET
END
图6
3.点击Rebuild target(重建所有目标文件)即可得到正确的编译结果(图7)。
图7
例5(有参数传递):
1.按照Keil的使用方法,建立工程文件并添加C51编写的主程序test5.c(图8)。
/*------------程序名test5.c------------*/
#include P 晶振频率12.000MHz>
/****************/
void delay(unsigned int k); //延时函数声明
/***************/
void main (void)//主函数,其功能使P1.0交替输出高、低电平的方波
{
while(1)
{P1_0=!P1_0;
delay(500);}
}
图8
2.用汇编语言编制一段延时程序ttest5.asm并添加到工程中(图9)。由于有参数传递,函数名前必须加下划线“_”。
UDELAY SEGMENT CODE
RSEG UDELAY
PUBLIC _DELAY
_DELAY:
DJNZ R6,$
DJNZ R7,$
RET
END
图9
3.点击Rebuild target(重建所有目标文件)可得到正确的编译结果(图10)。
还有一种方法,利用编译器自动完成段的安排,这样实现C语言与汇编语言的混合编程也很方便。过程为:
1.用C51分别编写主程序test.c及延时子程序的外壳delay.c(等待嵌入汇编语言)。在主程序中应将延时子程序声明为外部函数:extern void delay(delay)。
2.点击delay.c源程序后再右击,在弹出的下拉菜单中选中Options for File ‘test.c’,勾选Generate Assembler SRC File(生成汇编SRC文件)及Assembler SRC File(封装汇编文件)使其有效。
3.根据项目的编译模式加载封装库文件,通常在Small模式时为C51S.LIB(该文件在C:KeilC51LibC51S.LIB)。
4.点击Rebuild target(重建所有目标文件)可得到一个delay.SRC的文件。
5. 将delay.SRC改名为delay.A51。
6.将delay.A51加载到工程项目组中,同时移除delay.c、C51S.LIB。
7.再次点击Rebuild target可得到delay.A51汇编语句的主体。
8. 将通过其它试验所得的精确汇编延时子程序放入delay.A51的主体中,保存后加载到Source Group 1项目组中,再点击Rebuild target即可得到正确的编译结果。
评论