318
Code Example
SW_I2C.h
#include <msp430.h>
#include "delay.h"
#define SW_I2C_DIR P1DIR
#define SW_I2C_OUT P1OUT
#define SW_I2C_IN P1IN
#define SDA_pin BIT7
#define SCL_pin BIT6
#define SDA_DIR_OUT() do{SW_I2C_DIR |= SDA_pin;}while(0)
#define SDA_DIR_IN() do{SW_I2C_DIR &= ~SDA_pin;}while(0)
#define SCL_DIR_OUT() do{SW_I2C_DIR |= SCL_pin;}while(0)
#define SCL_DIR_IN() do{SW_I2C_DIR &= ~SCL_pin;}while(0)
#define SDA_HIGH() do{SW_I2C_OUT |= SDA_pin;}while(0)
#define SDA_LOW() do{SW_I2C_OUT &= ~SDA_pin;}while(0)
#define SCL_HIGH() do{SW_I2C_OUT |= SCL_pin;}while(0)
#define SCL_LOW() do{SW_I2C_OUT &= ~SCL_pin;}while(0)
#define SDA_IN() (SW_I2C_IN & SDA_pin)
#define I2C_ACK 0xFF
#define I2C_NACK 0x00
#define I2C_timeout 1000
void SW_I2C_init(void);
void SW_I2C_start(void);
void SW_I2C_stop(void);
unsigned char SW_I2C_read(unsigned char ack);
void SW_I2C_write(unsigned char value);
void SW_I2C_ACK_NACK(unsigned char mode);
unsigned char SW_I2C_wait_ACK(void);
SW_I2C.c
#include "SW_I2C.h"
void SW_I2C_init(void)
{
SDA_DIR_OUT();
SCL_DIR_OUT();
delay_ms(1);
SDA_HIGH();
SCL_HIGH();
}
void SW_I2C_start(void)
{
SDA_DIR_OUT();