当前位置:首页 » 编程软件 » c51编译器代码补全

c51编译器代码补全

发布时间: 2022-11-16 16:27:56

Ⅰ 在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编译时出现fail to execute:c\keil\c51\bin\c51.exe怎么整

有时候我们打开别人的KEIL程序时,会经常碰到can't execute 'c:\keil\c51\bin\c51.exe'的错误
解决对策:
出错原因:被打开的KEIL程序的编译器安装在C盘,即c:\keil的路径下。而使用者的KEIL装在不同路径。
针对这样的原因,就有两种解决方法:
1、自己重建工程,把要打开的程序的文件拷贝过去,编译即可以通过,但这样做比较费事。
2、打开出错的程序,选择菜单:Project-Compoonents,Environment and Books
选择Folders/Extensions,并把“Use settings from TOOLS.INI”前面的勾打上即可.
但有的KEIL版本在Project下找不到Compoonents,Environment and Books选项,可以在快捷栏上找,位于“Target1”后面的一个呈“品”字的彩色图标,就是Compoonents,Environment and Books选项了。

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

模块内接口:
使用如下标志符:
#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();
}
}

Ⅳ C51编译时提示出错,但我怎么也找不出错在哪里了

你前面加了头文件(*.h)没有?

我加了个main函数,编译之后 是没有错误的啊
error C141: syntax error near 'void'可能是函数前后少了"{"或者"}",你应该仔细检查一下的
还有,error C202: 'TempCyc': undefined identifier这一句错误可能是在main函数中也使用了TempCyc,而没有在主函数中定义,这个变量在void Delay5Ms(void)中只是局部变量

#include "reg52.h"

void Delay5Ms(void)
{
unsigned int TempCyc;
TempCyc=5552;
while(TempCyc--);
}

//******400ms延时******
void Delay400Ms(void)
{
unsigned char TempCycA=5;
unsigned int TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
}
}

void main()
{
while(1)
{
Delay5Ms();
Delay400Ms();
}
}

Ⅳ Keil-MDK5.11设置了代码自动补全,怎么还是不能补全

不知道解决了没有,我也遇见一样的情况。现在可以了。设置界面后有个设置几个字母提示,换个数字,然后在换回来。确定就可以了。

Ⅵ 主流C51单片机编译器比对

int short 的大小是因机器而异嘛(准确点应该是编译器)。你都说了人家规定的是“最小”为16位,又不是只能是16位,也没有说两者应该相等(事实上是short不超过int就OK啦)。所以当然可以short类型为半个机器字长,而int类型则为一个机器字长的啦。

“C++标准规定了每个算术类型的最小存储空间,但他并不自知编译器使用更大的存储空间 ”

说简单点就是C++规定了个最小的值,但是将你的代码编译成机器码的编译器则确定了你这个长度值为多少。因为C++是一种语言,一个规范,或者说只是一种规定,然后要将你按这种规范写的代码编译成能在机器上运行的代码的是编译器。而在不同的机器上运行的程序的实际结构是不一样的,比如单片机与PC相差就很大。要将按相同规范写的程序在各种各样乱七八糟的机器上运行,就需要相应的编译器了。所以实际的大小是由你编译代码的编译器确定的。

PS:当然当前一般的PC上int都是32位,short16位的。因为现在32位的机子是主流嘛。如果你不写什么单片机的程序可以不用太在意这个问题。但是写单片机程序时就要注意了,因为一般一个单片机的编译器可以编译很多种型号芯片的代码,而这些型号有可能从8位到32位都有……

Ⅶ 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()即可。

Ⅷ keilc51有代码补全功能吗

不可以实现代码补全功能

Ⅸ keil c51优化等级介绍

一般用优化等级8,其它的别用,容易出事。
编译完之后多留意data,xdata,看有没超出芯片的最大值,
特别是data,不能超过128,甚至太接近128有时也会出问题。
如果data 需要使用到256,则另外的128用idata定义

Ⅹ C51将C代码汇编有ADD A , ACC 怎么回事

A与ACC都代表累加器,同一地址,但是在汇编里,写法A与ACC拥有不同的含义
A是包含在指令里的,指令码不同;而ACC却是作为操作数出现,代表地址
就相当于汇编指令有,MOV A,Rn同时也有MOV direct,Rn等不同的指令
MOV A,R0 与 MOV ACC,R0就会生成上述两种不同的机器码,但是结果一样

那么就好理解了ADD A,ACC就使用指令ADD A,direct,direct就是ACC符号所表示的地址,也就是累加器自己相加,相当于X2,也就是左移

热点内容
安卓软件为什么经常自启动 发布:2025-05-14 04:38:17 浏览:158
谭浩强c语言第三版课后答案 发布:2025-05-14 04:37:31 浏览:59
san存储和nas存储 发布:2025-05-14 04:34:44 浏览:152
幽灵战士3什么配置 发布:2025-05-14 04:33:53 浏览:114
安卓的虚拟机哪个好用 发布:2025-05-14 04:32:34 浏览:871
宿迁存储式化工设备 发布:2025-05-14 04:32:33 浏览:54
s7200编程s7200 发布:2025-05-14 04:28:32 浏览:413
安卓定制版苹果手机是什么意思 发布:2025-05-14 04:26:27 浏览:379
如何搭建php环境虚拟服务器免费 发布:2025-05-14 04:25:37 浏览:103
相册加密怎么看 发布:2025-05-14 04:24:53 浏览:573