调了好几个小时了,就是不知道问题在哪里,请高手们指点。
测量先不说,就是怎么读寄存器都没弄清。
看了中文的pdf了,但是还是没搞懂,先看看我的程序吧。
程序部分(已近将无关部分删除):
uchar code table[]="0123456789";
////////////////HMC5883/////////////////////////////////
void start() //开始信号
{
sda=1;
scl=1;
sda=0;
}
void stop() //停止
{
sda=0;
scl=1;
sda=1;
}
void respons() //应答
{
sda=1;
scl=1;
while(sda);
scl=0;
}
////////////////////////////////////////////////////////
void write_byte(uchar date)
{
uchar i;
for(i=0;i<8;i++)
{
date=date<<1;
scl=0;
sda=CY;
scl=1;
}
scl=0;
sda=1;
}
uchar read_byte()
{
uchar i,k;
scl=0;
sda=1;
for(i=0;i<8;i++)
{
scl=1;
k=(k<<1)|sda;
scl=0;
}
return k;
}
void write_hmc(uchar address,uchar date)
{
start();
write_byte(0x3c); //器件地址//写
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_hmc() //试调 有点乱。
{
uchar date;
//delay(1);
start();
write_byte(0x3d);
//delay(1);
respons();
// write_data(table[2]);
// delay(1);
// write_byte(address);
// write_data(table[2]);
//delay(1);
// respons();
// write_data(table[3]);
date=read_byte();
stop();
return date;
}
void init_hmc()
{
write_hmc(0x02,0x00);
}
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
void main()
{
// init_hmc();
while(1)
{
delay(10);
write_hmc(0x00,0x00);
delay(10);
// write_hmc(0x02,0x01);
// write_hmc(0x02,0x01);
// delay(10);
delay(10);
num=read_hmc();
delay(10);
num=read_hmc();
delay(10);
write_com(0xc0);
delay(200);
while(1);
}
}
此帖出自
小平头技术问答
这个我也参照51的程序写的,但读出结果是全是oxff,这是怎么回事?
一周热门 更多>