#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; //使能 SW
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; //主机模式
UCB0CTL1 = UCSSEL_2 + UCSWRST; //时钟 SMCLK 保持 SW reset
UCB0BR0 = 12; //通信频率fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 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);
}