TI中文支持网
TI专业的中文技术问题搜集分享网站

LunchPad G2553 关于硬件I2C控制IO拓展芯片PCF8574(8个IO) 不知为什么,指令发出去没有响应

#include <msp430g2553.h>

//宏定义
#define Slave_Add 0x42		//定义从机地址PCF8574  A2- A1- A0+地址:0100 001 0

unsigned char TXData;

//声明
void I2C_Init();
void Signal_LED();

int main(void)
{
	WDTCTL = WDTPW + WDTHOLD;// Stop WDT
	I2C_Init();

//	IE2 |= UCB0TXIE;
	__delay_cycles(100000);//给予从机准备时间
	//1

	TXData = Slave_Add;// 使能发送中断
	UCB0TXBUF = TXData;

	UCB0CTL1|=UCTR;		//发送模式
	UCB0CTL1 |= UCTR + UCTXSTT;
	while (UCB0CTL1 & UCTXSTT);//保证起始条件响应成功
	//2
	TXData = 0x00;
	UCB0TXBUF = TXData;

	UCB0CTL1|=UCTR;
	UCB0CTL1 |= UCTR + UCTXSTT;
	while (UCB0CTL1 & UCTXSTT);

	UCB0CTL1 |= UCTXSTP;	 	//stop
	while(UCB0CTL1&UCTXSTP);	//发送完成
	Signal_LED();
	while (1)
	{
		__bis_SR_register(CPUOFF + GIE);// 低功耗模式0
	}
}
void I2C_Init()
{P1SEL |= BIT6 + BIT7;P1SEL2|= BIT6 + BIT7;UCB0CTL1 |= UCSWRST;//使能  SWUCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;//主机模式UCB0CTL1 = UCSSEL_2 + UCSWRST;//时钟  SMCLK保持 SW resetUCB0BR0 = 12;//通信频率fSCL = SMCLK/12 = ~100kHzUCB0BR1 = 0;UCB0I2CSA = Slave_Add;//从机地址UCB0CTL1 &= ~UCSWRST;//清除 SW reset, resume operation
}

void Signal_LED()
{P1DIR = BIT0;P1OUT |= BIT0;_delay_cycles(100000);P1OUT ^= BIT0;_delay_cycles(100000);
}
kqian0327:

你好,

请问下,IIC的波形有问题吗?

你拿示波器钩一下波形,看IO扩展芯片有没有正确的被操作吧。

而且我只看到你初始化了IIC,没有进行后续操作呀。

灰小子:

回复 kqian0327:

我觉得可能是时序的问题,建议用示波器或者逻辑分析仪看看时序

duoze sun:

回复 kqian0327:

我已经解决,问题在PCF8574 A  和PCF8574  不一样,地址搞混了

shanglin long:

回复 duoze sun:

。。。新手想请教一下,这个代码为什么我想用的时候,会卡在 while (UCB0CTL1 & UCTXSTT);//保证起始条件响应成功 这一句这里。芯片是PCD8574P,用的MSP430G2553。A0,A1,A2我接的低,所以把Slave_Add改成了0x40.可是还是不行。。

灰小子:

回复 shanglin long:

建议先确认一下你的PCD8574P是否和楼主的器件一样

赞(0)
未经允许不得转载:TI中文支持网 » LunchPad G2553 关于硬件I2C控制IO拓展芯片PCF8574(8个IO) 不知为什么,指令发出去没有响应
分享到: 更多 (0)