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.

[参考译文] MSP430FR2311:从无符号int转换为ASCII

Guru**** 2535440 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/578031/msp430fr2311-convert-from-unsigned-int-into-to-ascii

部件号:MSP430FR2311

大家好,我正在将ADC值存储为一个不固定的int,但我想将其转换为ASCII字符。 在C语言中如何实现这一点? 我的int值范围为0-1023。 我试着去做  

char aChar = '0' + i;

但是,它不显示1023,而是显示'/'。  

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

    如果你的意思是你有int值9并且想要转换到'9'你可以使用C idiom: char c = x+'0'。 任何大于9的字符串都需要为字符串,因此使用sprintf()。

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

    char txt[16];
    Int myNum =1023;
    Sprintf (txt,"%d",myNum);

    但是,我没有得到1023的值,我做了什么错?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    什么是sprintf()的返回值? 如果为负,则存在一些错误。 最终在txt中到底是什么?
    否则,它看起来很好,txt中应该填入“1023”或类似的内容。 请注意,它实际上是'1','0','2','3','\0'。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    I did char var = sprintf (txt,"%d",myNum);
    如果无符号int为1023,则得到4 '\x04'作为var的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果sprintf()将“1023”+'\0'输入到txt中,这是正确的。 同样,将什么内容输入到txt中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我 ì 的是通过TX缓冲寄存器发送txt,在串行端口上看到的是‘K’而不是1023。 如何确保可以显示1023。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我们需要查看您的序列号。 您只能发送“1”并接收它吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否,实际上如果我发送'1',它不会收到OK,它仍然是 ì。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我收到此TX缓冲区警告。

    #515-D无法将"char *"类型的值指派给"unsigned int"类型的实体
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果使用DriverLib UART_TransmitData(),则需要一个字节来传输,而不是字符串。

    您将需要一次步进1个字节并传输它。 作为测试,请尝试传输'1',而不是传输"1"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我的代码,请看一下。 

    #include <MSP430-h> int ADC_result; #include <stdio.h> void init_UART (); void init_led (); int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止WDT INIT_UART(); init_led (); //配置GPIO //P1DIR |= BIT0; //将WFP 1.0 设置为输出方向 //P1OUT &=~BIT0; // WFP 1.0 指示灯熄灭 //配置ADC A1引脚 P1SEL0 |= BIT1; P1SEL1 |= BIL1; //禁用GPIO开机默认高阻抗模式以激活 //以前配置的端口设置 PM5CTL0 &=~LOCKLPM2; //配置ADC10 ADCCTL0 |= ADCSHT_2 | ADCON; // ADCON,S&H=16 ADC CLKS ADCCTL1 |= ADCSHP; // ADCCLK = MODOSC;采样计时器 ADCCTL2 |= ADCRES; // 10位转换结果 ADCIE |= ADCIE0; //启用ADC连接完全中断 ADCMCTLS0 || ADCINCH_1 | ADCSREF_1; // A1 ADC输入选择;参考电压=1.5V //配置参考 PMMCTL0_H = PMMPW_H; //解锁PMM寄存器 PMMCTL2 |= INTREFEN; //启用内部参考 __DELAY周期(400); //参考确定延迟 同时(1) { ADCCTL0 |= ADCENC | ADCSC; //开始采样和转换 __bis_sr_register (LPM0_BITS | GIE); // LPM0,ADC_ISR将强制退出 IF (ADC_Result < 0x155) P1OUT &=~BIT0; //清除WFP 1.0 LED关闭 否则 P1OUT |= BIT0; //将WFP 1.0 LED设置为打开 while (!(UCA0IFG & UCTXIFG));//等待USSCI_A0 TX缓冲器就绪 //char ADC_Char[16]; //sprintf (ADC_Char,"%d",ADC_Result); UCA0TXBUF = ADC_Result; __delay_cycles(5000); } }// 此函数对UART进行初始化,以便它可以具有8个数据位,无奇偶校验,1个停止位和9600 void init_UART () { //配置UART引脚 P1SEL0 || BIT6 | BIT7; //将2-UART引脚设置为第二个功能 //配置UART UCA0CTLW0 |= UCSWRST; //设置软重置启用 UCA0CTLW0 |= UCSSEL__SMCLK; //将SMCLK设置为BRCLK,用于11.52万的波特率 //波特率计算。 将波特率设置为11.52万 UCA0BR0 = 8; // 100万/115200 =11.52万 = 8.68 INT (N)= 8 UCA0MCTLW = 0xD600; // 100万/115200 -11.52万 - INT (100万/115200)11.52万)= 0.68 UCA0BR1 = 0x00; // UCBRSx值= 0xD6 UCA0CTLW0 &=~UCSWRST; //初始化eUSCI } void init_led (){ //配置GPIO P1DIR || BIT0; //将WFP 1.0 设置为输出方向 P1OUT &=~BIT0; // 编译器1.0 LED关闭}// ADC中断服务例程#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_icc__)#pragma vector=ADC_vector __interrupt void ADC_ISR(void)#Elif defined(__GNUC__) void __attribute__(((interrupt (ADC_vector))#elvector))不支持#AD_else #endif { SWITCH(__EIV_IN_RANGE(ADCIV,ADCIV_ADCIFG)) { 案例ADCIV_NONE: 中断; Case ADCIV_ADCOVIFG: 中断; Case ADCIV_ADCTOVIFG: 中断; Case ADCIV_ADCHIIFG: 中断; Case ADCIV_ADCLOIFG: 中断; Case ADCIV_ADCINIFG: 中断; 问题ADCIV_ADCIFG: ADC_Result = ADCMEM0; __BIC_SR_REGISTER_ON_EXIT (LPM0_bits); //从LPM0中清除CPUOFF位 中断; 默认: 中断; } }