打印
[51单片机]

Keil编译为什么通不过????

[复制链接]
1850|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jzfbbs|  楼主 | 2014-10-16 21:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
网上找到一个DS18B20 数字温度传感器的C代码程序,作者是用89s52的芯片来编写的.头文件为《reg51.h》。我用stc89c52RC的的单片机来编写.程序和作者的程序一样.该改的地方都改了.编译时通不过.出错信息为下图.:'(

157.png (32.13 KB )

157.png

相关帖子

沙发
dirtwillfly| | 2014-10-16 22:55 | 只看该作者
错误信息说的很明白啊,路径或文件未找到

使用特权

评论回复
板凳
jzfbbs|  楼主 | 2014-10-17 10:31 | 只看该作者
不是路径的问题。我将此程序屏蔽掉,编译别的代码的时候,都是很正常的。可以通过,没有任何错误提示。:)

使用特权

评论回复
地板
jzfbbs|  楼主 | 2014-10-17 10:33 | 只看该作者
代码如下:
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table1[]={
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0x87,0xff,
0xef};
sbit wela=P2^7;
sbit dula=P2^6;
sbit ds=P2^2;
void delay(uchar i)
{
  uchar j,k;
  for(j=i;j>0;j--)
  for(k=125;k>0;k--);
}
void dsinit()//
{
   uint i;
   ds=0;
   i=103;
   while(i>0)i--;
   ds=1;
   i=4;
   while(i>0)i--;
}
bit readbit()
{
  uint i;
  bit b;
  ds=0;
  i++;
  ds=1;
  i++;
  i++;
  b=ds;
  i=8;
  while(i>0)i--;
  return b;
}
uchar rdadbyte()
{
  uint i;
  uchar j,dat;
  dat=0;
  for(i=0;i<8;i++)
  {
    j=readbit();
    dat=(j<<7)|(dat>>1);
  }
return dat;
}
void writebyte(uchar dat)
{
  uint i;
  uchar j;
  bit b;
  for(j=0;j<8;j++)
  {
    b=dat&0x01;
    dat>>=1;
    if(b)
    {
      ds=0;
      i++;
      i++;
      ds=1;
      i=8;
      while(i>0)i--;
    }
    else
    {
      ds=0;
      i=8;
      while(i>0)i--;
      ds=1;
      i++;
      i++;
    }
  }
}
void sendchangecmd()
{
  dsinit();
  delay(1);
  writebyte(0xcc);
  writebyte(0x44);
}
void sendreadcmd()
{
  dsinit();
  delay(1);
  writebyte(0xcc);
  writebyte(0xbe);
}
uint gettmp()
{
  uint value;
  float t;
  uchar low,high;
  sendreadcmd();
  low=readbyte();
  high=readbyte();
  value=high;
  value<<=8;
  value|=low;
  t=value*0.0625;
  value=t*10+0.5;
  return value;
}
void display(uint v)
{
  uchar count;
  uchar datas[]={0,0,0};
  datas[0]=v/100;
  datas[1]=v%100/10;
  datas[2]=v%10;
  for(count=0;count<3;count++)
  {
   wela=0;
   P0=((0xfe<<count)|(0xfe>>(8-count)));
   wela=1;
   wela=0;
   dula=0;
   if(count!=1)
   P0=table[datas[count]];
   else
   P0=table1[datas[count]];
   dula=1;
   dula=0;
   delay(5);
   dula=0;
   P0=0x00;
   dula=1;
   dula=0;
  }
}
void main()
{
  uchar i;
  uint value;
  while(1)
  {
    sendchangecmd();
    value=gettmp();
    for(i=0;i<3;i++)
    display(value);
  }
}

使用特权

评论回复
评论
ningling_21 2014-10-17 11:40 回复TA
打错了 readbyte() 定义和调用的不一样 
5
ningling_21| | 2014-10-17 11:39 | 只看该作者
readbyte()

未定义,其实是你打错了

使用特权

评论回复
6
znmcu| | 2014-10-17 11:46 | 只看该作者
细心是基本素质~高手都是强迫症和偏执狂

使用特权

评论回复
评论
风魔小象 2015-2-9 14:10 回复TA
说的好 
风魔小象 2015-2-9 14:10 回复TA
好 
7
autopccopy| | 2014-10-17 12:31 | 只看该作者

使用特权

评论回复
8
jzfbbs|  楼主 | 2014-10-17 12:36 | 只看该作者
谢谢5楼指出了错误的地方。改为:void readbyte() 后,编译还是通不过。错误提示和1楼出现的一样。

使用特权

评论回复
9
ningling_21| | 2014-10-17 12:41 | 只看该作者
jzfbbs 发表于 2014-10-17 12:36
谢谢5楼指出了错误的地方。改为:void readbyte() 后,编译还是通不过。错误提示和1楼出现的一样。 ...

有可能是KEIL 环境的问题...

使用特权

评论回复
10
qq4988| | 2014-10-17 12:51 | 只看该作者
我编译没错啊

123.gif (29.72 KB )

123.gif

使用特权

评论回复
11
xjjspace| | 2014-10-17 13:50 | 只看该作者
编译器的问题吧,也可能库文件被误删或者其他原因,下载个吧。

使用特权

评论回复
12
jzfbbs|  楼主 | 2014-10-17 13:50 | 只看该作者
谢谢7楼的指点。按照你的方法,增加库文件到KEIL中,编译通过了。程序运行正常。  这个库文件起什么作用?

使用特权

评论回复
13
lmx89| | 2014-10-17 13:59 | 只看该作者
用keil4编译一样通过。应该是楼主的编译环境有问题。



使用特权

评论回复
14
yklstudent| | 2014-10-17 15:28 | 只看该作者
应该是楼主的工程文件有问题

使用特权

评论回复
15
nuaabob| | 2014-10-17 17:12 | 只看该作者

第46行改正为uchar readbyte()之后编译没有任何问题,0 error 0 warning

使用特权

评论回复
16
franki_18| | 2014-10-17 17:53 | 只看该作者
同意楼上的 , 这么几行代码 , 不存在其他错误

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

387

帖子

3

粉丝