Easyelectronics.ru

Электроника для всех
Текущее время: 19 авг 2019, 17:51

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Прием данных.
СообщениеДобавлено: 13 ноя 2013, 22:12 
Заглядывает иногда

Зарегистрирован: 10 авг 2013, 10:44
Сообщения: 50
Здравствуйте, уважаемые форумчане!
Не могу разобраться как принимать посылку из нескольких байт. Код ниже.
Show

Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием данных.
СообщениеДобавлено: 14 ноя 2013, 00:00 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3264
Код:

while(1){
  while (!(IFG2&UCA0RXIFG)); //Проверяем буфер приема
  data[pos++] = UCA0RXBUF;  //То, что пришло записываем в переменную
  if (data[pos-1] == 0x0A){
    // в data лежат принятые данные. осталось преобразовать их в число
    int num = 0;
    int i = 0;
    while (i < pos){
      if ((data>'0') && (data<='9')){
        num *= 10;                    //не хватает проверки на переполнение num.
        num += data[i++] - '0';
      }
    }
    pos = 0;

    // теперь в num лежит принятое число.   

  }
}

только что толку передавать задержку если программа в цикле ждёт приёма и висит всё время в while (!(IFG2&UCA0RXIFG));
надо его заменить на if (IFG2&UCA0RXIFG){


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием данных.
СообщениеДобавлено: 14 ноя 2013, 23:46 
Заглядывает иногда

Зарегистрирован: 10 авг 2013, 10:44
Сообщения: 50
так если я заменю
Цитата:
только что толку передавать задержку если программа в цикле ждёт приёма и висит всё время в while (!(IFG2&UCA0RXIFG));
надо его заменить на if (IFG2&UCA0RXIFG){
то у мня условие просто проскочит.
и кстати теперь ввода программа не ожидает. а проскакивает
Код:
if (data[pos-1] == 0x0A){
    // в data лежат принятые данные. осталось преобразовать их в число
    int num = 0;
    int i = 0;
    while (i < pos){
      if ((data>'0') && (data<='9')){
        num *= 10;                    //не хватает проверки на переполнение num.
        num += data[i++] - '0';
      }
    }
    pos = 0;

    // теперь в num лежит принятое число.   

  }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием данных.
СообщениеДобавлено: 15 ноя 2013, 00:05 
Заглядывает иногда

Зарегистрирован: 10 авг 2013, 10:44
Сообщения: 50
я пробовал разичные вариации и понял, что если засылать строку, то мк принимает только первый байт и как только итерация цикла проходит (до прихода '\0') он ждет новой посылки. То есть все равно в data[i++] из строки 1234 пишется лишь 1(


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB