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

📄 iic.c

📁 TI最新推出的MSP430FG461X系列单片机的I2C例程,已调试通过,绝对可用.
💻 C
字号:
#include    <msp430xg46x.h>

#define  TRUE    1
#define  FALSE  0
#define	NO_ACK	(UCB0STAT & UCNACKIFG)



void init_i2c()
{	
	unsigned int i2c_baud;			/*I2C通信速率*/

	P3SEL  |= BIT1 + BIT2;			/*P3.1,P3.2选为I2C功能*/

	UCB0CTL1 |= UCSWRST;		/*控制寄存器位*/

	UCB0CTL0 |= UCMST + UCMODE_3 + UCSYNC;	/*I2C主,模式3为I2C*/

	UCB0CTL1 = UCSSEL_2 + UCSWRST;			/*时钟源选择SMCLK:8M*/

	i2c_baud = 1048576L / 100000L;

	UCB0BR0 = i2c_baud & 0xFF;
	UCB0BR1 = i2c_baud >> 8;

	UCB0CTL1 &= ~UCSWRST;
}


void i2c_start(unsigned char iic_addr,unsigned int sub_addr,unsigned char mode)
{
	UCB0I2CSA = iic_addr;
	if (mode == 0)
		UCB0CTL1 |= UCTR;
	UCB0CTL1 |= UCTXSTT;

	if((IFG2 & UCB0TXIFG) == UCB0TXIFG)
	{
		UCB0TXBUF = sub_addr & 0xFF;
	}	
        
	while((UCB0CTL1 & UCTXSTT) == UCTXSTT);		/*从设备确认地址*/
}

void i2c_stop(void)
{
	while((IFG2 & UCB0TXIFG) != UCB0TXIFG);		/*等待发送完*/
	UCB0CTL1 |= UCTXSTP;
	IFG2 &= ~UCB0TXIFG;
}


void i2c_send(unsigned char data)
{
	while((IFG2 & UCB0TXIFG) != UCB0TXIFG);		/*等待发送完*/
	UCB0TXBUF = data;
}


void i2c_recv(unsigned char *ptr)
{
	while(!(IFG2 & UCB0RXIFG));		/*等待接收完*/

	*ptr = UCB0RXBUF;
}



unsigned char i2c_write(unsigned char iic_addr,unsigned int sub_addr, unsigned char *ptr, unsigned int  n)
{
	unsigned int  i;

	i2c_start(iic_addr,sub_addr,0);    
    
	for(i = 0; i < n; i++)
	{
		if(NO_ACK)   /*未收到确认*/
		{
			i2c_stop();
			return FALSE;
		}
		else if(!NO_ACK)
			i2c_send(*ptr++); 
	}
    
	if(NO_ACK)    /*未收到确认*/
	{
		i2c_stop();
		return FALSE;
	}
        
	i2c_stop();     

	return TRUE;
}

unsigned char a = 10, b = 0;

void main()
{
    WDTCTL = WDTPW + WDTHOLD;
  init_i2c();
  
  i2c_write(0x50,0x00, &a, 1);
  
  while(1)
  {
      
      
  }
}

⌨️ 快捷键说明

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