小白问一个关于mlx90614的问题,,,

2019-07-15 15:36发布

void start(void)
{
  //P2DIR |= 0x03;
  P1DIR |= 0x00;
  mlx_out;
  SDA_H;
  delay_us(5);
  //P2DIR |= BIT1;
  SCK_H;
  delay_us(5);
  //P2DIR |= BIT0;
  SDA_L;
  delay_us(5);
  //P2DIR |= BIT1;
  SCK_L;
  delay_us(5);
}

void stop(void)
{
  //P2DIR |= 0x03;
// P2DIR |= BIT1;
  P1DIR |= 0x00;
  mlx_out;
  SCK_L;
  delay_us(5);
  //P2DIR |= BIT0;
  SDA_L;
  delay_us(5);
  //P2DIR |= BIT1;
  SCK_H;
  delay_us(5);
  //P2DIR |= BIT0;
  SDA_H;
}

void send_bit(void)
{
if(bit_out==1)
{
//P2DIR |= BIT0;
  mlx_out;
SDA_H; //发1
}
else
{
//P2DIR |= BIT0;
  mlx_out;
SDA_L; //发0
}
delay_us(2);
//_NOP();
//P2DIR |= BIT1;
mlx_out;
SCK_H; //上升沿
delay_us(4);delay_us(4);
//P2DIR |= BIT1;
SCK_L;
delay_us(4);delay_us(4);
}

void read_bit(void)
{
//P2DIR |= BIT0;
  mlx_out;
SDA_H; //数据端先置1
bit_in=1;
//P2DIR |= BIT1;
SCK_H; //上升沿
delay_us(4);delay_us(4);
P1OUT &= ~BIT1;;
bit_in = ((P2IN) & BIT0); //读数据
//P2DIR |= 0x03;
delay_us(1);//
//_NOP();
//P2DIR |= BIT1;
mlx_out;
SCK_L;
delay_us(4);delay_us(4);
}

//
void SendByte(uchar number)
{
uchar i,n,dat;
n=Nack_number; //可以重发次数
Send_again:
dat=number;
for(i=0;i<8;i++) //8位依次发送
{
if(dat&0x80) //取最高位
{
bit_out=1; //发1  。。。。。。。。。。。。。。。。。。
}
else
{
bit_out=0; //发0  ..............................
}
send_bit(); //发送一个位
dat=dat<<1; //左移一位
}
read_bit(); //接收1位应答信号
if(bit_in==1) //无应答时重发    ....................................
{
stop();
if(n!=0)
{
n--; //可以重发Nack_number=10次
goto Repeat; //重发
}
else
{
goto exit; //退出
}
}
else
{
goto exit;
}
Repeat:
start(); //重新开始
goto Send_again; //重发
exit: ; //退出
}

//
uint ReadByte(void)
{
uint i,dat;
dat=0; //初值为0
for(i=0;i<8;i++)
{
dat=dat<<1; //右移
read_bit(); //接收一位
if(bit_in==1)
{
dat |= 0x01;//dat |= 0x01; //为1时对应位加1
}
}
//P2DIR |= BIT0;
SDA_L; //发送应答信号0
send_bit();
return dat; //带回接收数据
}
//
uint readtemp(void)
{
//P2DIR |= BIT1;
//SCK_L;
start(); //开始条件
SendByte(0x00); //发送从地址00
SendByte(0x07); //发送命令
start(); //开始条件
SendByte(0x01); //读从地址00
bit_out=0;
tempL=ReadByte(); //读数据低字节
bit_out=0;
tempH=ReadByte(); //读数据高字节
bit_out=1;
err=ReadByte(); //读错误信息码
stop(); //停止条件
return(tempH*256+tempL);
}   这是mlx90614部分的代码,,运行结果总是0,,,大家帮帮忙吧

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。