这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于MXL90614传感器不能修改地址问题

共4条 1/1 1 跳转至

关于MXL90614传感器不能修改地址问题

菜鸟
2017-05-01 16:49:51     打赏

最近在用mlx90614实现非接触红外线测量,但出现了问题。想向各位大神求助一下。

问题是用以下程序为什么无法写入地址。

#include<reg52.h>

#include<intrins.h>

//************************************

#define uint unsigned int

#define uchar unsigned char

#define Nack_counter 10

//**************端口定义**************

//LCD 控 制线接口 
sbit BF = P0^7;
sbit EN = P2^5;
sbit RS = P1^0;
sbit RW = P1^1;
sbit SCL=P2^1;//时钟线 
sbit SDA=P2^0;//数据线
//************数据定义****************
bdata uchar flag;//可位寻址数据 
sbit bit_out=flag^7;
sbit bit_in=flag^0;
uchar DataH,DataL,Pecreg; 
//************函数声明*****************************************
void start_bit(); //MLX90614 发起始位子程序
void stop_bit(); //MLX90614 发结束位子程序
uchar rx_byte(void); //MLX90614 接收字节子程序
void send_bit(void); //MLX90614 发送位子程序
void tx_byte(uchar dat_byte); //MLX90614 接收字节子程序
void receive_bit(void); //MLX90614 接收位子程序
void delay(uint N); //延时程序
void    delay5ms(void);//延时5ms
//void memread(void); //读温度数据
//void    wait(void);
//void    w_dat(unsigned char dat);
//void    w_cmd(unsigned char cmd);
//void    Init_LCD1602(void);
//void    write_hexnum(unsigned char n);
//void    display_num(unsigned char num);
//*************主函数*******************************************

void main()
{
SP=0x50;
SCL=1;
SDA=1;
_nop_();
 _nop_();
 _nop_();
 _nop_(); 
SCL=0;
delay(1000);
SCL=1;
//Init_LCD1602();
while(1)

{

start_bit();
tx_byte(0x00); //Send SlaveAddress 
tx_byte(0x2e); //Send Command //------------
tx_byte(0x51); 
bit_out=0; 
tx_byte(0x00);  
bit_out=1;
Pecreg=rx_byte(); 
stop_bit(); 
delay(50000);

}
}



//************************************ 
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 tx_byte(uchar dat_byte)

{

char i,n,dat; 
n=Nack_counter;
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(); 
if(n!=0)

{n--;
goto Repeat;} 
else
goto exit;
}
else
goto exit; 
Repeat:
start_bit(); 
goto TX_again;
exit: ;

}

//-----------发送一个位---------

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_();

}

//----------接收一个字节--------

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 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_();

}

//------------延时--------------

void delay(uint N)

{

uint i; 
for(i=0;i<N;i++)
_nop_();

}
void delay5ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=2;j>0;j--)
for(k=250;k>0;k--);
}




关键词: MXL90614     传感器     修改地址    

专家
2017-05-01 22:36:20     打赏
2楼
楼主确认硬件没有问题?

专家
2017-05-03 10:57:18     打赏
3楼

http://www.openedv.com/posts/list/48361.htm

这里有个STM32的MLX90614驱动代码,给你参考一下。



专家
2017-05-06 16:03:58     打赏
4楼

我看了一下手册,该元件是一个I2C的接口,楼主的程序表面上没有问题,楼主看下手册,是不是发送命令和发送地址 格式有没有问题。


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]