разработать программу, формирующую в регистре DPTR дополнительный код числа минус 5000 (двухбайтовый формат);
Сделал во такую программку: MOV DPH,#10H ; MOV DPL,#00H ; MOV A,#ECH ;первый байт кода в аккумуляторе MOVX @DPTR,A ;первый байт кода в памяти программы MOV A,#78H ;второй байт кода в аккумуляторе MOVX @DPTR,A ;второй байт кода в памяти INC DPTR ;наращивание указателя памяти END
Компилятор ругается вот так: 1 ;начало программы 2 0000 758310 MOV DPH,#10H ; 3 0003 758200 MOV DPL,#00H ; Error in 4: Undefined label: ECH MOV A,#ECH ;первый байт кода в аккумуляторе ^ 4 0006 7400 MOV A,#ECH ;первый байт кода в аккумуляторе 5 0008 F0 MOVX @DPTR,A ;первый байт кода в памяти программы 6 0009 7478 MOV A,#78H ;второй байт кода в аккумуляторе 7 000B A3 INC DPTR ;наращивание указателя памяти 8 000C F0 MOVX @DPTR,A ;второй байт кода в памяти 9 000D END
Компилятор «законно» ругается, т.к. шестнадцатеричные числа не могут начинаться с буквы - правильно может быть так ( ….в зависимости от компилятора) #0ECH, #0xEC, #$EC
Дополнительный код -5000 дес = 0хEC78 Если задание поместить этот код в dptr, то тогда
mov dph,#ech mov dpl,#78h и все.
Если у вас задание разместить этот код в памяти по адресу 0х1000 используя dptr , то тогда вы не сильно ошиблись:
mov dph,#10h mov dpl,#00h mov a,#ech movx @dptr,a inc dptr mov a,#78h movx @dptr,a inc dptr (если надо) Для компилятора пишите текст программы только маленькими буквами. Прилагаю архив, там программатор для АТ89с1051(2051,4051) схема+программа на паскале +описание , схема+прошивка+описание часов на АТ89С2051 и проект на асме вместе с компилятором для мк51(и не только). Посмотрите. Есть бета версия прошивки для этой конструкции часов (кое-что переписано и исправлено, добавлены мелодии) - это если понадобится кому-то, выложу
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Проблема с ECH устранена,действительно нужно было написать 0ECH. Прога компилируется,но сам ассемблер теперь ругается вот так: На строчке - MOVX @DPTR,A Ошибка: Trap:Undefined address:X=1000H Листинг проги: mov dph,#10h mov dpl,#00h mov a,#0ech movx @dptr,a inc dptr mov a,#78h movx @dptr,a end
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Может у тя ассемблек "кривой" или хочет что-бы перед программой ему что-то определили, адреса или прочее.. Попробуй написать в начале директиву ORG, как у мя написано.. Пользуюсь Металинк-асмом..
P.S. pyzh_man, благодарю за протекцию..
_________________ Между людьми возникает напряжение, если у них разный потенциал...
Может у тя ассемблек "кривой" или хочет что-бы перед программой ему что-то определили, адреса или прочее.. Попробуй написать в начале директиву ORG, как у мя написано.. Пользуюсь Металинк-асмом..
P.S. pyzh_man, благодарю за протекцию..
Поставил,без изменений. Компиляция и у меня проходит без ошибок.Ругается именно ассемблер,когда пытаешься запустить прогу.
скорее всего латиница-кирилица где-то прермешались "Error in 4: Undefined label: ECH MOV A,#ECH ;первый байт кода в аккумуляторе" в данном случае #ech воспиринято как имя метки (сгенерирован по ошибке почему-то код 7400), при том, что в других случаях компилятор отработал верно (MOV A,#78H = 7478) перепиши внимательно заново текст исходника брр... оффтоп... пользуйтесь компиляторами с хорошо изученными иописаниями...
Что-то мне подсказывает, что у топик-стартера задача заключается не в подсчете на калькуляторе дополнительного кода числа 5000 и отправке его (зачем?) в ячейку внешней памяти по адресу 1000h. А именно в том, чтобы вычислить программно этот код и поместить в dptr:
alyarma писал(а):
разработать программу, формирующую в регистре DPTR дополнительный код числа минус 5000 (двухбайтовый формат);
Это может выглядеть так, вариант:
Код:
org 0 jmp start
start: mov dptr, #5000 ; помещаем 5000 в dptr временно mov a, dpl ; мл. байт числа в аккумулятор cpl a ; инвертируем акк. mov dpl, a ; отправляем обратно mov a, dph ; ст. байт числа в аккумулятор cpl a ; инвертируем акк. mov dph, a ; отправляем обратно inc dptr ; добавляем 1
; все, у нас в dptr дополнительный код числа 5000, что и означает -5000 или 0ec78h
Задача:Карта опроса 16 датчиков (массив однобайтовых чисел без знака) записана в ОЗУ МП серии МК51 начиная с ячейки 20H. Начиная с ячейки 30Н сформировать копию массива, изменив порядок следования чисел на обратный, а минимальное значение вывести на светодиоды порта вывода Р1. Первая часть задачки реализована, а вот вторая (выделенная большим шрифтом) что-то не получается. Подскажите в чём проблема.Заранее спасибо.
Во-первых: второй цикл сделан не правильно - R3 забыли уменьшать, и метка M2 должна быть на следующей строке после присвоения R3 количества проходов. Во-вторых МитяРа написал.
PS: И лучше не хранить информацию в P1, а использовать регистр, и в конце программы вывести его значение в порт.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения