请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2553 我尝试从 ADXL345读取数据。 不幸的是、我的读取函数被卡在 forst 用法中。 是否有人知道为什么以及如何解决该问题?
void print (const unsigned char Data){ UCB0TXBUF = Data; _ bis_SR_register (LPM3_BITS + GIE); } void prints (char data){ UCB0CTL1 = UCSWRST; UCB0CTL0 = UCMODE_3 + UCSEL + UCSYNC;// I2C master = UCSWRST ;/ UCB0CTL1 = UCB0CTSST/ UCB0CT0 = UCB0CTA0;UCB0CTL = UCB0CTL0 = UCB0BRMODE_3 + UCSCLK/ UCB0CLK;使用 // 100kHz、16MHz UCB0BR0 = 0x28; 16MHz 时为// 400kHz // UCB0BR0 = 0x1B; 在16MHz 时为// 400kHz + 50% // UCB0BR0 = 0x14; 在16MHz 时为// 400kHz + 100% // UCB0BR0 = 0x08; 在16MHz 时为// 2MHz (400kHz + 400%) // UCB0BR0 = 0x08; 16/MHz 时为// 4MHz // UCB0BR0 = 0x02; // 16MHz 时为8MHz UCB0I2CSA = DATA; //地址 UCB0CTL1 &=~ ~UCSWRST;IE2 |= UCB0TXIE;//启用 TX 就绪中断__DISABLE_INTERRUPT ();UCB0CTL1 |= UCT+ UCTXSTT;// I2C TX,开始条件__bis_SR_register (LPM3_bits + GIE);UCB0CTL1 = UCTL void + UCB0CTL (UCTL);// UCB0CTL = UCTL void + UCTL (UCTL);// UCB0CTL = UCTL = UCTL void + UCTL (UCTL);// UCB0CTL = UCB0CTL) UCB0CTL0 = UCMODE_3 + UCMST + UCSYNC;// I2C 主控模式 UCB0CTL1 = UCSSEL_2 + UCSWRST;//使用 SMCLK、保持 SW 复位 UCB0BR0 = 0x28; //< 400kHz UCB0I2CSA =地址; //地址 UCB0CTL1 &=~UCSWRST; IE2 |= UCB0TXIE;//启用 TX 就绪中断 __disable_interrupt (); //转到寄存器 UCB0CTL1 = UCSSEL_2 + UCTR + UCTXSTT;// I2C RX,启动条件 __bis_SR 寄存器(UCB0CTL1 + UCB0TXIE)位;// UCB0BR_3 + UCB0BR1 + UCTL = UCB0ST1 + UCB0BIT_BIG = UCB0CTL = UCB0BR1 + UCB0ST3;// // I2C RX、起始条件 } char 读取(void){ char 输出; __bis_SR_register (LPM3_bits + GIE); 输出= UCB0RXBUF; 返回输出; } void adxl (void){ unsigned int hold; prints (0x53); print (0x32); UCB0CTL1 = UCSSXEL_HOLD;}<CSTACL+读操作条件(UCSS3) (= UCTL = UCSSL+ HOLD);读操作(UCTL = UCT3)(UCTL = UCTL = UCTL)(UCTL = UCTL)(U GraV[1]=(read()<<3)+(HOLD>>5); HOLD = Read(); GraV[2]=(read()<<3)+(HOLD>>); UCB0CTL1 = UCSSEL_2 + UCTXSTP; while (UCB0CTTE & UCTXSTP); } (void 0x08 )(prints (prints);prints (0x2C)(void)(prints (prints)(0x08);prints (void)(prints (prints)(prints)(void)(0x08)(prints)(void)(prints (print 列印(0x53); 列印(0x31); 列印(0x0D); 打印(); 列印(0x53); Print (0x1E); print (0xFE); print (0xFD); print (0x0C); Printe (); } void main (void){ WDTCTL = WDTPW + WDTHOLD; DCOCTL = CALDCO_16MHz;//DCO 设置= 8MHz BCSCTL1 = CALBC1_16MHz;//DCO 设置= 8MHz //为 I2C 配置引脚 P1SEL |= BIT6 + BIT7; //引脚初始化 P1SEL2 |= BIT6 + BIT7; //引脚初始化 _delay_cycles (8000000); initadxl(); adxl (); } // USCI_B0数据 ISR #pragma vector = USCIAB0TX_vector __interrupt void USCIAB0TX_ISR (void){ IFG2 &=~UCB0TXIFG; __BIC_SR_REGISTER_ON_EXIT (LPM3_BITS); //唤醒主代码 }