|
網(wǎng)上看到的mcp3421 iic驅(qū)動(dòng) 望對(duì)你有幫助
單片機(jī)源程序如下:
-
- #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;
- //
- // }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|