KEIL C51程序中如何嵌入汇编?

2024-11-01 15:26:09
推荐回答(2个)
回答1:

模块内接口:
使用如下标志符:
#pragma asm
汇编语句
#pragma endasm
注意:如果在c51程序中使用了汇编语言,注意在Keil编译器中需要激活Properties中的
“Generate Assembler SRC File” 和“Assembler SRC File ”两个选项
1、把"xx.c"加入工程中,右击"xx.c"选择“options for file"xx.c" 选择
“Generate Assembler SRC File”和“Assemble SRC File”打上黑勾有效;

2、根据选择的编译模式,把相应的库文件象加"xx.c"一
样加入工程中并放在"xx.c"下面,如smail模式下选"keil\c51\lib\c51s.lib"
加入工程中,如果要进行浮点运算把"keil\c51\lib\c51fpl.lib"也加入工程中。
即:
在 Keil 安装目录下的 \C51\LIB\ 目录的LIB 文件如下:
C51S.LIB - 没有浮点运算的 Small model
C51C.LIB - 没有浮点运算的 Compact model
C51L.LIB - 没有浮点运算的 Large model
C51FPS.LIB - 带浮点运算的 Small model
C51FPC.LIB - 带浮点运算的 Compact model
C51FPL.LIB - 带浮点运算的 Large model

3、在"xx.c"头文件中加入优化:比如#pragma OT(4,speed)

4、在"xx.c"中加入汇编代码
#pragma ASM
;Assembler Code Here
#pragma ENDASM
5、编译生成xx.hex

例:
#include
void delay(void)
{
#pragma asm
MOV R5,#5
DEL:
MOV R6,#2
DEL1:
MOV R7,#255
DJNZ R7,$
DJNZ R6,DEL1
DJNZ R5,DEL
;MOV A,P1
;CPL A
;MOV P1,A
#pragma endasm
}
void delay1(unsigned int cnt)
{
while(cnt--);
}
void main()
{
while(1)
{
delay1(1000);
P1=0x55;
delay();
}
}

回答2:

汇编不能移植。