‘壹’ 单片机C语言编译错误:requires ANSI-style prototype
需要要把调用的子函数放到main前面,或者在main函数前面先把需要调用的子函数定义声明一下。
requires ANSI-style prototype的意思是:需要ANSI样式原型。
(1)C语言嵌入汇编语言编译报错扩展阅读
单片机汇编指令是为解决某些特定的问题代码中必须嵌入汇编语言以代替C语言完成的单片机的编程,汇编语言对于程序调试是不可或缺的。它包括:算术操作类指令,布尔变量操作类指令,逻辑操作数指令,控制转移类指令。
直接使用汇编指令编写单片机程序,对硬件的控制更加直接,可以直接操作物理地址,寄存器,端口等;其它更高级的语言对硬件的控制是依赖于类库来实现的。
对于一些对程序大小和运行速度有非常严苛要求的项目,都必须使用汇编指令。C语言只是为了方便编写,与机器打交道的都是2进制代码。
‘贰’ 是用c语言和汇编混合编的程序,在keil里编译时出现C51 FATAL-ERROR -
程序问题。
LL SEGMENT CODE; // 在程序存储区中定义段
PUBLIC LED; //声明函数
FLAG DATA 20H
DPFLAG DATA 22H
RSEG LL; //函数可被连接器放置在任何地方
LED:
NOP
DISP: MOV P1,#0FFH ;显示函数
MOV P2,#0
MOV DPTR,#TAB
MOV A,DPFLAG
CJNE A,#1,DISP0 ;判断是否有选择按键
SJMP N1
DISP0:MOV P1,#0F8H
MOV A,R2
MOVC A,@A+DPTR
MOV P2,A
NOP ;弄两个空指令缓冲下数码管
NOP
MOV P2,#0
N1: MOV A,DPFLAG
CJNE A,#2,DISP1
SJMP N2
DISP1: MOV P1,#0F9H
MOV A,R3
MOVC A,@A+DPTR
MOV P2,A
NOP
NOP
MOV P2,#0
N2: MOV A,DPFLAG
CJNE A,#3,DISP2
SJMP NEND
DISP2: MOV P1,#0FAH
MOV A,R4
MOVC A,@A+DPTR
MOV P2,A
NOP
NOP
MOV P2,#0
NEND: RET
NOP
RET
TAB: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,40h,0
END
上面是汇编文件,。
#include<reg52.h>
extern void led();
void main()
{
P2=0XFF;
led();
while(1)
{
led();
}
}
这里是C文件。
你试试,我这个工程师可以的