Перейти к содержанию

Написание Программ На Языке Assembler Asm51


rafo

Рекомендуемые сообщения

Здравствуйте.

Передо мной стоит задача написания двух простых программ для микроконтроллера MCS-51 на языке ассемблера.

Хотелось бы попросить помощи в их написании, т.к. плохо понимаю язык ассемблер. Микроконтроллер 8051

Прикрепляю файл, который смог сделать, прошу сильно не пинать :( , что там не правильно? Задание ниже

Программа 1.

Задача 1.

Размещение в памяти программ массива из 20 ненулевых байтовых констант.

Задача 2.

Проверка условия*, при выполнении которого реализуется переход во вторую программу. При невыполнении условия продолжается выполнение первой программы.

Задача 3.

Пересылка первых 10-ти элементов массива во внешнюю память данных.

Задача 4.

Пересылка оставшихся 10-ти элементов массива во внутреннюю память данных.

*Команда условного перехода по состоянию: «нулевого разряда регистра P2»

Программа 2.

Задача 1.

Пересылка первых 10-ти модифицированных* элементов массива во внешнюю память данных.

Задача 2.

Пересылка оставшихся 10-ти модифицированных* элементов массива во внутреннюю память данных.

*команда модификации массива: «сдвиг элементов массива вправо»

proba.zip

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

У вас есть Описание системы команд 8051?

           JB     P2.0,met2 ; "переход если бит установлен. условие по состоянию нулевого разр.регис. Р2"

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Григорий Т., если не ошибаюсь, LJMP позволяет "прыгать" в пределах всех адресов, а JB только в пределах одного банка. Если так, то ТС должен учитывать это.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

У вас есть Описание системы команд 8051?

Так как это учебное задание, то все команды черпаю с рекомендованного преподавателем учебника. Книгу могу сказать только в ЛС.

rafo, а Вам понятно, о чем мы сейчас?

не совсем понимаю о каких "банках" идет речь, значит JB здесь не подходит?

Ссылка на комментарий
Поделиться на другие сайты

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

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Григорий, понял спасибо!

Уважаеме форумчане, если кто то из Вас хорошо пишет на ассемблере, то у меня еще есть задание на курсовик, в котором нужно разработать программу "измеритель временных интервалов" для микроконтроллера 1816 ВЕ 31. Если интересно пишите в ЛС обсудим цену и подробности.

Ссылка на комментарий
Поделиться на другие сайты

Для этого есть раздел Вакансии и разовая работа.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

rafo, адресное пространство МК51 составляет 64 кБ.

Команды короткого перехода, такие, как JB, JMP и др., позволяют перемещаться в пределах одной страницы, размер которой составляет 2 кБ (ранее я страницу назвал банком).

Команды длинного перехода, как LJMP, позволяет изменить адрес в счетчике адресов в пределах всей памяти.

Ссылка на комментарий
Поделиться на другие сайты

В общем случае - да. Для коротких программ - нет (по результату действия).

Вдобавок при оптимизации кода следует учитывать, что, например, JMP занимает два байта памяти (вроде бы), LJMP - три. Также нужно учитывать количество машинных циклов, необходимых для выполнения кода.

Это касается и многих других команд.

Ссылка на комментарий
Поделиться на другие сайты

Забей на переходы. ASM51 сам рассчитает длину перехода и вставит нужную команду. Мало того, адрес перехода может быть вычислен прямо в компиляторе по довольно сложной формуле после чего можно перейти по вычисленному адресу через JMP @A+DPTR. В формуле могут быть имена меток, логичские операции и операции сдвига. Вычисляешь на основе адреса метки DPH, DPL, формируешь сдвиг в A и переходишь. Можно с одной точки стартануть в любую точку всего адресного пространства.

Массив данных можно запихать в память программ и читать их через MOVC по мере необходимости (нелинейные зависимости любой сложности и любой точности)

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

Фрунзе А. Система команд микро-ЭВМ семейства 8051 Радио 1995-01.pdf

Боборыкин А.В. Однокристальные микроЭВМ Справочник 1994г.rar

Сташин В.В. Проектирование цифровых устройств на однокристальных микроконтроллерах. 1990.rar

Ссылка на комментарий
Поделиться на другие сайты

avv_rem, плохой совет даете: "Забей на переходы. ASM51 сам рассчитает...". Это из серии: "Так пусть работает железный паровоз...". Или: "Пусть лошадь думает, у нее голова большая".

Кстати, вроде бы формат djvu стал разрешен на форуме. Сам пока не пробовал в нем прикреплять.

Ссылка на комментарий
Поделиться на другие сайты

Забей на переходы. ASM51 сам рассчитает длину перехода и вставит нужную команду.

Вы наверно крутой программист... Это что за ассемблер у вас такой умный? Мой, при неправильной длине, только ошибку выдает.

0054 20A000		 58				 jb	 p3.7, delay				
****------------------------------------------------------^
****ERROR #18: Target address exceeds relative address range

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Ashling Microsystems. Многопроходный.

Я имел в виду команды LJMP, AJMP и SJMP. Всегда ставлю просто JMP, которой в списке команд вообще нет. Ассемблер сам выбирает и ставит минимально достаточную. То же самое относится к ACALL и LCALL, которые заменяю на просто CALL. Все равно команды RET и RETI не различают, какой командой – ACALL или LCALL была вызвана подпрограмма, т.к. в обоих случаях в стеке сохраняется полный 16-битный адрес возврата.

Максимальная длина команды в I8051 составляет 3 байта. Первый байт – это всегда код операции. В командах условного перехода второй байт – всегда адрес анализируемой переменной. На адрес перехода выделяется третий и последний байт. Поэтому в командах условного перехода нет и не может быть переходов далее одного байта адреса, т.е. страницы длиной 256 байт. Оставьте свой компилятор в покое.

Ваша проблема будет устранена, если Вы объявите кусок своей неудачной программы процедурой, которая будет заменена всего одной командой CALL, расположенной вблизи команды условного перехода.

Изменено пользователем avv_rem
Ссылка на комментарий
Поделиться на другие сайты

Самая большая сложность при изучении для меня то что я никак не могу проверить работает ли моя программа или нет. То есть физически проверить на железе. Крос ассемб. проверяет только орфографию, а эмуляторов вроде не существует?

Ссылка на комментарий
Поделиться на другие сайты

а эмуляторов вроде не существует?

Да ну!

Есть и "железные" средства отладки. А из программных, протеус великолепно симулирует.

Причем 51 асм, прицеплен в протезе бонусом, можно писать непосредственно в проекте.

Errare humanum est. Коли людЯм позволено, что же о нас то говорить!
 

Ссылка на комментарий
Поделиться на другие сайты

В командах условного перехода второй байт – всегда адрес анализируемой переменной

Не всегда.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

  • 9 месяцев спустя...

Самая большая сложность при изучении для меня то что я никак не могу проверить работает ли моя программа или нет. То есть физически проверить на железе. Крос ассемб. проверяет только орфографию, а эмуляторов вроде не существует?

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...