9493|5

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

为什么keil无法编译 [复制链接]

我最近在做一个SMbus的红外测温写了一个程序但不知道为什么无法编译。。求大侠们指点啊具体代码如下啊#include <reg51.h>
#include"intrins.h"
//************************************
 
#define    uint unsigned int
#define    uchar unsigned char
#define    Nack_counter   10
unsigned char code seg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char cs;
unsigned char dispram[4];
uint keyflag=0;
uint Tem;
float TEM ;
uint  T;
//**************端口定义**************
//mlx90614 端口定义
sbit SCL=P2^3;         //时钟线
sbit SDA=P2^2;         //数据线
sbit key_get=P1^6;     //按键读取
 
//************数据定义****************
bdata uchar flag;//可位寻址数据
sbit bit_out=flag^7;
sbit bit_in=flag^0;
uchar DataH,DataL;//Pecreg;

//************函数声明*****************************************
 // ****************7seg函数********************
void writesegdata(unsigned char );
void writecsdate(unsigned char );
void inittimer1(void);                     //  七段数码管初始化
void start_bit();             //MLX90614 发起始位子程序
void stop_bit();                //MLX90614 发结束位子程序
void send_bit(void);        //MLX90614 发送位子程序
void tx_byte(uchar dat_byte);    //MLX90614 发送字节子程序
void receive_bit(void);     //MLX90614 接收位子程序
uchar rx_byte(void);        //MLX90614 接收字节子程序
void    key_scan(void);    //键盘读取函数
void delay(uint N);      //延时程序
uint memread(void);     //读温度数据
void display(uint Tem);   //显示子程序
//*************主函数*******************************************
void main()
{


 P0=0xff;
 P2=0xff;

    inittimer1();
 TR1=1;
 dispram[0]=1;
 dispram[1]=2;
 dispram[2]=3;
 dispram[3]=4;
//uint Tem;
//float TEM;
//函数部分
SCL=1;SDA=1;
nop_();_nop_();_nop_();_nop_();
SCL=0;
delay(1000);
SCL=1;
while(1)
{
 key_scan();
 if(keyflag==1)
{
Tem=memread();
TEM=Tem*(2/100)-27315/100;
T=TEM*100 ;
 cs=0;
dispram[0]=T/10000;
dispram[1]=T%10000/1000;
dispram[2]=T%1000/100;
dispram[3]=T%100/10;
}
}
}
//***************************************************
void start_bit(void)
{
SDA=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
//------------------------------
 
void stop_bit(void)
{
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1;
}
//*******************************************
  //-----------发送一个位---------
void send_bit(void)
{
if(bit_out==0)
SDA=0;
else
SDA=1;
_nop_();
SCL=1;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
SCL=0;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
 //********************************************
//---------发送一个字节---------
 
void tx_byte(uchar dat_byte)
 
{
char i,n,dat;
//n=Nack_counter;
for(n=Nack_counter;n>0;n--)
{

//TX_again:
dat=dat_byte;
for(i=0;i<8;i++)
{
if(dat&0x80)
bit_out=1;
else
bit_out=0;
send_bit();
dat=dat<<1;
}
receive_bit();
if(bit_in==1)

{
stop_bit();
break;
}

}
}
//if(n!=0)
//{n--;goto Repeat;}
//lse
//goto exit;

 

//else
//goto exit;
//Repeat:
//start_bit();
//goto TX_again;
//exit: ;

//*******************************************
//----------接收一个位----------
void receive_bit(void)
{
SDA=1;bit_in=1;
SCL=1;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
bit_in=SDA;
_nop_();
SCL=0;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
//**************************************
//----------接收一个字节--------
uchar rx_byte(void)
{
uchar i,dat;
dat=0;
for(i=0;i<8;i++)
{
dat=dat<<1;
receive_bit();
if(bit_in==1)
dat=dat+1;
}

send_bit();
return dat;
}

//***************************************
//------------延时--------------
 
void delay(uint N)
{
uint i;
for(i=0;i<N;i++)
_nop_();
}
//----------读取温度------------------
uint memread(void)
{
start_bit();
tx_byte(0x00);
tx_byte(0x07);
 
//Send SlaveAddress
//Send Command
 
//------------
start_bit();
tx_byte(0x01);
bit_out=0;
DataL=rx_byte();
bit_out=0;
DataH=rx_byte();
bit_out=1;
//Pecreg=rx_byte();
stop_bit();
return(DataH*256+DataL);
}

 
//-----------按键读取函数--------------
void key_scan(void)
{
  uchar key_temp1,key_temp2;
  key_temp1=key_get;
  if(key_temp1==0)
   {
   delay(30);
   key_temp2=key_get;
   if(key_temp1==key_temp2)
   {
 keyflag=1;
   }
   
   }

}
 //************  数码管初始*************
void inittimer1( void)
{
 cs=0;
 dispram[0]=0;
 dispram[1]=0;
 dispram[2]=0;
 dispram[3]=0;
 TMOD=0x90;
 TH1=0XEF;
 TL1=0XFF;
 EA=1;
 ET1=1;
}
//******************LED 显示子函数***********************
// ****************中断函数************************
void timer13ST(void) interrupt 3

 unsigned char k;
 TH1=0XEF;
 TL1=0XFF;
 TF1=0;
 if(cs>=3) cs=0;
 else cs++;
 writesegdata(dispram[cs]);
 k=1<<cs;
 writecsdate(k);   
 
}
//***************写函数*****************
void writesegdata(unsigned char seg)
{
 if(seg>10)
  seg=10;
 seg=seg_code[seg];
 P0=seg;
 _nop_();
 _nop_();
 P2&=0x1f;
 _nop_();
 _nop_();
 P2|=0xe0;
}
void writecsdate(unsigned char cs)
{
 cs&=0x0f;
 P0=~cs;
 _nop_();
 _nop_();
 P2&=0x3f;
 _nop_();
 _nop_();
 P2|=0xe0;
}

此帖出自51单片机论坛

最新回复

按位定义~  详情 回复 发表于 2015-9-8 15:56
点赞 关注
 

回复
举报

3404

帖子

6

TA的资源

裸片初长成(初级)

沙发
 
不能编译原因是什么啊?keli肯定有提示吧?
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS    SYMBOL:  TEM
这几个单词不能说不认识吧?就算不认识百度一下应该也知道吧。
TEM重定义了。uint Tem;float TEM ;在这儿,keli里面的变量是不区分大小写的,有的编译器好像区分。
此帖出自51单片机论坛
 
 
 

回复

160

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
为什么要一个大写一个小写
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复 沙发 jishuaihu 的帖子

谢谢了啊。。我开始没有看到那个错误。。十分感谢
此帖出自51单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
bdata uchar flag;//可位寻址数据
sbit bit_out=flag^7;
sbit bit_in=flag^0;

自学单片机,也在写这个测温的程序,能否详细解释一下上面这三句的意思
此帖出自51单片机论坛
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

6
 
dell秦时明月 发表于 2015-8-26 10:24
bdata uchar flag;//可位寻址数据
sbit bit_out=flag^7;
sbit bit_in=flag^0;

自学单片机,也在写这个 ...

按位定义~
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表