Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.10.2007, 13:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.05.2006
Адрес: Владимир
Сообщений: 2,797
Сказал спасибо: 2,969
Сказали Спасибо 4,213 раз(а) в 1,187 сообщении(ях)
|
32-разрядные числа в 8-битном PIC
Первый раз столкнулся с математическими вычислениями в PIC. Есть необходимость в PIC16F628 умножать, делить, вычитать и складывать 32-разрядные знаковые числа. Нашел библиотеки только для 16-разрядных чисел. Кто что подскажет?
Число состоит из 4 байт. Вот формат числа:
Ст. бит Старшего байта - знак числа (0 – полож., 1 – отриц.)
Остальные 7 бит этого байта - порядок числа, сдвинутый на 40H (0 кодируется как 40H, 1=41H, -1=3FH, и т.д.)
Остальные три байта - мантисса.
Число кодируется так:
(-1)S*2(P-40H)*M, при этом 0,5=M‹1
S - знак числа
P - порядок числа
M - мантисса
Внимание, число 0 кодируется нулями во всех байтах, это совпадает с форматом Float INTEL, преобразования не требует!
Например, число 3.2:
регистр 1(ст): 42
регистр 2: cc
регистр 3: cc
регистр 4(мл): cd
Например, число –0.25:
регистр 1(ст): bf
регистр 2: 80
регистр 3: 00
регистр 4(мл): 00
Только сегодня узнал как мантисса высчитывается, ну не математик я. На примере первого числа:
Мантисса = CC CC CD (десятичное 13421773)
Делим её на FF FF FF (десятичное 16777215)
Получаем грубо 0,8
Подставляем в ту формулу, получается 3,2
============================================
Люди, в 8-битных контроллерах это реально? Сколько памяти программ потребуется?
|
|
|
|
22.10.2007, 13:58
|
|
Вид на жительство
Регистрация: 06.10.2006
Сообщений: 329
Сказал спасибо: 4
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
|
Re: 32-разрядные числа в 8-битном PIC
Сообщение от dimmich
|
Первый раз столкнулся с математическими вычислениями в PIC. Есть необходимость в PIC16F628 умножать, делить, вычитать и складывать 32-разрядные знаковые числа. Нашел библиотеки только для 16-разрядных чисел. Кто что подскажет?
|
Переходи на С и проблем не будет.
На АСМе можно писать только в самом начале пути, для изучения архитектуры, или быть программистом экстра класса и выискивая лишние такты. А во всех остальных случаях это непроизводительная трата времени.
|
|
|
|
22.10.2007, 16:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.05.2006
Адрес: Владимир
Сообщений: 2,797
Сказал спасибо: 2,969
Сказали Спасибо 4,213 раз(а) в 1,187 сообщении(ях)
|
Это извечный спор, кто на чём пишет, что оптимальней... Я уверен, есть у кого-то такие подпрограммы.
|
|
|
|
22.10.2007, 18:09
|
|
Временная регистрация
Регистрация: 18.10.2007
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
А можно перейти к числам с фиксированной точкой, а не плавающей? Задача существенно упростится.
Можно еще вот это посмотреть http://picfloat.sourceforge.net/
|
|
|
|
22.10.2007, 19:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.05.2006
Адрес: Владимир
Сообщений: 2,797
Сказал спасибо: 2,969
Сказали Спасибо 4,213 раз(а) в 1,187 сообщении(ях)
|
Моя задача собрать и обработать данные с разных устройств производства других фирм, преобразовать их разные выходные данные в одинаковый вид, и передать эти даные дальше, на более высокий уровень (на комп, в базу данных). Было решено преобразование форматов делать именно на уровне моего контроллера, а не путаться в разных принятых форматах данных в компе (сейчас так реализовано). Тут спорить нет смысла: шеф дал Т.З. - я делаю
За ссылку спасибо! Буду долго разбираться...
Упс... там на C написано, а я на асме пишу...
|
|
|
|
22.10.2007, 19:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Шеф - бестолочь. В том же мускуле - данные преобразовать..как 2 байта об асфальт.. что-то совсем не вижу проблемы в том, чтобы данные от контроллера выдать в серверную БД.
|
|
|
|
22.10.2007, 20:10
|
|
Вид на жительство
Регистрация: 06.10.2006
Сообщений: 329
Сказал спасибо: 4
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
|
Сообщение от dimmich
|
Это извечный спор, кто на чём пишет, что оптимальней... Я уверен, есть у кого-то такие подпрограммы.
|
На сийте микрочипа очень много библиотек в том числе и необходимая, ищите.
|
|
|
|
22.10.2007, 20:15
|
|
Временная регистрация
Регистрация: 18.10.2007
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Да там и асм есть, только все на макросах.
В документе AN575 "IEEE 754 Compliant Floating Point Routines" от Microchip чистый асм.
|
|
|
|
22.10.2007, 22:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.05.2006
Адрес: Владимир
Сообщений: 2,797
Сказал спасибо: 2,969
Сказали Спасибо 4,213 раз(а) в 1,187 сообщении(ях)
|
Сообщение от pfgx
|
AN575 "IEEE 754 Compliant Floating Point Routines"
|
Наиболее подходящий формат в AN575 - это "IEEE 754" (всего там 3 формата чисел поддерживается). Всё нравица! Но там старший бит мантиссы для какой-то своей цели используется, не в качестве значения мантиссы. Просматривать, переделывать исходник? Нихоца. Ну если не будет других предложений...
Кстати, видимо моя программа уже не помещается с AN575 в память PIC16F628. Когда допишу код, наверное придётся перепаять контроллер на другой, с бОльшим флэшем. Рассмотрю: PIC16F648, PIC16F87, PIC18F1320
|
|
|
|
22.10.2007, 23:00
|
|
Прописка
Регистрация: 24.12.2006
Сообщений: 167
Сказал спасибо: 9
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: 32-разрядные числа в 8-битном PIC
Сообщение от dimmich
|
Первый раз столкнулся с математическими вычислениями в PIC. Есть необходимость в PIC16F628 умножать, делить, вычитать и складывать 32-разрядные знаковые числа. Нашел библиотеки только для 16-разрядных чисел. Кто что подскажет?
|
Посмотри еще это:
http://massmind.org/techref/microchi...frtomath32.asm
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:34.
|
|