貼壹個2274的i2c代碼,希望對妳有用。
包括“msp430x22x4.h”
unsigned int RxByteCtr
無符號int RxWord
無效總管(無效)
{
wdt CTL = wdt pw+WDTHOLD;//阻止WDT
p 1 dir | = 0x 01;// P1.0輸出
P3SEL | = 0x06//將I2C引腳分配給USCI_B0
UCB 0 CTL 1 | = UCS wrst;//啟用軟件復位
UCB 0 CTL 0 = UC MST+UC mode _ 3+UC sync;// I2C主機,同步模式
UCB 0 CTL 1 = UCS sel _ 2+UCS wrst;//使用SMCLK,保持軟件復位
UCB 0 br 0 = 12;//fSCL = sm clk/12 = ~ 100 khz
UCB 0 br 1 = 0;
UCB0I2CSA = 0x4e//設置從機地址
UCB 0 CTL 1 & amp;= ~ UCSWRST//清除軟件復位,恢復運行
IE2 | = UCB0RXIE//使能RX中斷
TACTL = TASSEL _ 2+MC _ 2;// SMCLK,contmode
while (1)
{
rx bytectr = 2;//加載RX字節計數器
UCB 0 CTL 1 | = uct xstt;// I2C開始條件
_ _ bis _ SR _ register(CPU off+GIE);//進入LPM0,使能中斷
//保持在LPM0中,直到所有數據
//被接收
if(rx word & lt;0x 1d 00)//& gt;28C?
p 1輸出和輸出。= ~ 0x 01;//否,P1.0 = 0
其他
p 1 out | = 0x 01;//是的,P1.0 = 1
_ _ disable _ interrupt();
tacctl 0 | = CCIE;// TACCR0中斷使能
_ _ bis _ SR _ register(CPU off+GIE);//進入LPM0,使能中斷
//保持在LPM0中,直到TACCR0
//中斷發生
TACCTL0 & amp= ~ CCIE;// TACCR0中斷禁用
}
}
#pragma vector = TIMERA0_VECTOR
_ _中斷void TA0_ISR(void)
{
_ _ BIC _ SR _ register _ on _ exit(CPU off);//退出LPM0
}
USCIAB0TX _ ISR的結構可以用來接收任何
// 2+字節數,方法是用字節數預加載RxByteCtr。
#pragma vector = USCIAB0TX_VECTOR
_ _中斷void USCIAB0TX_ISR(void)
{
rx bytectr-;//遞減RX字節計數器
if (RxByteCtr)
{
rx word =(unsigned int)UC B0 rx buf & lt;& lt8;//獲取接收到的字節
if (RxByteCtr == 1) //只剩壹個字節?
UCB 0 CTL 1 | = uct xstp;//生成I2C停止條件
}
其他
{
rx word | = UCB 0 rx buf;//獲取最終接收到的字節,
//組合MSB和LSB
_ _ BIC _ SR _ register _ on _ exit(CPU off);//退出LPM0
}
}