请问各位大神有没调试过电流监测芯片INA226的,小弟最近在调试这块芯片,但是出不来数据,想请教各位大神。代码如下,#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define read_addr 0x81 //写配置寄存器时对应的器件地址
#define write_addr 0x80 //读转换结果时对应的器件地址
uchar H_AD; // H_AD用于存储高八位A/D转换结果
uchar L_AD; // L_AD用于存储低八位A/D转换结果
sbit SDA = P1^0;
sbit SCL = P1^1;
void delay_ms(uint n)
{
uchar i;
while(n--)
{
for(i=0;i<100;i++);
}
}
void Start(void)
{
SDA = 1;
SCL = 1;
_nop_();_nop_();_nop_();_nop_();
SDA = 0;
_nop_();_nop_();_nop_();_nop_();
}
void Stop(void)
{
SDA = 0;
SCL = 1;
_nop_();_nop_();_nop_();_nop_();
SDA = 1;
_nop_();_nop_();_nop_();_nop_();
}
void slave_ACK(void)
{
// SDA = 0;
// _nop_();_nop_();_nop_();_nop_();
// SCL = 1;
// _nop_();_nop_();_nop_();_nop_();
// SCL = 0;
uchar i=0;
SCL=1;
_nop_();_nop_();_nop_();_nop_();
while((SDA==1)&&(i<255))
i++;
SCL=0;
_nop_();_nop_();_nop_();_nop_();
}
void check_ACK(void)
{
SDA=1;
SCL=1;
F0=0;
if(SDA==1)
F0=1;
SCL=0;
}
void ATWriteByte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
SCL = 0;
_nop_();_nop_();_nop_();_nop_();
SDA = ((dat<<i)&0x80)?1:0;
SCL = 1;
}
SCL = 0;
}
uchar ATReadByte(void)
{
uchar i,temp = 0;
SDA = 1;
for(i=0;i<8;i++)
{
SCL = 0;
_nop_();_nop_();_nop_();_nop_();
SCL = 1;
_nop_();_nop_();_nop_();_nop_();
temp <<= 1;
if(SDA==1)
{
temp |= 0x01;
}
}
return temp;
}
void setting_INA226(void)
{
Start();
ATWriteByte(write_addr);
slave_ACK();
ATWriteByte(0x00);
slave_ACK();
ATWriteByte(0x42);
slave_ACK();
ATWriteByte(0x93);
slave_ACK();
ATWriteByte(write_addr);
slave_ACK();
ATWriteByte(0x01);
slave_ACK();
Stop();
}
void READ_INA226(void)
{
Start();
ATWriteByte(read_addr);
slave_ACK();
H_AD=ATReadByte();
check_ACK();
L_AD=ATReadByte();
Stop();
ES=0;
SBUF=H_AD;
while(TI==0);
TI=0;
SBUF=L_AD;
while(TI==0);
TI=0;
ES=1;
}
void init()
{
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
PS=1;
EA=1;
ES=1;
}
void main()
{
init();
setting_INA226();
READ_INA226();
}
请大神帮忙看看程序把。我的目的是想要测经过一个25毫欧姆的电阻的电流,从想从数据输出寄存器中读出分流电压。 |