标题:
网上看到的mcp3421 iic单片机驱动程序
[打印本页]
作者:
tk.minh
时间:
2019-4-19 16:37
标题:
网上看到的mcp3421 iic单片机驱动程序
网上看到的mcp3421 iic驱动 望对你有帮助
单片机源程序如下:
#include "mcp3421.h"
#include "delay.h"
void I2CStart(u8 ch)
{
EA=0;
switch(ch)
{
case 1:
{
SDA_1=1;
Delay_ms(10) ;
SCL_1=1;
Delay_ms(10) ;
SDA_1=0;
Delay_ms(10) ;
SCL_1=0;
}break;
case 2:
{
SDA_2=1;
Delay_ms(10);
SCL_2=1;
Delay_ms(10);
SDA_2=0;
Delay_ms(10);
SCL_2=0;
}break;
default:break;
}
}
void I2CStop(u8 ch)
{
switch(ch)
{
case 1:
{
SCL_1=0;
Delay_ms(10);
SDA_1=0;
Delay_ms(10);
SCL_1=1;
Delay_ms(10);
SDA_1=1;
EA=1;
}break;
case 2:
{
SCL_2=0;
Delay_ms(10);
SDA_2=0;
Delay_ms(10);
SCL_2=1;
Delay_ms(10);
SDA_2=1;
EA=1;
}break;
default:break;
}
}
void WaitAck(u8 ch)
{
u8 i=20;
switch(ch)
{
case 1:
{
SDA_1=1;
Delay_ms(10);
SCL_1=1;
while(i--){
if(SDA_1==1)
{
SCL_1=0;
Delay_ms(10);
SCL_1=1;
}
else
SCL_1=0;
}
return;
}break;
case 2:
{
SDA_2=1;
Delay_ms(10);
SCL_2=1;
while(i--){
if(SDA_2==1)
{
SCL_2=0;
Delay_ms(10) ;
SCL_2=1;
}
else
SCL_2=0;
}
return;
}break;
default:break;
}
}
void SendAck(u8 ch)
{
switch(ch)
{
case 1:
{
SDA_1=0;
Delay_ms(10);
SCL_1=1;
Delay_ms(10);
SCL_1=0;
}break;
case 2:
{
SDA_2=0;
Delay_ms(10) ;
SCL_2=1;
Delay_ms(10);
SCL_2=0;
}break;
default:break;
}
}
void SendNotAck(u8 ch)
{
switch(ch)
{
case 1:
{
SDA_1=1;
Delay_ms(10);
SCL_1=1;
Delay_ms(10);
SCL_1=0;
}break;
case 2:
{
SDA_2=1;
Delay_ms(10) ;
SCL_2=1;
Delay_ms(10) ;
SCL_2=0;
}break;
default:break;
}
}
void I2CSendbyte(u8 ch,u8 t)
{
u8 i=8;
switch(t)
{
case 1:
{
while(i--)
{
SCL_1=0;
Delay_ms(10);
SDA_1=(bit)(ch&0x80);
ch<<=1;
Delay_ms(10);
SCL_1=1;
Delay_ms(10);
}
SCL_1=0;
}break;
case 2:
{
while(i--)
{
SCL_2=0;
Delay_ms(10);
SDA_2=(bit)(ch&0x80);
ch<<=1;
Delay_ms(10);
SCL_2=1;
Delay_ms(10);
}
SCL_2=0;
}break;
default:break;
}
}
u8 I2CRecebyte(u8 ch)
{
u8 i=8; u8 ddata=0;
switch(ch)
{
case 1:
{
SDA_1=1;
while(i--){
ddata<<=1;
SCL_1=0;
Delay_ms(10);
SCL_1=1;
Delay_ms(10);
ddata|=SDA_1;
}
SCL_1=0;
}break;
case 2:
{
SDA_2=1;
while(i--){
ddata<<=1;
SCL_2=0;
Delay_ms(10);
SCL_2=1;
Delay_ms(10);
ddata|=SDA_2;
}
SCL_2=0;
return ddata;
}break;
default:break;
}
return ddata;
}
void WRITE_MCP3421(u8 wr_data,u8 ch)
{
switch(ch)
{
case 1:
{
I2CStart(1);
I2CSendbyte(0xd0,1);
WaitAck(1);
I2CSendbyte(wr_data,1);
WaitAck(1);
I2CStop(1);
}break;
case 2:
{
I2CStart(2);
I2CSendbyte(0xd0,2);
WaitAck(2);
I2CSendbyte(wr_data,2);
WaitAck(2);
I2CStop(2);
}break;
default:break;
}
}
void READ_MCP3421(u8 ch)
{
switch(ch)
{
case 1:
{
I2CStart(1);
I2CSendbyte(0xd1,1);
WaitAck(1);
elech=I2CRecebyte(1);
SendAck(1);
elecl=I2CRecebyte(1);
SendAck(1);
mcp_busy=I2CRecebyte(1);
SendNotAck(1);
I2CStop(1);
}break;
case 2:
{
I2CStart(2);
I2CSendbyte(0xd1,2);
WaitAck(2);
elech=I2CRecebyte(2);
SendAck(2);
elecl=I2CRecebyte(2);
SendAck(2);
mcp_busy=I2CRecebyte(2);
SendNotAck(2);
I2CStop(2);
}break;
default:break;
}
}
//
// u32 Get_Adc(u8 ch)
// {
// u32 vol=0;
// switch(ch)
// {
// case 1:
// {
// WRITE_MCP3421(0x8d,1);
// vol = READ_MCP3421(1);
// }break;
// case 2:
// {
// WRITE_MCP3421(0x8d,2);
// vol =READ_MCP3421(2) + 1;
// }break;
// default:break;
// }
// return vol;
//
// }
复制代码
作者:
aking991
时间:
2019-6-10 10:48
太好了,我虽对这个芯片已用很久了,但都是自己用经验测试写出来的,看到这个,我才觉行我写出来的差距,谢谢分享,我又可以用这种方法来试验了
作者:
cjtdz
时间:
2019-10-16 11:09
下载学习一下
作者:
9291806
时间:
2020-5-27 22:46
谢谢分享,下来学习下。
作者:
cdwess
时间:
2020-7-14 14:14
谢谢,刚用这片AD,学习下
作者:
lsx116
时间:
2021-12-13 00:40
对于我们新手来说 一条备注都没有搞个蛋
作者:
duckfans1
时间:
2023-6-17 23:12
头文件呢
作者:
lksbbs
时间:
2024-1-13 20:57
有没有人知道,只读了第一个字节,后面就是读的0了,应答ACK应该是没问题的
作者:
cy009
时间:
2024-2-24 13:08
抄也不会抄,mcp3421.h在哪里?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1