Прием/передачи int переменных через USART???

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Прием/передачи int переменных через USART???

Сообщение D'Ark Trouyan » 26 фев 2009, 17:36

Виталий писал(а):
Код: Выделить всё
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
Аватара пользователя
D'Ark Trouyan
 
Сообщения: 76
Зарегистрирован: 21 сен 2006, 22:42
Откуда: М.О.

Re: Прием/передачи int переменных через USART???

Сообщение boez » 26 фев 2009, 18:04

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

Re: Прием/передачи int переменных через USART???

Сообщение executer » 26 фев 2009, 18:20

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

Re: Прием/передачи int переменных через USART???

Сообщение realsystem » 26 фев 2009, 20:10

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

Re: Прием/передачи int переменных через USART???

Сообщение boez » 26 фев 2009, 23:15

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

Re: Прием/передачи int переменных через USART???

Сообщение realsystem » 27 фев 2009, 02:58

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

Пред.

Вернуться в Микроконтроллеры

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

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

cron