单片机C语言编程与汇编混合编程时出现的问题

供稿:hz-xin.com     日期:2025-01-13
单片机 一般什么情况下会用到 汇编语言和C语言的混合编程?

一般很少用到的吧,汇编编程的时间代价太高,除非是特殊段的代码需要特别优化,采用汇编编程可能起到好的效果。
但是一般人的水平估计用汇编也不会,别说用汇编优化了。
现在C的执行效率已经非常高了,不建议花太多时间搞汇编。。。
当然你是大神的话,前面的就全部忽略吧。

操作步骤第一步:建工程,添加代码。例:test.c #includetypedef UINT16 unsigned int; void delay(UINT16 k){ UINT16 i,j; for(i=k; i>0; i--) for(j=110; j>0; j--); //12M }int main(void){ P1=0x00; delay(1000); #pragma ASM//汇编嵌套开始 MOV P1,#0FFH //汇编嵌套结束 #pragma ENDASM//汇编嵌套开始 while(1); }第二步:选中 Project 窗口中的 C 文件,比如 test.c ,并右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使复选框的打钩由灰色变成黑色状态(双击即可);第三步:将相应的库文件(如 Small 模式时,是 KeilC51LibC51S.Lib)加入工程中, 该文件必须作为工程的最后文件 (将该文件像头文件一样加载到工程中);错误:typedef UINT16 unsigned int; typedef unsigned int UINT16;我的QQ号:1010134563将相应的库文件(如 Small 模式时,是 KeilC51LibC51S.Lib)加入工程中, 该文件必须作为工程的最后文件 (将该文件像头文件一样加载到工程中);附件里有流程图和例程。

首先#pragma src 的意思是向下编译至SRC文件中 在KEIL中第1次编译时很容易出错的。#pragma asm 这类型的命令先别加,编译通过一次就好了

如果是在向HEX文件编译时出的错误。因为#pragma src 的意思是向下编译至SRC文件中(汇编文件),
#pragma asm
MOV R2,#20
D1:
MOV R3,#100
D2:
MOV R4,#229
DJNZ R4,$
DJNZ R3,D2
DJNZ R2,D1
#pragma endasm
的意思是这段程序向SRC文件编译时保持源代码不变 也就把这段汇编加进SRC汇编文件中。

但C文件要生成HEX文件时是通过OBJ文件进行的,所以直接编译是肯定出错的

正确的方法是生成SRC文件后 打开直接对SRC文件编译来生成HEX文件

#include<reg51.h>
main()
{
#pragma asm
MOV R2,#20
D1:
MOV R3,#100
D2:
MOV R4,#229
DJNZ R4,$
DJNZ R3,D2
DJNZ R2,D1
#pragma endasm
}
void main()
{
unsigned char c,i;

while(1)
{
c=0xfe;
for(i=0;i>7;i++)
{
P0=c;
Delay();
c<<=1;
}
}
TEST1.C(3): error C252: misplaced primary control, line ignored
TEST1.C(6): error C272: 'asm/endasm' requires src-control to be active
TEST1.C(15): error C272: 'asm/endasm' requires src-control to be active
}

c语言和汇编是不能够的在一个环境之中的运行的。第一次听说汇编语言和c语言在同一个的程序之中的。他们是可以同样的实现一个同功能。,但是应该的不能够的混合的来实现一个功能。因为使用的环境,原理机制不同对的

关注中~~~

单片机C语言编程与汇编混合编程时出现的问题
首先#pragma src 的意思是向下编译至SRC文件中 在KEIL中第1次编译时很容易出错的。#pragma asm 这类型的命令先别加,编译通过一次就好了 如果是在向HEX文件编译时出的错误。因为#pragma src 的意思是向下编译至SRC文件中(汇编文件),pragma asm MOV R2,#20 D1:MOV R3,#100 D2:MOV R4,#229 ...

单片机C语言和汇编语言混合编程实践内容简介
本书内容丰富,从理论到实践,全面展示了单片机接口芯片的C51语言和汇编语言混合编程实例。每一章首先介绍单片机接口芯片的功能,紧接着绘制连接电路原理图,然后展示汇编语言程序,随后详细说明调用汇编语言程序的C51语言程序设计,有些例子则省略了这一步骤。此外,还提供了不调用汇编语言程序的C51语言程序示例...

mdk5 汇编和C语言编程的时候出现了错误 A1207E: Bad or unknown attribut...
有一个函数是隐含定义的,没有明确定义。根据提示的函数名,查一查是什么函数。有可能是引用函数名称错误,或者某个库文件没有包含进来。

单片机keil c语言和汇编混合编程
#pragma ASM\/\/汇编嵌套开始 MOV P1,#0FFH \/\/汇编嵌套结束 #pragma ENDASM\/\/汇编嵌套开始 while(1); }第二步:选中 Project 窗口中的 C 文件,比如 test.c ,并右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使复选框的打钩由灰...

C语言和汇编混合编程时如何带回一个以上的返回参数
本来C语言就只能返回一个值,不管你和什么语言混合。可以用指针参数返回值,也可以定义一个结构,包装好要返回的多个值,然后返回其指针,注意不要返回栈内存的地址就可以了

汇编语言和C语言混合编程时,它们之间是如何传递参数的?请用具体例子说...
对于参数个数可变的子程序,当参数不超过4个时,可以使用寄存器R0~R3来进行参数传递,当参数超过4个时,还可以使用数据栈来传递参数. 在参数传递时,将所有参数看做是存放在连续的内存单元中的字数据。然后,依次将各名字数据传送到寄存器R0,R1,R2,R3; 如果参数多于4个,将剩余的字数据传送到数据栈中,入...

用keil软件如何将汇编与C语言结合起来一起编写单片机的程序
在混合编程中,最常用也是最实用的方法是在C语言中加入部分汇编语言的代码,分为两种方法。方法1)在Keil C51的函数中直接插入汇编语句 方法2)按照Keil C51接口规则,编写汇编模块 方法1是利用编译控制命令#pragma asm(用来标识所插入的汇编语句的起始位置) 和 #pragma endasm (用来标识所插入的汇编...

汇编和c语言如何结合的?
C语言允许嵌入四类汇编命令:一般指令、串指令、跳转指令、数据分配和定义指令。嵌入汇编比调用汇编子程序更方便、灵活、功能也更强。但是,嵌入汇编不是一个完整的汇编程序,所以许多错误不能马上检查出来。采用两种或两种以上的编程语言组合编程,彼此相互调用,进行参数传递,是一种有效的程序设计方法。这种...

汇编语言和C语言的混合编程,如何用keilC51把.c和.asm文件编译成一HEX文 ...
以个例子给你参考,有两个文件,一是S.a51, 另一个是 M.C都加到KEILL的工程中编译。汇编中有两个函数,注意C的参数是如何传递给汇编的。S.A51 NOMOD51 NAME SENTBYTEUP ?PR?_SentByteUp?SENTBYTEUP SEGMENT CODE ?DT?_SentByteUp?SENTBYTEUP SEGMENT DATA OVERLAYABLE PUBLIC _SentByteUp ...

请问用C语言和汇编混合编程的程序如何用keil生成.hex文件
就是在汇编中调用C,C中调用汇编啊,编译器,都可以通过。