Microchip C18 отправляет данные на терминал в числовом виде

Я работаю над проектом, в котором мне нужно отправить данные через USART на терминал. Мне нужно отобразить данные в виде числового значения (0-255) char (собранного из EEPROM

мне удалось отправить char как есть на терминал (используя Putty или TerMite). Моя проблема начинается там, где значение char недоступно для печати

Вот почему мне нужно будет преобразовать значение char в числовое

Пример: когда данные, полученные из EEPROM, равны 0x31, моя процедура отправит «1», но мне нужно будет отправить «049» или «49» на терминал.

void SendToSer(void) {

unsigned char Looper;

for (Looper=EEPROM_START;Looper<EEPROM_END;Looper++){
    ReadEEPROM(Looper);    //returns ReadResult
    Write1USART((char) ReadResult); //Sends the ASCII
    ClrWdt();   
}

}

Спасибо,


person RobinHud    schedule 17.11.2016    source источник
comment
Вы пробовали sprintf?   -  person jolati    schedule 18.11.2016
comment
Нет, не могли бы вы предложить синтаксис?, включает?   -  person RobinHud    schedule 18.11.2016
comment
Все в документации по C18 Libraries.   -  person jolati    schedule 18.11.2016


Ответы (2)


sprintf, как предложил jolati, может быть хорошей рабочей лошадкой в ​​некоторых ситуациях или, что еще лучше, snprintf, если он доступен для вашей версии C18. Обе подпрограммы следуют стандартному форматированию printf (например, https://en.wikipedia.org/wiki/Printf_format_string< /а>).

#include "stdio.h"

void main() {
    char buffer[80];
    unsigned char len, number = 152;

    // Write at most 80 bytes to our buffer
    len = snprintf(buffer, 80, "sprintf string, heres a number: %d", number);
    // buffer now contains our string, len is the number of bytes written

    // or
    len = printf(buffer, "... %d",number);
}
person Mathieu L.    schedule 20.11.2016

Спасибо, я решил пройти долгий путь......

Вот что я сделал:

Манипулировал значением int символа до 3 новых символов (т.е.) 243 стало 3 символа - 50,52,51 (ASCII цифр)

(может быть, он длинный и хромой, но он работает как шарм)

вот скрипт....

void ConvertToNumeric(unsigned char IsValue, unsigned int LineNumber){
unsigned int SourceInt;

ClrWdt();
if (IsValue == 1){
    SourceInt = (int) ReadResult;
}else{
    SourceInt = (int) LineNumber;
    LineNumber++;
}

ClrWdt();
switch (SourceInt/100){         
    case 2 :    FirstChar = 50; SourceInt = SourceInt - 200;    break;
    case 1 :    FirstChar = 49; SourceInt = SourceInt - 100;    break;
    case 0:     FirstChar = 48;             break;
}

switch (SourceInt/10){
    case 9 :SecondChar = 57;    SourceInt = SourceInt - 90;         break;
    case 8 :SecondChar = 56;    SourceInt = SourceInt - 80;         break;
    case 7 :SecondChar = 55;    SourceInt = SourceInt - 70;         break;
    case 6 :SecondChar = 54;    SourceInt = SourceInt - 60;         break;
    case 5 :SecondChar = 53;    SourceInt = SourceInt - 50;         break;
    case 4 :SecondChar = 52;    SourceInt = SourceInt - 40;         break;
    case 3 :SecondChar = 51;    SourceInt = SourceInt - 30;         break;
    case 2 :SecondChar = 50;    SourceInt = SourceInt - 20;         break;
    case 1 :SecondChar = 49;    SourceInt = SourceInt - 10;         break;
    case 0 :SecondChar = 48;                                                break;
}

switch (SourceInt){
    case 9:         ThirdChar= 57;          break;
    case 8:         ThirdChar= 56;          break;
    case 7:         ThirdChar= 55;          break;
    case 6:         ThirdChar= 54;          break;
    case 5:         ThirdChar= 53;          break;
    case 4:         ThirdChar= 52;          break;
    case 3:         ThirdChar= 51;          break;
    case 2:         ThirdChar= 50;          break;
    case 1:         ThirdChar= 49;          break;
    case 0:         ThirdChar= 48;          break;  
}

ResultInChars[0] = FirstChar;
ResultInChars[1] = SecondChar;
ResultInChars[2] = ThirdChar;
ResultInChars[3] = '   ';
ResultInChars[4] = NULL;
ResultInChars[5] = NULL;
ResultInChars[6] = NULL;

}

позже я использовал puts1USART с массивом, содержащим 3 вышеуказанных символа (FirstChar, SecondChar и ThirdChar)

я также добавил «lineNumber» перед каждыми 4 значениями и CrLf после четвертого значения, и в результате результат выглядит так .....

вывод на терминал в Putty через последовательный порт

а он рабочий......

Спасибо за вашу помощь

Я бы оценил ваши предложения, Гай

person RobinHud    schedule 20.11.2016