roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 06:32

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 26 фев 2009, 17:36 
Не в сети
Аватара пользователя

Зарегистрирован: 21 сен 2006, 22:42
Сообщения: 76
Откуда: М.О.
Виталий писал(а):
Код:
int my_int = 0xF00F;
char my_int_h = (char) (my_int >> 8);
char my_int_l = (char) (my_int);

putchar(my_int_h); //-> F0h
putchar(my_int_l); //-> 0Fh

//И после того ка приняли два байта подряд восстанавливаем int.
int input = my_int_l | (my_int_h << 8);




Всё здорово но последняя строчка не работает ))) (на практике)
с (my_int_h<<8) проблем нету все отлично, проблемы с my_int_l.
При получении на ПК переменную my_int_l она размером у нас один байт (т.к. передача происходит побайтовая), но при выполнении последней операции он преобразует ее в двубайтовый размер и в старшем байте одни еденицы.
Рабочая версия последней строчки:

Код:
   int input=(my_int_l & 255)|( my_int_h <<8);

_________________
vivere militare est


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 26 фев 2009, 18:04 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Используй беззнаковые типы (unsigned char и unsigned int).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 26 фев 2009, 18:20 
Не в сети
Аватара пользователя

Зарегистрирован: 30 янв 2009, 01:24
Сообщения: 784
Откуда: Запорожье
прог. языки: Си, AvrASM, STL, САС, учу Си++
ФИО: Павел
По ПО на стороне компа лучше посмотерть формы по пром.автоматике. там много про OPC технологию сказано.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 26 фев 2009, 20:10 
Не в сети

Зарегистрирован: 01 фев 2009, 01:32
Сообщения: 629
Откуда: Саратов
Skype: realsystem_stas
прог. языки: C, Bash, Perl
ФИО: Станислав
Хмм, а S7-200 прекрасно понимает modbus и прочее :) Работал с ними. Что мешает поюзать стандартные вещи?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 26 фев 2009, 23:15 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Кстати да. Modbus-RTU, да и Modbus-ASCII, замечательно реализуется на атмеге, он простой, чисто команду 03 реализуй - и тебе с головой хватит. Как раз под 16-битные числа заточена. На прошлой работе ваяли шлюз-контроллеры к нашим девайсам на AT90S8515 (потом перешли на атмегу8515) с Modbus. Вязали с какой-то скадой, щас не помню с какой, тоже вполне успешно. Причем как раз через OPC-сервер Modbus.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прием/передачи int переменных через USART???
СообщениеДобавлено: 27 фев 2009, 02:58 
Не в сети

Зарегистрирован: 01 фев 2009, 01:32
Сообщения: 629
Откуда: Саратов
Skype: realsystem_stas
прог. языки: C, Bash, Perl
ФИО: Станислав
Я подключал СКАДА TraceMode и S7-200 по модбасу к плате управления насосом-дозатором на PIC'е, там большие числа гуляли - хорошее пром решение. Исходники модбаса(как слэйв так и мастер) для Сименса есть в сети, ну скелет во всяком случае точно.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2

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


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

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


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO