This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430F5529:尝试使用 I2C 方法发送数据数组

Guru**** 2562120 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/601987/ccs-msp430f5529-trying-to-transmit-an-array-of-data-using-i2c-method

器件型号:MSP430F5529

工具/软件:Code Composer Studio

您好!

在我的程序中、主器件(MSP430)向从器件发送一组数据、其中一个数据(R_hex)通过按下按钮 P1.1保持变化。 我对此有两个问题:

我已将数组声明为“volatile unsigned char TxData [] ”而不是“const char”,并得到以下错误:

-常量表达式中常量变量的使用在 C 中是非标准变量

-表达式必须具有常量值

2.我不确定如何启用这两个中断。 我能否在 P1_ISR 中断内部启用 USCI 中断、并且一旦按下按钮并设置 P1IFG、就启用发送中断 UCBxIE |= UCTXIE?

提前感谢您的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我忘记了提及我一直遵循随附的 TI 示例代码。 我的代码与此类似、但 TxData 不是常量数组。

    谢谢你

    e2e.ti.com/.../MSP430F55xx_5F00_uscib0_5F00_i2c_5F00_08.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我在 MSP430F55xx_uscib0_i2c_08.c 示例中将"const unsigned char TxData[]"更改为"volatile unsigned char TxData[]"、我将不会收到相同的错误/警告。 不能将变量直接放入数组的声明中、而是需要在每次更新数组时专门将值设置到数组中(例如 TxData[3]= R_hex)。

    您可以选择在 P1 ISR 内部启用 USCI 中断、但如果您希望避免这种情况、则可以在主 while 循环期间输入 LPM、该 LPM 只能通过按钮 ISR 执行退出、 然后启用 TX 中断并启动 I2C 总线。

    此致、
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、  

    非常感谢您的回复。
    你是对的。 但是、在 MSP430F55xx_uscib0_i2c_08.c 示例中、当我将数组中的一个元件声明为易失性时、我仍然会收到此警告。 请参阅下面代码示例的一部分、并告诉我出错了:
    volatile unsigned char R=0x33;
    volatile unsigned char TxData []={0x11、0x22、R};
    if (P1IN&BIT1)!=BIT1)  //如果按下 P1.1
    R +=0x11;
    TxData[3]= R;
    此致、
    Niloofar
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Niloofar、

    如前所述、您无法将变量 R 分配给 TxData 数组的声明。 我还希望您的按钮检查以及随后的 R 和 TxData 分配位于代码的主 while 循环中、而不是推断的变量初始化中。

    此致、
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 TxData 是全局变量、则无效。 使用虚拟值初始化它、然后在初始化代码中将 TxData[3]分配给 R
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ryan、
    我得到了您的观点、我不再得到该误差。
    非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、
    我还需要将代码中的 R 值从十进制转换为十六进制。 我可以让您看看我随附的代码并告诉我您的建议吗?
    非常感谢您抽出宝贵的时间。

    e2e.ti.com/.../I2C_5F00_program.docx

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这话什么意思? 整数始终为二进制。 它只是为我们人类转换为十进制或十六进制。

    如果您想要十六进制格式的字符串,即“0xFE”,请将 sprint()与%x 说明符一起使用。