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: Convert from unsigned int into to ASCII

Part Number: MSP430FR2311


Hi everyone, I am storing an ADC value as an unisgned int but I want to convert it to an ASCII character. How is this possible in C? My int value ranges from 0-1023. I tried doing 

char aChar = '0' + i;

However, it does not display 1023, rather it displays '/'. 

  • If you mean you have the int value 9 and want to convert to '9' you can use the C idiom: char c = x+'0'. Anything more than 9 will need to be a string, so use sprintf().

  • I have a 10 bit ADC enabled. I tried doing

    char txt[16];
    int myNum = 1023;
    sprintf(txt, "%d", myNum);

    However, I am not getting a value of 1023, what am I doing wrong?
  • What is sprintf()'s return value? If negative there is some error. What is actually ending up in txt?
    Otherwise it looks fine and txt should be filled with "1023" or something close. Note that it is actually '1', '0', '2','3', '\0'.
  • I did char var = sprintf(txt, "%d", myNum);
    and I'm getting 4 '\x04' as the value for var if the unsigned int is 1023.
  • Which is correct if sprintf() is putting "1023" + '\0' into txt. Again, what is getting put into txt.
  • What I'm doing is sending the txt over a TX buffer register and on the serial port i see 'ì' and not 1023. How do I ensure that I can display 1023. Thanks
  • I think we need to see your serial code. Can you just send "1" and receive it OK?
  • No, actually if I send '1' it doesn't receive OK its still 'ì'.
  • I get this warning for the TX buffer.

    #515-D a value of type "char *" cannot be assigned to an entity of type "unsigned int"
  • If you are using the DriverLib UART_TransmitData() it takes a byte to transmit, not a string.

    You will need to step through txt 1 byte at a time and transmit it. As a test, Instead of transmitting "1", try transmitting '1'.
  • This is my code, please take a look.

    #include <msp430.h> int ADC_Result; #include <stdio.h> void init_uart(); void init_led(); int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop WDT init_uart(); init_led(); // Configure GPIO //P1DIR |= BIT0; // Set P1.0/LED to output direction //P1OUT &= ~BIT0; // P1.0 LED off // Configure ADC A1 pin P1SEL0 |= BIT1; P1SEL1 |= BIT1; // Disable the GPIO power-on default high-impedance mode to activate // previously configured port settings PM5CTL0 &= ~LOCKLPM5; // Configure ADC10 ADCCTL0 |= ADCSHT_2 | ADCON; // ADCON, S&H=16 ADC clks ADCCTL1 |= ADCSHP; // ADCCLK = MODOSC; sampling timer ADCCTL2 |= ADCRES; // 10-bit conversion results ADCIE |= ADCIE0; // Enable ADC conv complete interrupt ADCMCTL0 |= ADCINCH_1 | ADCSREF_1; // A1 ADC input select; Vref=1.5V // Configure reference PMMCTL0_H = PMMPW_H; // Unlock the PMM registers PMMCTL2 |= INTREFEN; // Enable internal reference __delay_cycles(400); // Delay for reference settling while(1) { ADCCTL0 |= ADCENC | ADCSC; // Sampling and conversion start __bis_SR_register(LPM0_bits | GIE); // LPM0, ADC_ISR will force exit if (ADC_Result < 0x155) P1OUT &= ~BIT0; // Clear P1.0 LED off else P1OUT |= BIT0; // Set P1.0 LED on while (!(UCA0IFG & UCTXIFG)); // wait for USCI_A0 TX buffer to ready //char ADC_Char[16]; //sprintf(ADC_Char, "%d", ADC_Result); UCA0TXBUF = ADC_Result; __delay_cycles(5000); } } //This function intiilizes the UART so that it can have 8 data bits, no parity, 1 stop bit and baudrate of 9600 void init_uart() { // Configure UART pins P1SEL0 |= BIT6 | BIT7; // set 2-UART pin as second function // Configure UART UCA0CTLW0 |= UCSWRST; //Sets softare reset enable UCA0CTLW0 |= UCSSEL__SMCLK; // Set SMCLK as BRCLK to be used for baud rate of 115200 // Baud Rate calculation. Setting BaudRate to 115200 UCA0BR0 = 8; // 1000000/115200 = 8.68 INT(N) = 8 UCA0MCTLW = 0xD600; // 1000000/115200 - INT(1000000/115200)=0.68 UCA0BR1 = 0x00; // UCBRSx value = 0xD6 UCA0CTLW0 &= ~UCSWRST; // Initialize eUSCI } void init_led(){ // Configure GPIO P1DIR |= BIT0; // Set P1.0/LED to output direction P1OUT &= ~BIT0; // P1.0 LED off } // ADC interrupt service routine #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))) ADC_ISR (void) #else #error Compiler not supported! #endif { switch(__even_in_range(ADCIV,ADCIV_ADCIFG)) { case ADCIV_NONE: break; case ADCIV_ADCOVIFG: break; case ADCIV_ADCTOVIFG: break; case ADCIV_ADCHIIFG: break; case ADCIV_ADCLOIFG: break; case ADCIV_ADCINIFG: break; case ADCIV_ADCIFG: ADC_Result = ADCMEM0; __bic_SR_register_on_exit(LPM0_bits); // Clear CPUOFF bit from LPM0 break; default: break; } }

**Attention** This is a public forum