c51编译
‘壹’ C51编译问题
朋友 仔细看看你的程序,这一行:unsigned char j; 延时
在你的说明字符前 应该加什么,呵呵 丢了这个 “//”。
‘贰’ KEIL C51多文件编译
首先主函数只能存在于一个文件中,这个文件可以直接取名mian.c这样比较方便管理。然后按功能分其它文件,分别编写XX.h和XX.c文件,在XX.h中写入函数的声明和全局变量的定义,在XX.c中写函数的具体内容,并且在XX.c中要include“XX.h”,在mian.c中include所有的.h文件。这样就可以正常编译和烧写了。最终生成的还是一个hex文件
‘叁’ C51编译不通过的问题
你这个是程序代码里有问题呢
不是提示了吗,在“*”前面缺少了“;”在文件74JIANCE.c里,好好检查一下
‘肆’ 在keil环境中遍了一段C51的程序后怎么编译
1 新建一工程;在主菜单project下(.Uv2)
2 新建一文件;如C则存为.c文件,如汇编则存为.asm文件;
3 在左边窗口中的Target1上右击,在菜单中选add file to group,再选中你的刚建的
文件,即把它加入到你的工程中。
4 选中主菜单project-->build target(或F7)即可编译你的程序;
5 选中主菜单debug的第一项,则切换到调试窗口;
6 选中主菜单debug->go(F5)即可运行程序了。
注意:view ->periodic window update 是刷新窗口,这样结果可以看得更清。
还有不清楚的问我:MSN:[email protected]
公司上QQ不方便,呵呵.
‘伍’ c51提供哪3种编译模式
case 1(0x87): case 2(0x47): case 3(0x27): case 4(0x17): 这样编译是没有问题 但是烧到板子上以后程序是否能达到需要的结果就不是很
‘陆’ c51怎么编译lib
如何生成LIB库文件
1.首先准备好生成LIB库文件对应的.c和.h文件,在这里用到的.c和.h文件分别是:
"reg303.h"
"rjwf303_flash.h"
"rjwf303_flash.c"
"cos_security.h"
"cos_security.c"
2.新建一个项目,将上面的文件添加到项目中,并做以下设置:
选中Create Library
3.编译之后就可以在项目目录下生成对应的LIB文件。
‘柒’ Keil C51编译的问题!
你主程序里没有别的程序代码了?
单片机在编译时,首先是进行编译预处理(头文件包括指令,宏定义处理,条件编译,各种伪指令等),然后再进入优化编译阶段,再进行汇编过程,接着是程序链接。
你在主程序中定义,unsigned char a[2]={1,2};数组,并分配两个存储单元。虽然在语法上是没有错,程序也能正确被编译。但程序在真正进行实质链接时,由于你并没有真正进行功能性的程序指定,编译时它会生成很多冗余的汇编代码,按照你定义的单元。上面生成的汇编,你如果仔细看,很多的条件跳转语句都是转到不同的内存单元。如:
DJNZ R7,C:001F //R7寄存器相减为0则转到001F,否则顺序执行。
DJNZ R7,C:004B
DJNZ R7,C:003F
INC DPTR
F2 MOVX @R0,A
INC R0
DJNZ R7,C:004B
而实际,编写程序,也没有你以上的那种做法,不可能只分配内存单元,而不做任何其它事情。我想,你这样做,无非就是想做个实验罢了。
‘捌’ c51编译错误
第一个错误:意思是定义的P发生了重复定义,你需要把“sbit P=P3^0; ”里面的P改掉就行了
第二个错误:意思是“Ps_2”“Ps_3”“Ps_4”未定义,从你的代码中可以看出是被注释掉了
sbitPs_1=P2^0;/*--------------------------------------------------
sbitPs_2=P2^1;----------------设置这4个端口为按键检测端---------
sbitPs_3=P2^2;--------------------------------------------------
sbitPs_4=P2^3;------------------------------------------------*/
修改成如下就行了:
sbitPs_1=P2^0;//设置这4个端口为按键检测端
sbitPs_2=P2^1;
sbitPs_3=P2^2;
sbitPs_4=P2^3;
同理,你的"Ps_22""Ps_23""Ps_24"也被注释掉了,只是这段程序中没有用到,所以没有提示错误。
注:C语言中 /* */注释会把这两个符号之间的所有字符串全部注释掉,包括换行的内容!
‘玖’ 为什么C51无法编译
出现ATTEMPT TO DEFINE AN ALREADY DEFINED LABEL,表示以前已经定义过一个标号,要换一个标号
movc a,@a+dptr
movc a,@a+pc
对于这两条指令,查了一下网上的兄弟的解释:
movc a,@a+dptr
从DPTR开始偏移A个地址的数读取到A中.
DPTR一般为数据段的首地址.
movc a,@a+pc
从PC指令地址开始偏移A个地址的数读取到A中.
PC为当前指令地址.
这两个指令都是从程序空间中读取数据.
貌似我也不大听懂,得去问问老师
还有对于PUSH A Keil老是编译出现为什么编译说错,
EXPRESSION TYPE DOSE NOT MATCH INSTRUCTION
网上的兄弟
1.说应该为PUSH ACC
2.是编译选项不对,应选择韦福汇编器
3.为什么不是A,而是ACC?
因为:A表示的是内存地址,ACC表示的是寄存器
51中,可以将寄存器入栈,不可以将内存入栈。
4.在51指令中没有PUSH A,只有PUSH ACC,同样对累加器A进行位操作时,没有A.0,只有ACC.0
A是ACC的缩写,有些地方不能互换,原因我也不知道,书中是这么写的,编译软件也是这么认的,否则就出错。
‘拾’ 单片机c51有哪几种编译模式
下面仅对C51在变量定义中注意的问题以及与80C51存储资源有关的问题作说明,其余遵循C语言的规定。1.变量声明在变量的声明中,可以包括存储类型和signed或unsigned等属性。如:(1)chardatavar1;定义字符型变量var1,被分配在内部RAM低128B,编译后,通过直接寻址方式访问。(2)charcodetext[]=“ENTERPARAMETER”;定义字符数组text[],将其分配到程序存储区,并赋初始值“ENTERPARAMETER”。编译后,通过MOVCA,@A+DPTR访问。(3)unsignedlongxdataarray[100];定义无符号长整型数组array[100],将其分配到外RAM中,编译后,通过MOVXA,@DPTR访问。(4)floatidatax,y,z;定义浮点类型变量x,y,z,将其分配到内RAM中,编译后,通过间接寻址方式访问。(5)unsignedintpdatadimension;定义无符号整型变量dimension,将其分配到外RAM中,编译后,通过MOVXA,@Ri指令采用分页的形式访问。(6)unsignedcharxdatavector[10][4][4];定义无符号字符型数组vector[10][4][4],将其分配到外RAM中,编译后,通过MOVXA,@DPTR访问。(7)charbdataflags;定义字符型变量flags,将其分配到可位寻址的内部数据存储器中,可以以字节方式访问,也可以以位方式访问。