Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Микропроцессоры


Ответ
 
Опции темы Опции просмотра
Старый 02.02.2017, 18:18   #1 (permalink)
wintechn
Member
 
Регистрация: 25.01.2017
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Unhappy Написание программ для MCS-51

Уважаемые форумчане.
Интересует вопрос касательно написания программы для микроконтроллера серии MCS-51 (конкретный тип микроконтроллера на данном этапе не интересует, он будет определяться в последующем).
В частности интересует написание следующих программ:
- программы арифметических операций (суммирование, вычитание, умножение и деление) чисел с плавающей и фиксированной запятой;
- программы двоично-десятичного преобразования чисел с плавающей и фиксированной запятой.
wintechn вне форума   Ответить с цитированием

Старый 02.02.2017, 18:18
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Прочитайте похожие темы, это не сложно

Исходники для студентов + скайп-консультации,написание программ
Написание программ на заказ (saberteam.ru/)
Написание bat и cmd
Написание гаджетов

Старый 02.02.2017, 18:26   #2 (permalink)
prima
Member
 
Регистрация: 31.08.2015
Сообщений: 13,566
Сказал(а) спасибо: 170
Поблагодарили 138 раз(а) в 60 сообщениях
Репутация: 47739
По умолчанию

А чё тут думать?
Берём карандашик и пишем.
Или берём Протеус и запускаем в нём эту однокристалку.
Вопрос то в чём?
prima вне форума   Ответить с цитированием
Старый 03.02.2017, 12:45   #3 (permalink)
nml
Member
 
Аватар для nml
 
Регистрация: 15.08.2013
Адрес: Minsk
Сообщений: 136
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 713
По умолчанию

Цитата:
Сообщение от prima Посмотреть сообщение
Вопрос то в чём?
Два варианта - либо человеку надо срочно сдать курсовую а он ни слухом ни духом в теме... либо человек хочет освоить работу с МК, а с какой стороны начать - пока не знает. Во втором случае надо помочь.

wintechn, каков ваш вариант?
nml вне форума   Ответить с цитированием
Старый 03.02.2017, 14:58   #4 (permalink)
wintechn
Member
 
Регистрация: 25.01.2017
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вопрос в том, что ранее с микроконтроллерами особо не стыкался, в основном на уровне изготовления устройств которые печатались в журналах. А то что я делал сам, то я обошелся масштабным усилителем в результате чего и избавился от проблемы с дробными числами. А теперь никак не получается, а вбивать таблицу результатов вычислений функции, возможным не вижу так как их больше максимально адресуемого объема ПЗУ.
wintechn вне форума   Ответить с цитированием
Старый 03.02.2017, 15:32   #5 (permalink)
nml
Member
 
Аватар для nml
 
Регистрация: 15.08.2013
Адрес: Minsk
Сообщений: 136
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 713
По умолчанию

Цитата:
Сообщение от wintechn Посмотреть сообщение
усилителем в результате чего и избавился от проблемы с дробными числами. А теперь никак не получается
Здесь бы неплохо знать суть проблемы. Что за устройство делаете, хотя бы примерно. Почему именно х51 семейство. Что используется в качестве среды разработки (сильно подозреваю что ассемблер? - и опять же - почему именно?)

Вообще-то алгоритмы деления-умножения найти можно легко, как и примеры для конкретных процессоров. Но надо ли? Не проще использовать для разработки Си и не тратить время на "кирпичики", а заниматься собственно алгоритмом?

ЗЫ Сам начинал с ассемблера, просто в те времена компиляторов хороших не было еще. И с х51 работал и даже с х48. И уверенно скажу - не напишете вы на асме лучше, чем на Си. Ну, если эта программа чуть сложнее мигания светодиодом. Компиляторы нынче умные. Надежность программы и скорость разработки - на порядок выше.

А по "железу" - скажу, что нынче готовая плата с STM32 процессором стоит примерно доллара три, и за пятерку - USB-свисток - программатор и пошаговый отладчик на кристалле. И это 32-х разрядный проц с тактовой выше 50 МГц и просто необъятной периферией.
nml вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 03.02.2017, 18:01   #6 (permalink)
wintechn
Member
 
Регистрация: 25.01.2017
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вкратце в чем суть:

Есть физический процесс которым необходимо управлять, а для его контроля используется три измерительных датчика.

На основании показаний датчиков формируется два управляющих сигнала (которые определяются при помощи вычисления математических формул), а также необходимо производить индикацию определенных параметров.

Проблем с индикацией и формированием одного из двух управляющих сигналов нет.

А вот со вторым управляющим сигналом есть проблемы потому как диапазон управления лежит в диапазоне (0 . . . 10) В с дискретностью 10 мВ, да и зависимость нелинейная.
wintechn вне форума   Ответить с цитированием
Старый 03.02.2017, 18:12   #7 (permalink)
nml
Member
 
Аватар для nml
 
Регистрация: 15.08.2013
Адрес: Minsk
Сообщений: 136
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 713
По умолчанию

Цитата:
Сообщение от wintechn Посмотреть сообщение
А вот со вторым управляющим сигналом есть проблемы потому как диапазон управления лежит в диапазоне (0 . . . 10) В с дискретностью 10 мВ, да и зависимость нелинейная.
Ну, получается, 1000 дискрет? Если зависимость известна, таблица для ШИМа, 1000 значений 2000 байт. Совсем несмертельно, по моему.

10 разрядов ШИМ - для х51 сходу не скажу, подзабыл я их уже, а на любой AVRке получить запросто. И float тут не нужен - таблицу можно рассчитать на компе.
nml вне форума   Ответить с цитированием
Старый 07.02.2017, 16:44   #8 (permalink)
ingkulibin
Member
 
Аватар для ingkulibin
 
Регистрация: 07.02.2017
Адрес: СССР
Сообщений: 65
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от wintechn Посмотреть сообщение
Вкратце в чем суть:

Есть физический процесс которым необходимо управлять, а для его контроля используется три измерительных датчика.

На основании показаний датчиков формируется два управляющих сигнала (которые определяются при помощи вычисления математических формул), а также необходимо производить индикацию определенных параметров.

Проблем с индикацией и формированием одного из двух управляющих сигналов нет.

А вот со вторым управляющим сигналом есть проблемы потому как диапазон управления лежит в диапазоне (0 . . . 10) В с дискретностью 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, в них найдете все необходимые примеры.
ingkulibin вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 21:03.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.