Справочник от Автор24
Поделись лекцией за скидку на Автор24

Однокристальные микропроцессоры на примере AVR ATMEGA16

  • 👀 429 просмотров
  • 📌 358 загрузок
Выбери формат для чтения
Загружаем конспект в формате ppt
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Однокристальные микропроцессоры на примере AVR ATMEGA16» ppt
Микропроцессорные системы Однокристальные микропроцессоры на примере AVR ATMEGA16 Вопросы Способы адресации памяти программ : Прямая адресация ПП Косвенная адресация ПП Относительная косвенная адресация ПП При выполнении команды линейной программы содержимое программного счётчика увеличивается на 1 (или на 2), т.е. PC:=PC+1 или PC:=PC+2. Это зависит от выполняемой команды. При наличии в программе разветвлений, условных или безусловных переходов, переходов к подпрограммам, либо при возникновении прерываний этот порядок нарушается. Адрес перехода может формироваться с использованием прямой или косвенной адресации. При прямой адресации программной памяти адрес перехода записан в коде команды и занимает одно слово. Этот способ адресации используется, например, в команде абсолютного перехода JMP и в команде абсолютного вызова CALL. На практике для удобства чтения программы указываются не абсолютные адреса, а метки, поэтому в коде команды metka означает физический адрес ячейки памяти. Синтаксис: JMP metka // команда абсолютного перехода на metka JMP PM $0145 $0146 $0147 JMP metka metka PC ... metka КОП Команда JMP выполняется за 3 машинных такта. При выполнении команды CALL адрес команды, расположенной за командой вызова, сохраняется в стеке типа «LIFO» При написании программы необходимо следить, чтобы программа не использовала в процессе своей работы область ОЗУ, выделенную для стека. В программе следует указать адрес ячейки ПД, определяющей начало стека (вершину стека). Для этого в памяти РВВ в качестве указателя стека используется пара регистров ввода/вывода SPH:SPL, расположенных по адресам $3E ($5E) и $3D ($5D) соответственно. Так как после подачи напряжения питания (или после сброса) в регистрах содержится нулевое значение, в самом начале программы указатель стека необходимо проинициализировать, записав в него адрес вершины стека, например ($023D): LDI R16,0x02 OUT SPH,R16 LDI R16,0x3D OUT SPL,R16 // загрузка в R16 числа 0x02 // пересылка числа 0x02 из R16 в регистр SPH // загрузка в R16 числа 0x3D // пересылка числа 0x3D из R16 в регистр SPL CALL met РВВ DM новое значение указателя стека SP $3B $02 $3D $02 стек 2 $023B $023C $023D $6B $05 вершина стека 1 $0569 $056A $056B CALL met ... SP $3D $3E PM met met+1 PC met 3 4 КОП 1) При вызове подпрограмм (например, командой CALL) адрес команды, расположенной за командой вызова, сохраняется в стеке. 2) Значение указателя стека при этом уменьшается на 2, т. к. для хранения адреса команд требуется 2 байта. 3) После этого в PC загружается число, являющееся операндом команды. 4) Выполняется переход по новому адресу. Команда CALL выполняется за 4 машинных такта. При косвенной адресации программной памяти адрес перехода находится в индексном регистре Z (16-разрядном), поэтому обращение может осуществляться к любому слову программной памяти без ограничения. Такой способ адресации используют команды IJMP, ICALL. При выполнении команды IJMP содержимое индексного регистра загружается в PC, т.е. PC:=[Z]. ICALL РОН РВВ DM PM стек R17 $F1 $02 $22 $01 $0122 $0123 $0124 $6D $05 1 вершина стека 3 PC $02F1 4 ICALL ... ... Z R30 R31 SP $3D $3E 2 $056C $056D $02F1 КОП 1) в стек загружается следующий адрес фоновой программы, т.е. PC:=[PC]+1. 2) содержимое указателя стека уменьшается на 2, т.е. SP:=[SP]-2. 3) в программный счётчик загружается содержимое индексного регистра Z, т.е. PC:=[Z]. 4) Выполняется переход по новому адресу. LDI R30, $70 // загрузка индексного LDI R31, $1F// регистра Z …………...... IJMP // переход к ячейке с адресом $1F70 …………...... CLR R1 // очистка R1 MOV R30, R1 // задать смещение в PМ ICALL // переход к подпрограмме // по адресу $1F00 Относительная косвенная адресация памяти программ используется во всех командах ветвления (условного перехода). Переход по заданному адресу осуществляется, если условие выполняется, т.е. если оно истинно. В противном случае выполняется переход к следующему по порядку адресу программной памяти. CP R17, R22 BREQ off // сравнить [R17] и [R22] // перейти на метку, если [R17] = [R22]; метка off // целое число со знаком в дополнительном коде // сдвинуть влево содержимое R17 (логический сдвиг) LSR R17 …………...... …………...... off: SUBI R22, $A1 // R22:=[R22]-$A1, вычитание числа $A1 PM Ai+1-63 -63 Ai Ai+1 A i+1+32 +64 BREQ 32 Адрес перехода образуется путём сложения содержимого программного счётчика с некоторым смещением q, представленным в коде команды в виде 7-разрядного кода. Туда записывается целое число со знаком. Ai+1+64 Например, команда BREQ 32 – это условный переход по «равно», т.е. когда равно содержимое двух регистров и установился флаг Z в регистре статуса SREG. В случае если «равно» PC:=[PC]+1+32, иначе PC:=[PC]+1 В командах RJMP, RCALL под смещение отведено 11 разрядов и 1 разряд под знак смещения, т.е. максимальная величина перехода составляет -2027…+2048 слов относительно адреса команды, следующей за командой перехода. При составлении программы следует учитывать максимальные пределы смещения. RJMP off_m // относительный безусловный переход // к адресу, смещённому на off_m PC 1+off_m Am Am+1 A m+1+Off_m RJMP off_m КОП Am+1+Off_m RCALL Period5 //относительный вызов подпрограммы, //расположенной по адресу, смещённому на Period5 РВВ новый SP $3D $3E SP=[SP]-2 $EF $00 $F1 $00 2 старый SP $00EE $00EF $00F0 $00F1 $24 $0E PM 1 $0E23 RCALL Period5 $0E24 КОП 3 PC $0E24+Period5 ... SP DM стек $0E24+Per КОП 4 Мнемо- Опеника ранды RJMP k IJMP JMP RCALL k k ICALL CALL k Описание Относительный безусловный Операции Флаги Такты PC ← PC + k + 1 None 2 Косвенный безусловный переход PC ← Z None 2 Абсолютный переход PC ← k None 3 PC ← PC + k + 1 None 3 Косвенный вызов подпрограммы PC ← Z None 3 Абсолютный вызов подпрограммы PC ← k None 4 переход Относительный вызов подпрограммы Непосредственная адресация памяти программ, команды JMP и CALL Относительная адресация памяти программ, команды RJMP и RCALL
«Однокристальные микропроцессоры на примере AVR ATMEGA16» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ
Получи помощь с рефератом от ИИ-шки
ИИ ответит за 2 минуты

Тебе могут подойти лекции

Смотреть все 55 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot