Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
14-1127129483
TStas
2005-09-19 15:31
2005.10.09
Где можно скачать интерпритатор Pascal Script?


8-1111810698
wlf
2005-03-26 07:18
2005.10.09
Экспорт в Excel


5-1102447881
Arnold
2004-12-07 22:31
2005.10.09
Каак создать TButton с возможностью загрузки рисунков?


1-1127308327
ktt
2005-09-21 17:12
2005.10.09
Импорт xml файла


14-1126773261
Rentgen
2005-09-15 12:34
2005.10.09
Junior java developer :)