主题中讨论的其他器件: MSP430WARE
我已经为 I2C 编写了用于连接传感器的代码
我的代码不会遇到 I2C 的 ISR。
请引导我
#include
unsigned char TXData[]={0xA7、0x32、0xA6};//指向 TX 数据的指针
unsigned int TXByteCtr = 2;
int main (空)
{
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
P1SEL |= BIT6 + BIT7;//将 I2C 引脚分配给 USCI_B0
P1SEL2|= BIT6 + BIT7;//将 I2C 引脚分配给 USCI_B0
UCB0CTL1 |= UCSWRST;//启用 SW 复位
UCB0CTL0 = UCMST + UCMODE_3;// I2C 主器件、同步模式
UCB0CTL1 = UCSSEL_2 + UCSWRST;//使用 SMCLK、保持软件复位
UCB0BR0 = 12;// fSCL = SMCLK/12 =~100kHz
UCB0BR1 = 0;
UCB0CTL1 &=~UCSWRST;//清除 SW 复位,恢复运行
UCB0I2CSA = 0x53;//从器件地址为048h
IE2 |= UCB0TXIE;//启用 TX 中断
while (1)
{
_DELAY_CYCLES (10);
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTL1 |= UCTR + UCTXSTT;// I2C TX、启动条件
_bis_SR_register (GIE);//使用中断输入 LPM0
/*
if (TXByteCtr = 0)
{
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTL1 |= UCTR + UCTXSTT;// I2C TX、启动条件
_bis_SR_register (GIE);//使用中断输入 LPM0
}
*
}
}
///----------------------------------
// USCIAB0TX_ISR 的结构使其可用于传输任何数据
//预加载带有字节计数的 TXByteCtr 的字节数。 此外、TXData
//指向要发送的下一个字节。
///----------------------------------
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = USCIAB0TX_vector
_interrupt void USCIAB0TX_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (USCIAB0TX_vector)) USCIAB0TX_ISR (void)
其他
错误编译器不受支持!
#endif
{
if (TXByteCtr)//检查 TX 字节计数器
{
UCB0TXBUF = TXData[TXByteCTR];//加载 TX 缓冲器
TXByteCtr -;//减量 TX 字节计数器
}
其他
{
UCB0TXBUF = TXData[TXByteCTR];
UCB0CTL1 |= UCTXSTP;// I2C 停止条件
IE2 &=~UCB0TXIE;//清除 USCI_B0 TX 内部标志
}
}