求Keilc51关于8051(Generic8052)汇编语言操作例子[8051单片机汇编语言] |
您所在的位置:网站首页 › pic反汇编 › 求Keilc51关于8051(Generic8052)汇编语言操作例子[8051单片机汇编语言] |
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 |