Курс лекций - Микропроцессоры

         

Команды ветвления и передачи управления


Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-48 доступны следующие команды:

  • безусловный переход:
  • Вызов и возврат из подпрограммы: , , RETR
  • проверка содержимого аккумулятора: , , , ...
  • проверка флага переноса С: ,
  • проверка сигнала на ножке T0: ,
  • проверка сигнала на ножке T1:  ,
  • проверка сигнала на ножке INT:
  • Проверка состояния флагов пользователя ,

Команды безусловных переходов и вызовов позволяют осуществить переход в любую точку адресного пространства памяти программ в пределах страницы 2 Кбайт. Примеры команд:

;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’ CALL Podprogramma ;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’

В системе команд имеются команды условных переходов. Эти команды позволяют осуществлять переход в пределах страницы 256 байт.

Примеры использования команд условного перехода:

JB5 TstNxtUsl ;Если в 6 бите аккумулятора нулевое значение, CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’ JNZ A, #5, TstNxtUsl ;Если в аккумуляторе содержится нулевое значение, CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’

Команды проверки содержимого аккумулятора и флага переноса C могут быть использованы для реализации проверки различных условий:

MOV A, 34 ;Если в переменной, хранящейся в ячейке внутренней памяти 34 JB7 TstNxtUsl ;число меньше нуля, CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’ ;--------------------------------------------------------------------------------- MOV A, 34 ;Если в переменной, ADD A, -5 ;хранящейся в ячейке внутренней памяти 34 JZ TstNxtUsl ;занесено число 5, CALL Podpr5 ;то вызвать подпрограмму, обозначенную меткой ‘Podpr5’ ;--------------------------------------------------------------------------------- MOV A, 34 ;Если в переменной, ADD A, -5 ;хранящейся в ячейке внутренней памяти 34 JNС TstNxtUsl ;занесено число, меньшее 5, CALL PodprLT5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprLT5’ ;--------------------------------------------------------------------------------- MOV A, 34 ;Если в переменной, ADD A, -6 ;хранящейся в ячейке внутренней памяти 34 JC TstNxtUsl ;занесено число, большее 5, CALL PodprGT5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprGT5’ ;--------------------------------------------------------------------------------- MOV A, 34 ;Если в переменной, ADD A, -5 ;хранящейся в ячейке внутренней памяти 34 JC TstNxtUsl ;занесено число, большее или равное 5, CALL PodprGE5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprGE5’ ;--------------------------------------------------------------------------------- MOV A, 34 ;Если в переменной, ADD A, -6 ;хранящейся в ячейке внутренней памяти 34 JNC TstNxtUsl ;занесено число, меньшее или равное 5, CALL PodprLE5 ;то вызвать подпрограмму, обозначенную меткой ‘PodprLE5’

Косвенный переход JMPP @A в системе команд микроконтроллера обеспечивает ветвление программы по содержимому аккумулятора А.
Это позволяет реализовывать операцию перехода по заданному коду, эквивалентное оператору case в языке программирования pascal, но намного быстрее (за два машинных цикла). Пример реализации команды выбора варианта:

ORG 256 ;Разместить команды переходов по границе страницы JMP Case0 ;Перейти к выполнению кода по числу 0 JMP Case1 ;Перейти к выполнению кода по числу 1 JMP EndCase ;Это число в ячейке 33 в список разрешённых не входит JMP EndCase ;Это число в ячейке 33 в список разрешённых не входит JMP Case4 ;Перейти к выполнению кода по числу 4 BeginOpCase: ;Сюда нужно перейти командой JMP BeginOpCase MOV A, 33 ;В этой ячейке хранится переменная, по которой необходимо осуществить переход на обслуживающую программу CLR C ;Осуществить арифметический сдвиг аккумулятора вправо RLC A ;(умножить на 2) т.к. команды переходов занимают два байта JMPP @A ;Перейти к выполнению заданного в 25 ячейке кода EndCase:

Содержание раздела