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

来源:百度知道 编辑:UC知道 时间:2024/05/29 23:24:33
#include<reg51.h>
#pragma src
void Delay()
{
#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
用KEIL 编译后出现上面几个错误.我将 #pragma src 放在main() 前也不行,有各位高手指点

首先#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文件

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

#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