?? main.c
字號:
#include "msp430x22x4.h"
/*此程序是USCIB0的I2C模式從機程序
首先按下圖連接好導線,在啟動主機程序前先啟動從機程序
然后再啟動主機程序,從機程序將每次收到的數據以中斷的方式存入0400開始的ram中
當主機發滿100的數據時,在最后一位后面加入停止位,從機接收到停止位時,進入相應中斷,
并在中斷服務中,設置sp,來使主程序退出低功耗
/|\ /|\
MSP430x22x4 10k 10k MSP430x22x4
slave | | master
----------------- | | -----------------
-|XIN P3.1/UCB0SDA|<-|---+->|P3.1/UCB0SDA XIN|-
32kHz | | | | | 32kHz
-|XOUT | | | XOUT|-
| P3.2/UCB0SCL|<-+----->|P3.2/UCB0SCL |
| | | |
*/
__no_init char data_ptr[100] @ 0x0400;//定義接收緩存的首地址為0x0400
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
UCB0CTL0=UCSYNC+UCMODE_3; //UCB0為I2C從機模式
UCB0I2COA=88; //設定本機從機地址位88
UCB0CTL1 &=~UCSWRST; //進入I2C工作模式
UCB0I2CIE |=UCSTPIE+UCSTTIE; //開始位和停止位中斷使能
IE2 |=UCB0RXIE; //使能I2C接收中斷
_BIS_SR(CPUOFF + GIE); //進入低功耗0
_NOP(); //用于調試
while(1);
return 0;
}
#pragma vector = USCIAB0TX_VECTOR //數據接收中斷服務
__interrupt void i2c_rx_isr(void)
{
static char i=0;
data_ptr[i]=UCB0RXBUF; //將收到的數據存入0x0400開始的RAM中
i++;
}
#pragma vector = USCIAB0RX_VECTOR //數據開始,停止位標志中斷服務
__interrupt void i2c_stt_stp(void)
{
if(UCSTPIFG&UCB0STAT)
{
_BIC_SR_IRQ(LPM0_bits); //當接收到停止位時退出低功耗
}
UCB0STAT &=~(UCSTPIFG+UCSTTIFG); //清開始,停止標志為
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -