这是主程序 #include "msp430f5438.h" #include "IIC.H" void main( void ) { WDTCTL = WDTPW + WDTHOLD ; init_IIC(); send_IIC(255); delay_us(2); STOP_IIC(); while(1); } 这是IIC.C #include "IIC.H" #include "msp430x54x.h" #define SDA_H P2OUT |= BIT0; #define SDA_L P2OUT &= ~BIT0; #define SCK_H P2OUT |= BIT1; #define SCK_L P2OUT &= ~BIT1; #define SDA_send P2DIR |= 0xff; #define SDA_receive P2DIR &= 0xfe; #define SDA_IN P1IN; unsigned char receive_success = 0; void delay_us(unsigned char a) { while(a--); } void START_IIC(void) { SDA_H; SCK_H; delay_us(100); SDA_L; delay_us(20); } void STOP_IIC(void) { SDA_L; SCK_H; delay_us(100); SDA_L; delay_us(20); } unsigned char send_IIC(unsigned char data) { unsigned char i; for(i=0;i<=8;i++) { if(i == 8) { SDA_receive; SCK_H; SCK_L; delay_us(2); if(P1IN&&0xfe) receive_success = 1; else receive_success = 0; SDA_send; break; } else { SDA_send; SCK_H; if(data&0x80) SDA_H; if((data&0x80) == 0) SDA_L; SCK_L; delay_us(1); data <<= 1; } } } void init_IIC() { SDA_send; START_IIC(); send_IIC(0x98); delay_us(1); send_IIC(0x90); delay_us(1); send_IIC(0x00); delay_us(1); } 这是IIC.H #ifndef __IIC_H__ #define __IIC_H__ #include "msp430x54x.h" void START_IIC(void); void STOP_IIC(void); unsigned char send_IIC(unsigned char data); #endif