?? main.c
字號:
#include "msp430x22x4.h"
/*此程序是USCIB0的I2C模式主機程序
首先按下圖連接好導線,在啟動主機程序前先啟動從機程序
然后再啟動主機程序,主機連續發送100個數據,當發完后在最后一個字節后加入停止位
/|\ /|\
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; //關看門狗
BCSCTL1 =CALBC1_1MHZ; //設定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; //設定從機地址為88
UCB0CTL1 &=~UCSWRST; //進入I2C工作模式
IE2 |=UCB0TXIE; //使能UCB0TX發送中斷
UCB0CTL1 |=UCTR+UCTXSTT; //發送起始位,并將主機設為發送模式
_BIS_SR(CPUOFF + GIE); //進入低功耗0
while(UCTXSTP&UCB0CTL1); //等待停止位發送完畢
_NOP();
for(;;);
return 0;
}
#pragma vector = USCIAB0TX_VECTOR //發送中斷服務
__interrupt void i2c_tx_isr(void)
{
if(send_data!=100) //發100個數據?
{
UCB0TXBUF=send_data;
send_data++;
}
else //100個數據發完則發送停止位
{
UCB0CTL1 |=UCTXSTP; //發停止位
IFG2 &=~UCB0TXIFG; //清發送標志位
_BIC_SR_IRQ(LPM0_bits); //發完退出低功耗
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -