#include <msp430.h>
unsigned char I2CBUF;
unsigned char checkbit;
#define SCL_H (P10OUT |= BIT2) // P10.2為SCL
#define SCL_L (P10OUT &= ~BIT2)
#define SDA_H (P10OUT |= BIT1) //p10.1為SDA
#define SDA_L (P10OUT &= ~BIT1)
#define SDA_OUT (P10DIR |= BIT1)
#define SDA_IN (P10DIR &= ~ BIT1)
void I2C_Start(void) //I2C開始信號(hào)
{
SDA_OUT;
SCL_L;
SDA_H;
__delay_cycles(5);
SCL_H;
__delay_cycles(5);
SDA_L;
__delay_cycles(5);
SCL_L;
__delay_cycles(5);
}
unsigned char testACK(void) {
SDA_IN;
__delay_cycles(5);
SCL_H;
__delay_cycles(5);
checkbit = (P10IN & BIT1) >> 4;
__delay_cycles(5);
SCL_L;
__delay_cycles(5);
return (checkbit);
}
void I2C_ACK(void) //應(yīng)答信號(hào)
{
SDA_OUT;
SCL_L;
SDA_L;
__delay_cycles(5);
SCL_H;
__delay_cycles(5);
SCL_L;
__delay_cycles(5);
SDA_H;
}
void I2C_NACK(void) {
SDA_OUT;
SDA_H;
__delay_cycles(5);
SCL_H;
__delay_cycles(5);
SCL_L;
__delay_cycles(5);
}
void I2C_STOP(void) //產(chǎn)生結(jié)束信號(hào)
{
SCL_L;
__delay_cycles(5);
SDA_L;
__delay_cycles(5);
SCL_H;
__delay_cycles(5);
SDA_H;
__delay_cycles(5);
}
void I2C_WRITE(unsigned char data)
{
SDA_OUT;
unsigned char i;
for (i = 8; i > 0; i--) //高位循環(huán)8次,發(fā)送1個(gè)字節(jié)數(shù)據(jù)
{
if (data & 0x80) //判斷數(shù)據(jù)高位是0還是1
{
SDA_H; //高位數(shù)據(jù)寫1
}
else
{
SDA_L;
}
SCL_H;
__delay_cycles(5); //發(fā)送數(shù)據(jù)
SCL_L;
__delay_cycles(5);
data <<= 1;
}
}
unsigned char I2C_READ(void)
{
unsigned char j;
unsigned char BUFFER = 0X00;
SDA_IN;
for (j = 8; j >0; j--) //高位循環(huán)8次,發(fā)送1個(gè)字節(jié)數(shù)據(jù)
{
SCL_H;
__delay_cycles(5);
BUFFER <<= 1;
if ((P10IN & BIT1) == BIT1) //判斷數(shù)據(jù)高位是0還是1
{
BUFFER |= 0X01; //高位數(shù)據(jù)寫1
}
else
{
BUFFER |= 0XFE;
}
__delay_cycles(5); //發(fā)送數(shù)據(jù)
SCL_L;
__delay_cycles(5);
}
return BUFFER;
}
void C16_WRITEDATA(unsigned char address, unsigned char DATA)
{
I2C_Start();
I2C_WRITE(address);
testACK();
I2C_ACK();
I2C_WRITE(0x00);
testACK();
I2C_ACK();
I2C_WRITE(DATA);
I2C_STOP();
}
unsigned char C16_READEDATA(unsigned char address)
{
unsigned char READDATA;
I2C_Start();
I2C_WRITE(0XA1);
testACK();
I2C_ACK();
I2C_WRITE(address);
I2C_Start();
testACK();
I2C_ACK();
I2C_WRITE(0XA1);
READDATA = I2C_READ();
I2C_STOP();
return READDATA;
}
int main(void)
{
const int DATA = 0X88;
unsigned char READBUFFER;
WDTCTL = WDTPW + WDTHOLD;
P10DIR |= BIT1 + BIT2;
P2DIR |= BIT0;
P2OUT &= ~BIT0;
C16_WRITEDATA(0X00, DATA);
__delay_cycles(5);
READBUFFER = C16_READEDATA(0X00);
while (1)
{
if (READBUFFER == 0X88)
{
P2OUT |= BIT0;
} else {
P2OUT &= ~ BIT0;
}
__delay_cycles(15);
}
}
上一篇:MSP430系列串口波特率計(jì)算方法
下一篇:MSP430F169(四)——淺談F169看門狗
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- 從設(shè)計(jì)概念到 FPGA 原型僅需數(shù)分鐘,印度 InCore 完成 SoC Generator 平臺(tái)硅驗(yàn)證
- 消息稱因難尋客戶,三星推遲美國芯片工廠的完工時(shí)間
- BOE(京東方)聯(lián)合榮耀打造榮耀Magic V5 以領(lǐng)先LTPO技術(shù)打造行業(yè)新標(biāo)桿
- 華為ADS 4發(fā)布:多傳感器融合,提升自動(dòng)駕駛安全性
- 曉鶯說:線控制動(dòng)變革風(fēng)云
- 大眾商用車推出AirConsole 將其信息娛樂系統(tǒng)擴(kuò)展為游戲機(jī)
- 福州大學(xué)發(fā)明新機(jī)器視覺傳感器 可使機(jī)器人對(duì)極端光照做出超快反應(yīng)
- 蘋果獲沉浸式虛擬顯示器相關(guān)的專利
- 英特爾汽車“折戟”,十年布局一夜歸零