📄 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 + -