求Keilc51关于8051(Generic8052)汇编语言操作例子[8051单片机汇编语言]

您所在的位置:网站首页 pic反汇编 求Keilc51关于8051(Generic8052)汇编语言操作例子[8051单片机汇编语言]

求Keilc51关于8051(Generic8052)汇编语言操作例子[8051单片机汇编语言]

2023-04-11 11:23| 来源: 网络整理| 查看: 265

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

keil中汇编函数调用c51函数 [ycong_kuang]

在keil的写法可参考89852帖子,具体如下:

与89852帖子相比,第一步在工程里多了一个被汇编调用的c51的函数文件(c51func.c),至于汇编函数还是先用c51编写出主体

(a51func.c),这样汇编程序接口和段都交给编译器处理,你只管在编译成汇编代码后按你的要求改写汇编代码就行了。

例程如下:

//main.c

#include reg51.h

#define uchar unsigned char

#define uint unsigned int

extern uint AFUNC(uchar v_achr,bit v_bflag);

void main()

{

bit BFLAG;

uchar mav_chr;

uint mvintrslt;

mav_chr=0xd4; BFLAG=1;

mvintrslt=AFUNC(mav_chr,BFLAG);

}

//a51FUNC.c

#define uchar unsigned char

#define uint unsigned int

extern uint CFUNC(uint);

uint AFUNC(uchar v_achr,bit v_bflag) //c51写的汇编函数,最终要变成汇编代码

{

uchar tmp_vchr;

uint tp_vint;

tmp_vchr=v_achr;

tp_vint=(uint)v_bflag;

return CFUNC(tp_vint); //这里调用一个c51函数

}

//c51FUNC.c

#define uchar unsigned char

#define uint unsigned int

uint CFUNC(uint v_int) //被汇编函数调用c51函数

{

return v_int2;

}

第二步是按89852帖子的step2,3,4把用c51写的(汇编)函数变成a51文件(今天我试了一下step3可以不要)例程编译结果如

下:

; .\a51func.SRC generated from: a51func.c

NAME A51FUNC

?PR?_AFUNC?A51FUNC SEGMENT CODE

?DT?_AFUNC?A51FUNC SEGMENT DATA OVERLAYABLE

?BI?_AFUNC?A51FUNC SEGMENT BIT OVERLAYABLE

EXTRN CODE (_CFUNC)

PUBLIC ?_AFUNC?BIT

PUBLIC _AFUNC

RSEG ?DT?_AFUNC?A51FUNC

?_AFUNC?BYTE:

tmp_vchr?042: DS 1

RSEG ?BI?_AFUNC?A51FUNC

?_AFUNC?BIT:

v_bflag?041: DBIT 1

; //a51FUNC.c

;

; #define uchar unsigned char

; #define uint unsigned int

;

; extern uint CFUNC(uint);

;

; uint AFUNC(uchar v_achr,bit v_bflag)

RSEG ?PR?_AFUNC?A51FUNC

_AFUNC: ;c51所写的函数产生的汇编代码从这里开始

USING 0

; SOURCE LINE # 8

;---- Variable 'v_achr?040' assigned to Register 'R7' ----

; {

; SOURCE LINE # 9

; uchar tmp_vchr;

; uint tp_vint;

;

; tmp_vchr=v_achr;

; SOURCE LINE # 13

MOV tmp_vchr?042,R7

; tp_vint=(uint)v_bflag;

; SOURCE LINE # 14

MOV C,v_bflag?041

CLR A

MOV R6,A

RLC A

MOV R7,A

;---- Variable 'tp_vint?043' assigned to Register 'R6/R7' ----

; 这里说明R6,R7内容就是tp_vint

; return CFUNC(tp_vint);

; SOURCE LINE # 16

LCALL _CFUNC ;这里调用了用c51写的函数

; }

; SOURCE LINE # 17

?C0001:

RET

; END OF _AFUNC

END

这个文件就是你的汇编函数所在文件,把函数里面的汇编代码修改成你所需的汇编函数就ok了。

建议参考 徐爱钧,彭秀华所写的《单片机高级语言C51windows环境编程与应用》或马忠梅所写的

《单片机的c语言应用程序设计》有关混合语言编程有关章节

[img]在C51语言中如何嵌入汇编语言

keil C 语言中嵌入汇编语言进行混合编程,方法如下:

1、在C 文件中要嵌入汇编代码片以如下方式加入汇编代码

#pragma ASM

; Assembler Code Here

#pragma ENDASM

2、在Project 窗口中包含汇编代码的C 文件上右键,选择“Options for ...”

在弹出的对话框中,点击右边的

“Generate Assembler SRC File”

和“Assemble SRC File”

使检查框由灰色变成黑色(有效)状态

3 、根据选择的编译模式, 把相应的库文件( 如Small 模式时, 是

Keil\C51\Lib\C51S.Lib)加入工程中, 该文件必须作为工程的最后文件,在默认

安装盘KEIL/C51/LIB/C51S.Lib

4、编译,即可生成目标代码

实例:

#includereg52.h

#define uchar unsigned char

sbit LED1=P1^0;

//C 嵌入汇编例程

void delay_ms(void)

{

#pragma asm

MOV R0,#0FFH

MOV R1,#0FFH

D_LOOP1:

DJNZ R0,D_LOOP1

MOV R0,#0FFH

DJNZ R1,D_LOOP1

#pragma endasm

}

void main(void)

{

uchar i;

P1 = 0xFF;

while(1)

{

i++;

delay_ms();

if(i=7)

{

LED1 =~LED1;

i=0;

}

}

}

在keilC中8051汇编程序语言格式

嘿嘿 keilC中8051汇编程序语言格式是:

[ 标号: ] 操作码 操作数,操作数 [;注释]

例如:

MAIN: MOV A,#69H ;将立即数送累加器A。

呵呵 满意 就选满意回答喽

求Keil c51关于8051(Generic 8052)汇编语言操作例子

org 00h;设置地址指针

jmp start ;跳转到开始程序

org 30h

start:;开始程序

mov p1,00h;p1口副低电瓶

acall delay;延时

mov p1,ffh;p1口副高电瓶

acall delay;延时

jmp start;回挑START

我自己写的程序!什么反汇编啊!!郁闷!

其中delay是一个延时子程序,你们家反汇编是这样的啊,你写段c放入keil中反汇编下看看什么结果!?????????????????????????????、

编写简单的8051汇编语言程序(用KEIL编程环境)

ORG 0000H

AJMP START

ORG 0030H

START: MOV SP,#60H ;堆栈,本程序也可不要

MOV 30H,#56H ;求5678H+1234H

MOV 31H,#78H

MOV 32H,#12H

MOV 33H,#34H

MOV A,31H

ADD A,33H

MOV R2,A ;低8位在R2

MOV A,30H

ADDC A,32H

MOV R1,A ;高8位在R1

MOV R3,#10H ;30H至40H共10H个字节

MOV R0,#30H ;间接寻址模式起始地址为30H

CLR A

LOOP: MOV @R0,A

INC R0

DJNZ R3,LOOP

HERE: JMP HERE ;结束原地循环

END

关于求Keilc51关于8051(Generic8052)汇编语言操作例子和8051单片机汇编语言的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3