#include "mcp3421_2.h" //
#define uchar unsigned char
#define uint unsigned int
uchar wflag_2 = 0; //mcp写成功标志
/*MCP3421定义*/
//sbit MCP3421_SDA_2 = P1^3;
//sbit MCP3421_SCL_2 = P1^2; //电流
sbit MCP3421_SDA_2 = P1^5;
sbit MCP3421_SCL_2 = P1^4; //电压
void MCP3421_delayus_2(uint n)
{
while(n --);
}
/**************************MCP3421部分***************************/
/*起始条件*/
void mcp_start_2(void)
{
m.pire/*启动I2C总线的函数,当MCP3421_SCL_2为高电平时使MCP3421_SDA_2产生一个负跳变*/
MCP3421_SDA_2=1;
MCP3421_SCL_2=1;
MCP3421_delayus_2(10);
MCP3421_SDA_2=0;
MCP3421_delayus_2(10);
MCP3421_SCL_2=0;
MCP3421_delayus_2(10);
}
void mcp_stop_2()
汽车使命
{
/*终止I2C总线,当MCP3421_SCL_2为高电平时使MCP3421_SDA_2产生一个正跳变*/
MCP3421_SDA_2=0;
MCP3421_SCL_2=1;
MCP3421_delayus_2(10);
MCP3421_SDA_2=1;
MCP3421_delayus_2(10);
MCP3421_SCL_2=0;
//delay_mcp(5);
}
void mcp_ask_m_2()
{
MCP3421_SDA_2 = 0;
MCP3421_delayus_2(10);
MCP3421_SCL_2 = 1;
MCP3421_delayus_2(10);
MCP3421_SCL_2 = 0;
MCP3421_SDA_2 = 1;
}
/*主机发送非应答信号*/
void mcp_nask_m_2()
{
MCP3421_SDA_2 = 1;
MCP3421_delayus_2(10);
MCP3421_SCL_2 = 1;
MCP3421_delayus_2(10);
MCP3421_SCL_2 = 0;
MCP3421_SDA_2 = 0;
}
/*写字节*/
void mcp_wr_byte_2(uchar adata)
{
int i;
for(i = 0;i < 8;i ++)
{
if(adata & 0x80) MCP3421_SDA_2 = 1;
else MCP3421_SDA_2 = 0;
adata <<= 1;
MCP3421_SCL_2 = 1;
MCP3421_delayus_2(10);
MCP3421_SCL_2 = 0;
}
MCP3421_SDA_2 = 1;
玛莎拉蒂3200GTwhile(MCP3421_SDA_2);
MCP3421_SCL_2 = 1;
MCP3421_delayus_2(10);
if(MCP3421_SDA_2 == 0) wflag = 1;
else wflag = 0;
MCP3421_SCL_2 = 0;
}
/*读3字节*/
u32 mcp_read_2_byte_2() //18位转换
{
uchar i;
u32 value;
uchar valueh,valuem,valuel; //MCP3421 18位数据的三个字节,由高到低字节
MCP3421_SDA_2 = 1;
for(i = 0;i < 8;i ++) //高八位字节
{
MCP3421_SCL_2 = 1;
valueh <<= 1;
MCP3421_delayus_2(10);
if(MCP3421_SDA_2 == 1) valueh += 1;
MCP3421_SCL_2 = 0;
MCP3421_delayus_2(10);
}
mcp_ask_m_2();
for(i = 0;i < 8;i ++) //中八位字节
{
MCP3421_SCL_2 = 1;
valuem <<= 1;
MCP3421_delayus_2(10);
if(MCP3421_SDA_2 == 1) valuem += 1;
MCP3421_SCL_2 = 0;
MCP3421_delayus_2(10);
}
mcp_ask_m_2();
for(i = 0;i < 8;i ++) //低八位字节
{
MCP3421_SCL_2 = 1;
valuel <<= 1;
MCP3421_delayus_2(10);
if(MCP3421_SDA_2 == 1) valuel += 1;
MCP3421_SCL_2 = 0;
MCP3421_delayus_2(10);
}
钢筋重量偏差//ask_m();
mcp_nask_m_2(); //加此非应答信号,MCP3421停止输出配置寄存器的值,以便后续发出停止信号 mcp_stop_2();
value=valueh; //高八位字节
value=value<<8;
value|=valuem; //中八位字节
value=value<<8;
value|=valuel; //低八位字节
return value;
}
/*读转换值函数*/
float mcp_read_2()
{
湖南卫视成人礼uchar r = 1;
u32 value;
while(r)
{
mcp_start_2(); //启动
mcp_wr_byte(0xd1); //写入地址 写指令 最后位为1,是读操作
if(wflag == 0) break;
value=mcp_read_byte(); //读数据
r = 0;
}
return value;
}
/*写配置函数*/
void mcp_write_2(uchar cfg)
{
uchar w = 1;
while(w)
丁花香{
mcp_start_2(); //启动
mcp_wr_byte_2(0xd0); //写入地址 及 最后位为0,是写操作配置 最后位为1,是读操作配置
if(wflag == 0) break;
mcp_wr_byte(cfg); //写入配置参数 如0x8c,0x9c; 8:单次转换 9:连续转换;c:18位 3.75 sps ,PGA=1;
if(wflag == 0) break;
w = 0;
}
mcp_stop_2();
}
/*
void main()
{
mcp_write_2(0x9c);//写配置
}
*/