Лабораторные МС 68HC11 (1086185), страница 5
Текст из файла (страница 5)
Рассмотрим пример использова-Логические команды. Команды работы с битовыми полями. Команды сдвигов.21Лабораторная работа №4ния этих команд для сдвига 4-х байтного числа, расположенного в ячейках 0Þ3, влево:cpu6811org$c800ldx#0lsl3,xrol2,xrol1,xrol0,xЛогические команды. Команды работы с битовыми полями. Команды сдвигов.22Лабораторная работа №45. Контрольные вопросы1. Каков результат выполнения программы:cpu6811org$c800secclraadda #02. Какие методы адресации применимы к командам циклического сдвига?3.
Расскажите о командах работы с битами регистра CCR.4. Какие особенности работы с отладчиком следует учитывать при отладке программ, запрещающих прерывания?5. В чем разность команд ASR и LSR?6. Можно ли использовать команду ROLA вместо команд ASLA, LSLA?7. Какие логические команды Вы знаете?8. Каким образом реализуется команда ASRD (сдвиг регистра D на 1 байт вправо)?9. На какие группы можно подразделить команды сдвигов?10.Дайте определение команд логического сдвига.11.Чем отличается команда COM от команды NEG?12.Каким образом можно съэмулировать команду COM, пользуясь командами, изученнымив данной лабораторной работе?13.Какие параметры имеет команда BSET?14.Чем отличается команда ORAA от команды EORA?6.
Задания1. Напишите программу, осуществляющую сдвиг влево 3-х ячеек памяти таким образом,чтобы выдвигаемый из старшей ячейки памяти бит становился на место младшего бита вмладшей ячейке.2. Произведите операцию “логическое ИЛИ” над регистрами X и Y.3. Напишите программу, производящую обмен старшей и младшей тетрады аккумулятора A.4. Напишите программу, создающую зеркальное отображение битовой карты регистра A врегистре B.5.
Реализовать подсчет установленных в регистре A битов с занесением суммы в регистр B.6. Напишите программу умножения двух двоично-десятичных 8-разрядных чисел.7. Произведите операцию “логическое И” над регистрами X и Y.8. Написать тремя способами установку битов 2 и 3 в ячейке памяти $10.9. Написать программу, копирующую содержимое регистров A и B в регистр X таким образом, что старшая тетрада регистра A и старшая тетрада регистра B составляли старшийбайт регистра X, а младшие тетрады - младший.10.Написать программу, позволяющую инвертировать те биты регистра А, которые сброшены в регистре B.11.Написать программу, сбрасывающую биты в регистре А, если соответствующие биты регистров A и B установлены. Остальные биты должны оставаться в исходном состоянии.12.Написать программу, которая в четные биты регистра X записывает биты регистра A, а внечетные - регистра B.13.Написать программу, копирующую регистр A в регистр B с обратным порядком следования бит, инвертируя нечетные биты.14.Написать программу, заполняющую ячейки памяти $0Þ$7 соответствующими битамирегистра A.
Т.е., например, если бит 0 в регистре A сброшен, то в ячейку $0 записываетсяноль, если установлен - $FF.15.Установить 4 и5 биты в регистра A с помощью команды BSET.Логические команды. Команды работы с битовыми полями. Команды сдвигов.23Лабораторная работа №5Лабораторная работа №5Команды передачи управления. Специальные команды.1.
ВведениеВ данной лабораторной работе изучаются команды передачи управления, служащие дляветвления программы за счет изменения регистра программного счетчика PC, и специальныекоманды STOP и WAI, служащие для организации эффективной работы микроконтроллера всистемах, критичных по параметрам потребляемой мощности.2. Команды передачи управленияКоманды передачи управления можно разделить на 4 группы:• команды безусловного перехода (JMP, BRA, BRN, NOP),• команды работы с подпрограммами (JSR, BSR, RTS),• команды условного перехода (BEQ, BNE, BMI, BPL, BCS/BLO, BCC/BHS, BVS,BVC, BGT, BGE, BLT, BLE, BLS, BHI, BRSET, BRCLR),• команды работы с прерываниями (SWI, RTI).Список команд передачи управления представлен в таблице 5.1.
Все команды передачиуправления не оказывают влияния на состояние регистра статуса.Таблица 5.1. Команды передачи управления.JMP*BEQ**BCS/BLO**BGT**BLS**JSR*****SWI***************BRABNEBCC/BHSBGEBHIBSRRTI***BRN**BMI**BVS**BLT**BRSET****RTS****************NOPBPLBVCBLEBRCLRПримечания:*- Команды, использующие расширенную и индексную адресацию**- Команды, использующие относительную адресацию***- Команды, использующие неявную адресацию****- Команды, использующие смешанную адресацию: первый операнд использует либо прямую, либо индексную адресацию, второй - относительную*****- Команды, использующие прямую, расширенную и индексную адресациюJMP, BRA, BRN, NOPS X H I- - - -N Z V C- - - cpuorgldabldxl0l1l2l3Команды безусловного перехода служат для передачиуправления другому участку программы независимо от состояния регистра статуса микроконтроллера и содержимого ячеекпамяти.
Рассмотрим работу этих команд более подробно наследующем примере:6811$c800#$02#ways; начальный адрес программы; выбор варианта ветвления программы; занести в регистр X адрес таблицы; переходовldy0,x; считать значение в регистр Yjmp0,y; вызвать подпрограмму по адресу,; находящемуся в регистре Ynop; задержка в 2 тактаinx; увеличить регистр X на 2 дляinx; выборки следующего адреса из; таблицы переходовbral0; перейти наметку l0bral1; перейти на метку l1brn*; задержка в 3 тактаКоманды передачи управления.
Специальные команды.24Лабораторная работа №5waysfdbl1, l2, l3Выполните программу в пошаговом режиме. Обратите внимание, что команда “jmp 0,x” выполнится два раза, при этом в первом случае переход будет осуществлен на метку l2, а во втором - l3.JSR, BSR, RTSКоманды работы с подпрограммами позволяют выделятьчасто используемую последовательность действий в подпроS X H I N Z V Cграмму. При переходе к подпрограмме (JSR, BSR) в стеке сохраняется адрес следующей за текущей команды и регистр PC- - - - - - - изменяется по правилам команд безусловного перехода.
Привыходе из подпрограммы по команде RTS происходит выборка из стека адреса возврата. Работу этих команд можно проследить на примере программы, размещающей адрес своей второй команды в ASCII формате в ячейках $0Þ3:cpu6811org$c800bsrl1; переход на следующую командуl1pulx; получить в регистр X адрес l1 ($c802)xgdx; расписать адрес в формате ASCIIldy#0; в ячейках $0Þ$3bsrbin2ascii; вызвать подпрограмму, сохраняющую; регистр A в формате ASCII в ячейках; (y), (y+1)tba; переписать регистр B в регистр Ainy; и расписать его в ячейках $2, $3inybsrbin2asciibra*bin2asciipshb; сохранить в стеке регистр Btab; скопировать в него регистр Alsra; выделить в A старшую тетрадуlsralsralsrabsrhex2ascii; преобразовать число 0-f в ASCII кодstaa 0,ytba; повторить для младшей тетрадыanda #$fbsrhex2asciistaa 1,ypulbrtshex2asciiadda #0; преобразование числа из диапазонаdaaadda #$f0adca #$40rtsКоманды условного перехода служат для передачи управления в зависимости от состояния регистра CCR ОЭВМ или значения ячейки памяти (BRSET и BRCLR).Иногда команды условного перехода, выполняющие передачу управления в зависимости от состояния регистра статуса, подразделяют на три группы: знаковые, беззнаковые ипростые (см.
табл. 5.2).Команды передачи управления. Специальные команды.25Условиеr>mrImr=mrJmr<mr>mrImr=mrJmr<mпереносотрицат.переп.r=0ЛогическаяфункцияZ+(N"V)=0N"V=0Z=1Z+(N"V)=1N"V=1C+Z=0C=0Z=1C+Z=1C=1C=1N=1V=1Z=1Лабораторная работа №5Таблица 5.2. Команды условного перехода.МнемоникаПротивоположное действиеТипBGTBGEBEQBLEBLTBHIBCC/BHSBEQBLSBCS/BLOBCS/BLOBMIBVSBEQrJmr<mrAmr>mrImrJmr<mrAmr>mrImнет пер.полож.нет пер.rA0BLEBLTBNEBGTBGEBLSBCS/BLOBNEBHIBCC/BHSBCC/BHSBPLBVCBNEзнаковый-||-||-||-||беззнак.-||-||-||-||простой-||-||-||-Покажем один из способов организации циклов с помощью команд условного переходана примере сложения двух 4-байтных чисел:cpu6811org$c800ldx#$3; конечный адрес первого числаldy#$7; конечный адрес второго числаldab #$4; размер числаclc; сброс флага переносаloopldaa 0,x; сложить два байтаadca 0,ystaa 0,xdex; перейти к следующему байтуdeydecb; уменьшить число обрабатываемых байтbneloop; на 1 и повторить, если не 0Другой пример показывает использование команд переходов при проверке правильности даты, записанной в виде BCD числа в ячейках $0Þ$3 в формате ДДММГГГГ (то есть, в ячейке$0 хранится день, в ячейке $1 - месяц, а в ячейках $2 и $3 - столетие и год в столетии, соответственно):cpu6811org$c800ldx#0; установить указатель на начало датыldd0,x; загрузить в A и B день и месяцtstb; если день или месяц равен 0 илиbeqinvalid; месяц больше 13, то дата не корректнаtstabeqinvalidcmpb #$13bhsinvalidcmpb #$2; если это не февраль, то переход наbnelab2; выборку числа дней из таблицыldab 3,x; проверка високосного годаbsrbcd2binКоманды передачи управления.
Специальные команды.26lab2lab1validinvaliddonebcd2bindpmBRSET (opr),BRCLR (opr)andbbne$03lab2ldabbrabsrdecbldyabyldabcbabhiclcbra#$29lab1bcd2binsecbrapshatbaandalsrblsrblsrblsrblslbabalslblslbabatabpulartsfcb#dpm0,yinvaliddoneЛабораторная работа №5; получение остатка от деления на 4; год невисокосный, если не делится; нацело на 4; преобразование месяца в двоичный код;;;;;;;;;;настроить указатель на список днейв месяцезанести в B число дней в месяцеесли число дней больше вычисленного,то дата не корректнагод может быть любым, поэтомупроверка не производится ивозвращается признак успешнойпроверкиустановка флага ошибки;;;;преобразование числа в формате BCD,заданного в регистре B в двоичныйформатвыделение старшей тетрады*#$0F; умножение на 10 и сложение; с регистром A$31,$28,$31,$30,$31,$30,$31,$31,$30,$31,$30,$31Команды условного перехода, выполняющие передачууправления в зависимости от значения ячейки памяти используются в циклах ожидания изменения какого-либо регистраS X H I N Z V Cуправления, опросе внешних линий данных или работе с другими битовыми данными.
Простой пример показывает каким- - - - - - - образом можно обеспечить отображение информации с переключателей на светодиоды по изменению переключателя C0:cpu6811org$c800ldx#$1f00; установить регистр X на базовый; адрес PRU MC68HC24brset 3,x,#$01,l1; если младший бит установлен, тогда; перейти к программе ожидания сбросаl0bsrdisplay; отобразить информациюbrclr 3,x,#$01,*; ждать установки бита (включения C0); * - адрес текущей командыl1bsrdisplaybrset 3,x,#$01,*; ждать сброса бита (выключения C0)Команды передачи управления.
Специальные команды.27displaybraldaastaartsl03,x4,xЛабораторная работа №5; следующий цикл; отобразить состояние переключателей; на светодиодахSWIКоманды работы с прерываниями предназначены для входаили выхода из прерывания.S X H I N Z V CИногда бывает необходимо выполнить программную реализацию прерывания. Конечно, это можно реализовать через- - - 1 - - - подпрограмму, в начале которой выполняется сохранение регистров в стеке, однако это снижает эффективность работыRTIпрограммы в целом. Для выполнения этой задачи служит команда генерации программного прерывания SWI. Она выполS X H I N Z V C*няет последовательное сохранение в стеке регистров PC+1, Y,? ? ? ? ? ? ? ?*X, D, CCR, запрещает маскируемые прерывания (устанавли- значение может быть изменено только из 1 в 0.вает бит I в регистре CCR) и передает управление на подпрограмму, адрес которой находится в таблице векторов прерывания.