02.02.2017, 18:18 | #1 (permalink) |
Member
Регистрация: 25.01.2017
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Написание программ для MCS-51
Интересует вопрос касательно написания программы для микроконтроллера серии MCS-51 (конкретный тип микроконтроллера на данном этапе не интересует, он будет определяться в последующем). В частности интересует написание следующих программ: - программы арифметических операций (суммирование, вычитание, умножение и деление) чисел с плавающей и фиксированной запятой; - программы двоично-десятичного преобразования чисел с плавающей и фиксированной запятой. |
02.02.2017, 18:18 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Прочитайте похожие темы, это не сложно Исходники для студентов + скайп-консультации,написание программ Написание программ на заказ (saberteam.ru/) Написание bat и cmd Написание гаджетов |
03.02.2017, 14:58 | #4 (permalink) |
Member
Регистрация: 25.01.2017
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вопрос в том, что ранее с микроконтроллерами особо не стыкался, в основном на уровне изготовления устройств которые печатались в журналах. А то что я делал сам, то я обошелся масштабным усилителем в результате чего и избавился от проблемы с дробными числами. А теперь никак не получается, а вбивать таблицу результатов вычислений функции, возможным не вижу так как их больше максимально адресуемого объема ПЗУ.
|
03.02.2017, 15:32 | #5 (permalink) | |
Member
Регистрация: 15.08.2013
Адрес: Minsk
Сообщений: 145
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 713
|
Цитата:
Вообще-то алгоритмы деления-умножения найти можно легко, как и примеры для конкретных процессоров. Но надо ли? Не проще использовать для разработки Си и не тратить время на "кирпичики", а заниматься собственно алгоритмом? ЗЫ Сам начинал с ассемблера, просто в те времена компиляторов хороших не было еще. И с х51 работал и даже с х48. И уверенно скажу - не напишете вы на асме лучше, чем на Си. Ну, если эта программа чуть сложнее мигания светодиодом. Компиляторы нынче умные. Надежность программы и скорость разработки - на порядок выше. А по "железу" - скажу, что нынче готовая плата с STM32 процессором стоит примерно доллара три, и за пятерку - USB-свисток - программатор и пошаговый отладчик на кристалле. И это 32-х разрядный проц с тактовой выше 50 МГц и просто необъятной периферией. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
03.02.2017, 18:01 | #6 (permalink) |
Member
Регистрация: 25.01.2017
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вкратце в чем суть:
Есть физический процесс которым необходимо управлять, а для его контроля используется три измерительных датчика. На основании показаний датчиков формируется два управляющих сигнала (которые определяются при помощи вычисления математических формул), а также необходимо производить индикацию определенных параметров. Проблем с индикацией и формированием одного из двух управляющих сигналов нет. А вот со вторым управляющим сигналом есть проблемы потому как диапазон управления лежит в диапазоне (0 . . . 10) В с дискретностью 10 мВ, да и зависимость нелинейная. |
03.02.2017, 18:12 | #7 (permalink) | |
Member
Регистрация: 15.08.2013
Адрес: Minsk
Сообщений: 145
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 713
|
Цитата:
10 разрядов ШИМ - для х51 сходу не скажу, подзабыл я их уже, а на любой AVRке получить запросто. И float тут не нужен - таблицу можно рассчитать на компе. |
|
07.02.2017, 16:44 | #8 (permalink) | |
Member
Регистрация: 07.02.2017
Адрес: СССР
Сообщений: 65
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
Изначально задаемся, что имеем дело с числами с фиксированной частотой (я думаю так будет проще). Если максимальный результат вычислений в отношении к целы лежит в пределах от 0 до 10, то, понятно, что достаточно одного байта для целых. Например, его можно определить ячейкой памяти данных 30h А судя из дискретности то, для отображения дробной части, также с головой хватит одного байта. К продолжения примера, его можно определить ячейкой памяти данных 31h Выполнение операций суммирования и вычитания тогда следует производить как для двухбайтных чисел. В случае умножения также проблем никаких не вижу, достаточно использовать процедуру MUL AB: к примеру есть два числа X,x и Y,y (в приведенном обозначении большие буквы соответствуют целым а маленькие дробным) то всего навсего достаточно определить сумму по частным производным: X*Y + X*y + Y*x + x*y. Тогда, частные производные: X*Y - дают целые части ; X*y и Y*x - дают старший байт целую часть, а младший байт дробную часть; x*y - дает два байта дробной части, если достаточно точности до сотых, то младшую часть произведения можно просто откинуть. В случае деления, его следует производить по всем правилам деления как и для целых чисел. Касательно преобразования двоичного кода числа с фиксированной запятой в двоично-десятичное, то целые определяются путем двукратного деления байта целых на 10 (первое деление дает единицы, а второе сотни) (а в случае что итоговый результат как я понял не превышает 10 то второе деление и не нужно вообще). А дробная часть получается путем умножения байта дроби на 10, каждое такое умножение дает последующие значения десятые, сотые, тысячные и т. д.. А вообще можете изучить следующие книги по 51-м микроконтроллерам: Боборыкин А. В. Однокристальные микроЭВМ; Каспер Э. Программирование на языке Ассемблера для микроконтроллеров семейства i8051, в них найдете все необходимые примеры. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|