MSP430 LaunchPad.UART. Подскажите новичку.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
TmYAG
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн окт 14, 2013 21:39:47

Re: MSP430 LaunchPad.UART. Подскажите новичку.

Сообщение TmYAG »

Код: Выделить всё

int t = 0x1b;
  char c1, c2;

c1=((char*)&t)[0];
c2=((char*)&t)[1];
char str1[] = {c1,c2};
поидее так. Но с1 = '.'
c2 = '\0'
а думал что 27 выдаст.
Вот поэтому и не могу разобраться.
Реклама
TmYAG
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн окт 14, 2013 21:39:47

Re: MSP430 LaunchPad.UART. Подскажите новичку.

Сообщение TmYAG »

Ser60 писал(а):Это легко самому проверить, попробовав скомпилировать. Если t типа int то компилятору не понравится обращение к ней как к массиву.

Я-бы сделал на передающем конце так:

Код: Выделить всё

  float f = 0x1234;
  int count = sizeof f;
  while (count)
  {
    while (!(IFG2&UCA0TXIFG));
    count--;
    UCA0TXBUF = *((char*) &f + count);
  }
При этом 4-байтная переменная f будет передана от старшего байта к младшему.
Тут на выходе в терминале такое выдает:

Код: Выделить всё

000001 17:01:42.595  00 D4                                           .Ф
000002 17:01:45.628  45 11                                           E.
000003 17:01:48.015  45 91 00                                        E‘.
000004 17:01:48.571  00                                              .
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: MSP430 LaunchPad.UART. Подскажите новичку.

Сообщение Ser60 »

Нужно данные до пересылки переводить в строку. Например, вместо int i = 123 посылать на терминал "123"
TmYAG
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн окт 14, 2013 21:39:47

Re: MSP430 LaunchPad.UART. Подскажите новичку.

Сообщение TmYAG »

Ser60 писал(а):Нужно данные до пересылки переводить в строку. Например, вместо int i = 123 посылать на терминал "123"
ну да. строка это массив символов типа char.
Разве этот код не переводит в строку int

Код: Выделить всё

int t = 0x1b;
  char c1, c2;

c1=((char*)&t)[0];
c2=((char*)&t)[1];
char str1[] = {c1,c2};
только вот один момент. с1 в данном случае 27, а это соответствует Esc. то есть видимо не все так просто. Код воспринимается как код символа из таблицы ascii. мне понятно как для однозначного int перевод в символы сделать. но как переводить в массив символов int с бОльшим числом, или вообще флоат.
Последний раз редактировалось TmYAG Сб окт 19, 2013 20:44:04, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: MSP430 LaunchPad.UART. Подскажите новичку.

Сообщение Ser60 »

Нет, не переводит. У Вас t=0x1b=27, поэтому c1=27 и получаете код ESC. При переводе в строку должно быть c1=55, c2=50 где 55='7' (т.е. ASCII код 7) и 50 = '2'. Если на терминале хотите видеть десятичные числа, то для перевода в строку следует делить t на 10 и собирать остатки от деления. Потом к остаткам добавлять 48 для ASCII conversion ( здесь 48='0').
Реклама
TmYAG
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн окт 14, 2013 21:39:47

Re: MSP430 LaunchPad.UART. Подскажите новичку.

Сообщение TmYAG »

Ser60 писал(а):Нет, не переводит. У Вас t=0x1b=27, поэтому c1=27 и получаете код ESC. При переводе в строку должно быть c1=55, c2=50 где 55='7' (т.е. ASCII код 7) и 50 = '2'. Если на терминале хотите видеть десятичные числа, то для перевода в строку следует делить t на 10 и собирать остатки от деления. Потом к остаткам добавлять 48 для ASCII conversion ( здесь 48='0').
Вот именно. я как раз и задался такой целью. Только не для двухзначных чисел, а для чисел с большим числом знаков (произвольным.)
То есть возвращаясь к моей задаче. Получили с датчика число 2, 27, 100, не важно, переверли его в строку и отправили по UART на терминал. Деление на 10 действует в том случае, если мы знаем количество разрядов в числе. А если оно произвольное? Case использовать?
И вот еще момент, а обойти это через printf и scanf как-нить можно?
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: MSP430 LaunchPad.UART. Подскажите новичку.

Сообщение Ser60 »

Можно применить sprintf. Или написать процедуру перевода в строку самому. Дужно число делить на 10 пока не получите 0 и собрать остатки в обратном порядке. На форуме easyelectronics.ru была подборка алгоритмов по переводу в строку. Точной ссылки у меня нет, но статью легко найти там.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: MSP430 LaunchPad.UART. Подскажите новичку.

Сообщение ibiza11 »

Ставим плюсы: )
Ответить

Вернуться в «Разные вопросы по МК»