Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2013, 22:16   #1
djeyz
Новичок
Джуниор
 
Регистрация: 16.05.2013
Сообщений: 2
По умолчанию Работа с com port

Здравствуйте, 2 месяца назад начал изучать программирование!Написал программу с com port-ом!
только не понимаю как передавать данные через port, в 16 системе счисления!
А именно в задание написано отправить 5 слов
0202h
0004 - число последующих байт без контрольной суммы(как именно записать число последующих байт?как я понял кол-во байтов, т.е. 10)
...
...
0000 - crc16 контрольная сумма(пока ровно 0)
Мне сказали, что необходимо разделить каждое слово(например 0202h) на 2 байта(как я понял 0х02 и 0х02),следующее (0004h 0х00, 0х04)
таким образом я должен отправить 10 байт
Код C++
Код:
unsigned char buff[10];
buff[0] = 0x02;
buff[1] = 0x02;
buff[2] = 0x00;
buff[4] = 0x04;
...
...
...
buff[8] = 0x00; //контрольная сумма пока
buff[9] = 0x00;  // остается равной 0
Но такое разбиение не правильно, посоветуйте что можно почитать на эту тему или в чем моя ошибка, нужно как-то разбить на старший и младший байт( сказали что я не знаю как хранятся данные в памяти, в теме архитектура ЭВМ ответа не нашел, и в интернете копался, так и не смог найти ответа).
Срочно нужна ваша помощь!!!!!!!!!!!!!!!
заранее спасибо!!


Полностью задание написано здесь(если нужно для понимания):
Цитата:
Посылается 5 СЛОВ:
0202h – 02h - номер режима, 02h-байт синхронизации
0004 - число последующих байт без контрольной суммы
xxxx - номер предела по току (0…8 соответственно для 50A…0.05A)
xxxx - номер предела по напряжению (0…2 соответственно для 220В…60В)
xxxx - Контрольная сумма CRC16 за все байты

Время ожидания ответа с учетом срабатывания реле переключающих пределы измерения до 1 сек.

Принимется:
Если норма:
0002h - 00-НОРМА, 02-синхронизация
0008h - число последующих байт
байты:
xxxx - установленный номер предела по току
(0…8 соответственно для 50A…0.05A)
xxxx - установленный номер предела по напряжению
(0…2 соответственно для 220В…60В)
xxxx - уровень доступа к прибору (0…2)
xxxx - схема подключения (001b, 010b, 100b соответственно
для 3ф.4пр., 3ф.3пр., 1ф.2пр.)
xxxx - Контрольная сумма CRC16 за все байты
Если не норма:
ff02h - ff-НЕ НОРМА, 02-синхронизация
0000 - число последующих байт = 0
xxxx - Контрольная сумма CRC16 за 2 байта

Последний раз редактировалось djeyz; 16.05.2013 в 22:23.
djeyz вне форума Ответить с цитированием
Старый 16.05.2013, 23:42   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

На самом деле тут следует уточнить, используется-ли litleendian или bigendian представления чисел в памяти.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 17.05.2013, 17:54   #3
djeyz
Новичок
Джуниор
 
Регистрация: 16.05.2013
Сообщений: 2
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
На самом деле тут следует уточнить, используется-ли litleendian или bigendian представления чисел в памяти.
Используется littleendian!
про них мне расказывали, littleendian - где едет младший потом старший), а bigendian - все наоборот и при отправки необходимо менять менять старший и младший, а после приема опять все назад!
djeyz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
COM port Ghost of Night Операционные системы общие вопросы 4 25.12.2012 00:33
com port player891 Общие вопросы Delphi 0 21.03.2012 19:26
Работа с СОМ Port Sergey13666 Помощь студентам 2 06.07.2010 09:58
Com Port Pepelyaev Общие вопросы Delphi 5 26.11.2006 22:31