⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 430i2c.c

📁 MSP430驱动ads1110源程序用c写的供望星空dx参考.rar
💻 C
字号:
// This module is ADS1110 Driver
#include <msp430X11X1.h>
#include "430i2c.h"



void InitI2cPort(void)
{
	P2DIR |=SCL;//Set SDA and SCL to output mode
	P1DIR |=SDA;
	P2OUT |=SCL;//SDA=1,SCL=1.
	P1OUT |=SDA;
}
void I2C_delay(void)
{ unsigned char i;
        for (i=0;i<2;i++);
}
void i2c_clock(void)
{
        P2OUT &=~SCL;//SCL=0
        I2C_delay();
        P2OUT |=SCL;//SCL=1
        I2C_delay();
        P2OUT &=~SCL;//SCL=0
}
/* Generate a ACK */
/* The Master Send  a ACK to device*/
void ack(void)
{
	P2OUT &=~SCL;//SCL=0
	I2C_delay();
	SDA_OUT;//SDA output mode		
        P1OUT &=~SDA;//SDA=0;
        I2C_delay();
        P2OUT |=SCL;// SCL=1
        I2C_delay();
        P2OUT &=~SCL;//SCL=0
        SDA_IN;// SDA input mode
}
/*Receive device sending a ack*/
void RcvAck(void)
{
    SDA_IN;
    I2C_delay();
    P2OUT |=SCL;
    I2C_delay();
    P2OUT &=~SCL;
    SDA_IN;
}
    
/* The Master send a NACK to device*/
 /* Generate a NACK */
void nack(void)
{
	SDA_OUT;
      P2OUT |=SDA;//SDA=1
      I2C_delay();
      P2OUT |=SCL;//SCL=1
      I2C_delay();
      P2OUT &=~SCL;//SCL=0
      SDA_IN;
}
//Waiting for a ACK from device
void wait_ack(void)
{
        unsigned char i;
        SDA_IN;
        I2C_delay();
        P2OUT |=SCL;//SCL=1
        I2C_delay();
        i=0x0FF;
        do
        {
        }
        while(--i!=0);
        P2OUT &=~SCL;//SCL=0;
        SDA_OUT;
}
/*Start I2C BUS */
void start_i2c(void)
{
	SDA_OUT;
      P1OUT |=SDA;//SDA=1
      P2OUT |=SCL;// SCL=1
        I2C_delay();
      P1OUT &=~SDA;//SDA=0
      I2C_delay();
      P2OUT &=~SCL;// SCL=0;
}
/* Stop I2C BUS*/
void stop_i2c(void)
{
	SDA_OUT;
      P1OUT &=~SDA;//SDA=0
      I2C_delay();
      P2OUT |=SCL;//SCL=1
      I2C_delay();
      P1OUT |=SDA;//SDA=1
}
/* Send one unsigned char data to I2C Bus */
/* Inport: unsigned char data*/
/* Return : none*/
void outbyt(uchar i2c_data)
{
    unsigned char i;
    	SDA_OUT;
      for(i=0;i<8;i++)
      {
		if(i2c_data&0x80)
         	{	
         		P1OUT |=SDA;//SDA=1
         	}
           	else 
           	{
           		P1OUT &=~SDA;//SDA=0
           	}	
         i2c_clock();
         i2c_data <<=1;
      }
}
/* Read a byte Data from I2c device*/
uchar inbyt(void)
{
   unsigned char i,i2c_data,TmpIn;
   	SDA_IN;//SDA turn to input mode
      i2c_data=0;
      i=8;
      while(i--)
      {
         	i2c_data<<=1;
        	P2OUT &=~SCL;//SCL=0
         	I2C_delay();
         	P2OUT |=SCL;//SCL=1
         	TmpIn=P1IN;
         	TmpIn &=SDA;
         	TmpIn >>=2;
         	i2c_data|=TmpIn;
         	I2C_delay();
     }
     P2OUT &=~SCL;//SCL=0
       return(i2c_data);
}
/*Write ADS1110 Configuration Register*/
// Inport: Value of Configuration Register
// Return :none
void WriteCfgReg(uchar CfgData)
{
	start_i2c();
	outbyt(I2C_WRITE);
	wait_ack();
	outbyt(CfgData);
	wait_ack();
	stop_i2c();
}
// Read data from ADS1110 Data register
uint ReadDataCfgReg(uchar ReadType )
{
	uint Tmp,Tmp1;
	start_i2c();
	outbyt(I2C_READ);
	RcvAck();
	Tmp=inbyt()*0x100;
	ack();
	Tmp+=(inbyt());
	ack();
	Tmp1=inbyt();
	ack();
	stop_i2c();
	if(ReadType==READ_DATA)
	{
	    if(Tmp >0x7FFF)
	    {
	        Tmp=0x0000;
		return(Tmp);
	    }
	    else
	    {
	        return(Tmp);
	    }
		
	}
	else
	{
		return(Tmp1);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -