为什么keil无法编译

2019-03-24 17:52发布

我最近在做一个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;
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
jishuaihu
1楼-- · 2019-03-24 21:27
不能编译原因是什么啊?keli肯定有提示吧?
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS    SYMBOL:  TEM
这几个单词不能说不认识吧?就算不认识百度一下应该也知道吧。
TEM重定义了。uint Tem;float TEM ;在这儿,keli里面的变量是不区分大小写的,有的编译器好像区分。
幻城
2楼-- · 2019-03-25 00:34
 精彩回答 2  元偷偷看……
sillman
3楼-- · 2019-03-25 04:41
谢谢了啊。。我开始没有看到那个错误。。十分感谢
dell秦时明月
4楼-- · 2019-03-25 09:37
bdata uchar flag;//可位寻址数据
sbit bit_out=flag^7;
sbit bit_in=flag^0;

自学单片机,也在写这个测温的程序,能否详细解释一下上面这三句的意思
海鸥094
5楼-- · 2019-03-25 14:26
 精彩回答 2  元偷偷看……

一周热门 更多>