Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Вниз

Прямой код   Найти похожие ветки 

 
nikolos   (2005-09-16 10:21) [0]

Уважаемые мастера, помогите. По COM порту читаю из прибора данные в прямом коде, значащих битов 12. Как мне различить положительные и отрицательные значения?


 
MBo ©   (2005-09-16 12:26) [1]

Ну так старший бит проверять.
прямой код - самый простой - старший бит - знак, остальные - модуль числа.
Разве этого нет в поисковиках?


 
nikolos   (2005-09-16 12:46) [2]

Проверяю 11-й бит: стоит - отрицательное, нет -положительное, в результате имею большой скачек при переходе через ноль. 1111 0101 - это -5 или -117?


 
ocean ©   (2005-09-16 12:55) [3]

мне кажется, 1111 0101 b - это 1111 1111 b - 1111 0101 b = -1010 b = -5 dec


 
MBo ©   (2005-09-16 12:58) [4]

>1111 0101 - это -5 или -117?
Для прямого 8-битного кода -   -117

Может, у тебя код на самом деле 16-разрядный?
Или 11-й бит неправильно выделяешь...
Или код не прямой, а обратный или дополнительный...


 
MBo ©   (2005-09-16 12:59) [5]

>ocean ©   (16.09.05 12:55) [3]
В обратном коде - да, -5


 
Defunct ©   (2005-09-16 13:55) [6]

nikolos   (16.09.05 12:46) [2]
> значащих битов 12.

ты же сказал 12 бит, почему же приводишь 8?
1111 0101 в твоем случае это 245.


 
nikolos   (2005-09-16 13:56) [7]

От прибора значения приходят по два байта. Собираю в smallint. Значащие биты от 0..11 остальные 12..15 нулевые. Выделяю 11-й бит, размножаю до 15. Может что-то не так делаю?


 
nikolos   (2005-09-16 14:02) [8]

Defunct: Это не пример. Я просто потерялся во всех этих битах :(.
Меня еще смушает, что в двух байтный smallint без проблем пишется $ffffffff. Или это вовсе не проблема?


 
Defunct ©   (2005-09-16 14:06) [9]

> Может что-то не так делаю?

да делаешь что-то не так..

Собирай в integer вот так:

Result := (<Старший байт> shl 8) + <младший байт>;
if  (Result and $0800) <> 0 then
  Result := -(Result and $07FF);


 
MBo ©   (2005-09-16 14:33) [10]

>размножаю до 15
Если речь действительно идет о прямом коде, то знаковый бит размножать нельзя - это работает только для обратного и дополнительного кодов.

Я тут подумал - а может, у тебя и не код прямой, а упаковка байтов прямая, в отличие от интеловской обратной?
Может, выложишь где-то файлик с последовательно принятыми данными (именно в том порядке, как идут от прибора), которые, по твоим предположениям, плавно переходят через 0, и хорошо бы, чтобы более-менее охватывали диапазон данных.


 
nikolos   (2005-09-16 14:49) [11]

Согласно доке на прибор, данные передаются в прямом коде. Если собирать байт безо всяких преобразований, то с прибора снимается замечательный синус, только строится он выше абсцисс, а сигнал подается +/-. Вот и стала проблема с проходом через ноль. Если делать как предложил Defunc, то снизу все в порядке, а наверху непонятно что творится :(. А как можно файлик выложить?


 
nikolos   (2005-09-16 14:50) [12]

прошу прощения, Defunct


 
MBo ©   (2005-09-16 15:08) [13]

>как можно файлик выложить?
www.webfile.ru


 
nikolos   (2005-09-16 15:18) [14]

http://webfile.ru/522387. Данные читаются с $100 адресса: Hi $81 Lo $81 Hi $81 Lo


 
Defunct ©   (2005-09-16 15:21) [15]

nikolos   (16.09.05 14:49) [11]

аа тогда понятно...
у тебя принимаются данные с диффернциального АЦП?
тогда все еще проще, вот так:

Result := Result - $800;


 
nikolos   (2005-09-16 15:31) [16]

Громадное СПАСИБО всем и особенно Defunct и Mbo!!! А я, пень, и отнимал 2000 и вроде ничего так получалось, а понять почему не сумел. Еще раз огромное спасибо!!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.013 c
14-1127121377
kot andrei
2005-09-19 13:16
2005.10.09
Украли ноутбук :(


6-1118740988
_xtz_
2005-06-14 13:23
2005.10.09
Создание подключений Vpn и PPPoE.


14-1126852722
Sash
2005-09-16 10:38
2005.10.09
MSSQL Server 2000 и MSSQL Server 7


2-1125292719
Гриха
2005-08-29 09:18
2005.10.09
Полтергейст в TStrings


2-1125498230
NataM
2005-08-31 18:23
2005.10.09
ActiveXForm





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский