
- •24 Содержание
- •1. Введение
- •2. Содержание лекционного курса
- •3. Список рекомендуемой литературы
- •4. Компьютерные обучающие программы
- •5. Упражнения по решению задач
- •5.1. Назначение выводов, программная модель мк51
- •5.2. Типы и форматы команд мк51
- •5.3. Примеры выполнения команд мк51
- •5.4. Примеры программ обработки данных
- •Отладка прикладных программ для микроконтроллера мк51 ( Лабораторная работа )
- •7. Варианты заданий для контрольной работы №1
5.2. Типы и форматы команд мк51
Задача 11. Определить машинные коды команды ANL A,B.
Ответ. Регистр-расширитель аккумулятора В допускает только прямую байтовую адресацию, следовательно, это двухбайтовая команда типа 3. Первый байт (код операции - 55Н) находим в приложении Л учебного пособия, второй байт (прямой адрес регистра В - F0H) указан на рисунке 16.2.
Задача 12. Транслировать команду CLR F0.
Ответ. F0 - символическое имя бита PSW.5 (см. рис.16.3 учебного пособия). Следовательно, это двухбайтовая команда типа 4. Код операции С2Н берем из приложения Л, прямой адрес бита D5H определяем прибавляя число 5 к прямому адресу регистра PSW D0H (рис.16.2 учебного пособия).
Задача 13. Определить второй байт команды SJMP $.
Решение. Команда «короткий переход»» выполняет безусловный переход в программе по указанному адресу. Знак $ в поле операндов используется для обозначения текущего содержимого программного счетчика РС (он равен адресу первого байта рассматриваемой команды). В данном случае речь идет о двухбайтовой команде типа 5. Второй байт команды - относительное смещение со знаком (rel) от начального адреса следующей команды до адреса, указанного в команде. В данном примере rel=-2=FEH (rel записывается в дополнительном коде и находится в диапазоне от -128 до +127).
Задача 14. Транслировать команду AJMP 1000.
Решение. Команда «абсолютный переход» передает управление по адресу внутри текущей страницы памяти программ объемом 2 Кбайт. Это двухбайтовая команда типа 6. Заменив ее эквивалентной командой AJMP 3E8H записываем второй байт Е8Н. По приложению Л для модели AJMP 3xxH находим первый байт команды 61Н.
Задача 15. Определить тип команды MOV B,P0.
Решение. Это трехбайтовая команда типа 9 (общий вид команды MOV add,ads). Второй байт команды 80Н - прямой адрес порта Р0. Третий байт команды F0H - прямой адрес регистра В.
Задача 16. Что происходит при выполнении команды LCALL 1AB7H?
Решение. Это трехбайтовая команда типа 12, вызывающая подпрограмму, находящуюся по указанному адресу. По команде LCALL к программному счетчику РС прибавляется 3 для получения адреса следующей команды и после этого полученный 16-разрядный результат помещается в стек (сначала следует младший байт, за ним - старший), а содержимое указателя стека SP увеличивается на 2. Затем старший и младший байты РС загружаются соответственно вторым (1АН) и третьим (В7Н) байтами команды LCALL. Выполнение программы продолжается командой, находящейся по указанному адресу.
Задача 17. Что происходит при выполнении команды CJNE A,#50,M1?
Решение. Это трехбайтовая команда типа 10. Происходит сравнение содержимого аккумулятора с константой, указанной во втором байте команды (32Н) и выполняется переход на метку М1, если операнды не равны. Адрес перехода вычисляется при помощи сложения значения (со знаком), указанного в третьем байте команды (rel), с содержимым счетчика команд РС после увеличения его на три. Флаг переноса С устанавливается в 1, если содержимое аккумулятора меньше константы. В противном случае перенос сбрасывается. Команда не оказывает влияния на операнды. При равенстве операндов выполняется следующая команда программы.
Задача 18. Транслировать команду JBC T1,$+10?
Решение. Это трехбайтовая команда типа 11. Код операции 10Н. Второй байт команды В5Н соответствует прямому адресу бита Т1 (Р3.5). Третий байт команды 07Н показывает, сколько шагов необходимо сделать от адреса следующей команды до адреса перехода (rel=+7). Команда осуществляет переход по указанному адресу, если бит установлен, с последующим сбросом бита. В противном случае выполняется следующая за JBC команда.