因为一个特殊的原因,必须用msp430g2553实现IIC通信,硬件的没弄出来,想软件模拟一下,结果本来预计一晚上的任务,硬生生变成了一晚上加一早上。。。。这块单片机IIC通信的主要槽点在于,你一旦把SDA引脚切换成输入模式进行ACK检测就会直接断开整个时序,我不是很懂为什么,反正我把它去了就好了,下面是根据山外的SCCB底层库改编的msp430g2553的IIC通信代码.
/**IIC.c**/
#include "MSP430G2553.h"
#include "IIC.h"
#define IIC_OUT P2OUT
#define IIC_DIR P2DIR
#define IIC_SEL P2SEL
#define IIC_IN P2IN
#define SCL_H() IIC_OUT|=BIT0
#define SCL_L() IIC_OUT&=~BIT0
#define SCL_DDR_OUT() IIC_DIR|=BIT0
#define SCL_DDR_IN() IIC_DIR&=~BIT0
#define SDA_H() P1OUT|=BIT4
#define SDA_L() P1OUT&=~BIT4
#define SDA_IN() P1IN&BIT4
#define SDA_DDR_OUT() P1DIR|=BIT4
#define SDA_DDR_IN() P1DIR&=~BIT4
static void SCCB_delay(uint16 i);
/*!
* @brief SCCB延迟函数
* @param time 延时时间
* @since v5.0
*/
static void SCCB_delay(volatile uint16 time)
{
while(time)
{
time--;
}
}
/*!
* @brief SCCB管脚配置
* @since v5.0
*/
void SCCB_GPIO_init(void)
{
IIC_SEL&=~BIT0;
P1SEL&=~BIT4;
//P2REN |=(BIT0+BIT1);
SCL_DDR_OUT();
SDA_DDR_OUT();
}
/*!
*