<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MSP430非模擬IIC總線(xiàn)控制程序

MSP430非模擬IIC總線(xiàn)控制程序

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò ) 收藏

IIC.C

#include
#include "IIC.h"

#define SLAVEADDR 0x50;

int tx_count;
int rx_count;
unsigned char I2CBuffer[3];
void Init_IIC(void)
{
//將P3.1和P3.3設置為I2C管腳
P3SEL = 0x0A;
//設置P3.1和P3.3管腳的方向
P3DIR&= ~0x0A;
//選擇為I2C模式
U0CTL |= I2C + SYNC;
//禁止I2C模塊
U0CTL &= ~I2CEN;
//設置I2C為7位地址模式,不使用DMA,
//字節模式,時(shí)鐘源為SMCLK,
//設置成傳輸模式
I2CTCTL = I2CTRX + I2CSSEL_2;
//定義從器件地址
I2CSA = SLAVEADDR;
//設置本身的地址
I2COA = 0x01A5;
//I2C時(shí)鐘為SMCLK / 160
I2CPSC = 159;
//SCL 高電平為:5 *I2C 時(shí)鐘
I2CSCLH = 0x03;
//SCL 低電平為:5 *I2C 時(shí)鐘
I2CSCLL = 0x03;
//I2C 模塊有效
U0CTL |= I2CEN;
tx_count = 0;
rx_count = 0;
}

void I2CWriteInit(void) //對于A(yíng)T24CXXX的寫(xiě)操作是置成主模式并置位中斷使能.
{
//主(Master)模式
U0CTL |= MST;
//傳輸模式,R/W 為:0
I2CTCTL |= I2CTRX;
//清除中斷標志
I2CIFG &= ~TXRDYIFG;
//發(fā)送中斷使能
I2CIE = TXRDYIE;
}

void I2CReadInit(void)
{
//接收模式,R/W 為:1
I2CTCTL &= ~I2CTRX;
//接收中斷使能
I2CIE = RXRDYIE;
}

void EEPROM_ByteWrite(unsigned char nAddr, unsigned char nVal)
{
//等待I2C模塊完成所有操作 //在選定的地址寫(xiě)入數據.
while (I2CDCTL&I2CBUSY) ;
//設置地址數據
I2CBuffer[1] = nAddr;
//設置數據
I2CBuffer[0] = nVal;
//設置緩沖區指針
tx_count = 1;
//寫(xiě)數據初始化
I2CWriteInit(); //設置為主模式
//發(fā)送數據的長(cháng)度
//1個(gè)控制字節,2個(gè)數據字節
I2CNDAT = 2;
//開(kāi)始和停止條件產(chǎn)生
//開(kāi)始I2C通信
I2CTCTL |= I2CSTT+I2CSTP;
return;
}

unsigned char EEPROM_CurrentAddressRead(void)
{
//等待I2C模塊完成所有操作
while (I2CDCTL&I2CBUSY);
//讀操作的初始化
I2CReadInit();
//主(Master)模式
U0CTL |= MST;
//接收1個(gè)字節的數據
I2CNDAT = 1;
//清除中斷標志
I2CIFG &= ~ARDYIFG;
//開(kāi)始接收,產(chǎn)生重新起始和停止條件
I2CTCTL |= I2CSTT + I2CSTP;
//等待傳輸完成
while ((~I2CIFG)&ARDYIFG) ;
//返回數據
return I2CBuffer[0];
}

unsigned char EEPROM_RandomRead(unsigned char nAddr)
{
//等待I2C模塊完成所有操作
while (I2CDCTL&I2CBUSY);
//設置地址
I2CBuffer[0] = nAddr;
//設置緩沖區指針
tx_count = 0;
//寫(xiě)操作初始化
I2CWriteInit();
//傳輸數據長(cháng)度
//1個(gè)控制字節和一個(gè)地址數據
I2CNDAT = 1;
//清除中斷標志
I2CIFG &= ~ARDYIFG;
//起始條件產(chǎn)生
I2CTCTL |= I2CSTT;
//等待傳輸完成
while ((~I2CIFG)&ARDYIFG);
//讀操作初始化
I2CReadInit();
//接收一個(gè)字節的數據
I2CNDAT = 1;
//清除中斷標志
I2CIFG &= ~ARDYIFG;
//開(kāi)始接收,產(chǎn)生重新起始和停止條件
I2CTCTL |= I2CSTT + I2CSTP;
//等待傳輸完成
while ((~I2CIFG)&ARDYIFG);
//返回數據
return I2CBuffer[0];
}

void EEPROM_AckPolling(void)
{
unsigned int count;
//等待I2C模塊完成所有操作
while (I2CDCTL&I2CBUSY);

count=0;
//清除I2CEN位
U0CTL &= ~I2CEN;
I2CTCTL |= I2CRM;
//使能I2C模塊
U0CTL |= I2CEN;
//設置NACKIFG標志
I2CIFG = NACKIFG;
while (NACKIFG & I2CIFG)
{
//清除中斷標志
I2CIFG=0x00;
//主(Master)模式
U0CTL |= MST;
//設置傳輸模式
I2CTCTL |= I2CTRX;
//產(chǎn)生起始條件
I2CTCTL |= I2CSTT;

//等待I2CSTT被清除
while (I2CTCTL & I2CSTT) ;
//產(chǎn)生停止條件
I2CTCTL |= I2CSTP;
//等待停止條件復位
while (I2CDCTL & I2CBUSY) ;
count = count + 1;
}

//清除I2CEN位
U0CTL &= ~I2CEN;
I2CTCTL &= ~I2CRM;
//使能I2C
U0CTL |= I2CEN;

return;
}


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>