?? main.c
字號:
#include "msp430x22x4.h"
/*此程序是USCIB0的I2C模式主機程序
首先按下圖連接好導(dǎo)線,在啟動主機程序前先啟動從機程序
然后再啟動主機程序,主機連續(xù)發(fā)送100個數(shù)據(jù),當(dāng)發(fā)完后在最后一個字節(jié)后加入停止位
/|\ /|\
MSP430x22x4 10k 10k MSP430x22x4
slave | | master
----------------- | | -----------------
-|XIN P3.1/UCB0SDA|<-|---+->|P3.1/UCB0SDA XIN|-
32kHz | | | | | 32kHz
-|XOUT | | | XOUT|-
| P3.2/UCB0SCL|<-+----->|P3.2/UCB0SCL |
| | | |
*/
char send_data=0;
int main( void )
{
WDTCTL=WDTPW+WDTHOLD; //關(guān)看門狗
BCSCTL1 =CALBC1_1MHZ; //設(shè)定DCO為1MHZ
DCOCTL =CALBC1_1MHZ;
P1DIR |=BIT0; //LED能使
P3SEL |=BIT1+BIT2; //p3.1為UCB0SDA,P3.2為UCB0SCL
UCB0CTL1 |=UCSSEL1; //時鐘源選擇smclk
UCB0BR1=0; //SMCLK/11
UCB0BR0=11;
UCB0CTL0 |=UCMST+UCSYNC+UCMODE1+UCMODE0; //選擇I2C主機模式
UCB0I2CSA=88; //設(shè)定從機地址為88
UCB0CTL1 &=~UCSWRST; //進入I2C工作模式
IE2 |=UCB0TXIE; //使能UCB0TX發(fā)送中斷
UCB0CTL1 |=UCTR+UCTXSTT; //發(fā)送起始位,并將主機設(shè)為發(fā)送模式
_BIS_SR(CPUOFF + GIE); //進入低功耗0
while(UCTXSTP&UCB0CTL1); //等待停止位發(fā)送完畢
_NOP();
for(;;);
return 0;
}
#pragma vector = USCIAB0TX_VECTOR //發(fā)送中斷服務(wù)
__interrupt void i2c_tx_isr(void)
{
if(send_data!=100) //發(fā)100個數(shù)據(jù)?
{
UCB0TXBUF=send_data;
send_data++;
}
else //100個數(shù)據(jù)發(fā)完則發(fā)送停止位
{
UCB0CTL1 |=UCTXSTP; //發(fā)停止位
IFG2 &=~UCB0TXIFG; //清發(fā)送標(biāo)志位
_BIC_SR_IRQ(LPM0_bits); //發(fā)完退出低功耗
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -