当前位置:首页 » 编程软件 » 简述C51的编译模式

简述C51的编译模式

发布时间: 2023-02-09 22:12:47

‘壹’ 在C51语言中如何嵌入汇编语言

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

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

#pragma ASM

; Assembler Code Here

#pragma ENDASM

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

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

实例:

#include<reg52.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;

}

}

}

‘贰’ C51语言的混合编程

C51编译器能对C语言源程序进行高效率的编译,生成高效简洁的代码,在绝大多数场合采用C语言编程即可完成预期的目的。但有时为了编程直观或某些特殊地址的处理,还须采用一定的汇编语言编程。而在另一些场合,出于某种目的,汇编语言也可调用C语言。在这种混合编程中,关键是参数的传递和函数的返回值。它们必须有完整的约定,否则数据的交换就可能出错,例 C语言程序与汇编语言程序的调用,其子程序如下:
PUBLIC AD ;入口地址
SEG_AD SEGMENT CODE;程序段
RSEG SEG_AD
USING 0
AD: MOV R6,#00
MOV R7,#00
SETB P1.1
ACALL DELAY
CLR P1.1
ACALL DELAY
MOV R0,#10
RR0: SETB P1.2
NOP
CLR P1.2
DJNZ R0,RR0
ACALL DELAY
MOV 30H,R6 ;A/D转换的高
;两位保存在R6中
ACALL CIR
MOV R6,30H
SETB P1.2
NOP
CLR P1.2
MOV 30H,R6
ACALL CIR
MOV R6,30H
MOV R0,#8 ;A/D转换的低
;8位保存在R7中
RR2: SETB P1.2
NOP
CLR P1.2
MOV 30H,R7
ACALL CIR
MOV R7,30H
DJNZ R0,RR2
RET
CIR: CLR C
MOV C,P1.0
MOV A,30H
RLC A
MOV 30H,A
RET
END
在以上程序中,函数的返回值为一无符号整型数,根据调用规则,返回值的高位必须在R6中,低位在R7中,这样才可保证数据的传递不出错。另外,在调用过程中,必须注意寄存器的入栈。这样在以后用到A/D转换时,在C语言中调用汇编语言子程序AD()即可。

‘叁’ c51提供哪3种编译模式

case 1(0x87): case 2(0x47): case 3(0x27): case 4(0x17): 这样编译是没有问题 但是烧到板子上以后程序是否能达到需要的结果就不是很

热点内容
安卓在哪里找游戏 发布:2025-07-04 22:15:25 浏览:242
路由器访问光猫 发布:2025-07-04 22:07:47 浏览:897
数据库显示语句 发布:2025-07-04 22:04:30 浏览:740
编程课道具 发布:2025-07-04 22:04:02 浏览:844
华为手机不是安卓什么时候可以更新米加小镇 发布:2025-07-04 22:01:37 浏览:785
饥荒服务器搭建视频 发布:2025-07-04 21:48:38 浏览:523
github上传文件夹 发布:2025-07-04 21:29:22 浏览:1003
php课程学习中心 发布:2025-07-04 21:29:16 浏览:298
win7加密文件夹如何解密 发布:2025-07-04 21:25:24 浏览:555
为啥系统缓存的垃圾多呢 发布:2025-07-04 21:15:45 浏览:952