mcp3421驱动程序

#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);//写配置
}
*/

本文发布于:2024-09-23 15:17:57,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/398881.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:配置   停止   信号   函数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议