КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Команды ветвления и передачи управления
Битовые команды. Каждый бит из битового пространства внутренней памяти может быть установлен в 1, сброшен в 0, или инвертирован:
Могут быть реализованы переходы:
Между любым битом из битового пространства внутренней памяти и флагом переноса могут быть произведены логические операции "И" или "ИЛИ".
Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-51 доступны следующие команды:
Команды 16-разрядных безусловных переходов и вызовов подпрограмм позволяют осуществить переход в любую точку адресного пространства памяти программ объемом до 64 Кбайт. Примеры команд: LJMP Metka;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’ LCALL Podprogramma;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’ Команды 11-разрядных переходов и вызовов подпрограмм позволяют сократить объем программы, но при этом обеспечивают переходы только внутри программного модуля 2 Кбайт. Эти команды принципиально могут приводить к необнаруживаемым транслятором ошибкам, когда программный модуль размещается на двух соседних 2 Кбайтовых сегментах памяти. AJMP Metka;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’ ACALL Podprogramma;Вызов подпрограммы по адресу, обозначенному меткой ‘Podprogramma’ В системе команд имеются команды условных и безусловных переходов относительно начального адреса следующей команды в пределах от (РС)-127 до (РС)+127. Примеры команд: SJMP Metka;Переход к команде, расположенной по адресу обозначенному меткой ‘Metka’ JB P3.5, TstNxtUsl;Если на 6 выводе порта P3 нулевой потенциал, ACALL Podprogramma;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’ CJNE A, #5, TstNxtUsl;Если в аккумуляторе содержится число 5, ACALL Podprogramma;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’ Команды проверки содержимого аккумулятора и флага переноса C могут быть использованы для реализации проверки различных условий. При этом содержимое не изменяется, то есть если требуется произвести несколько проверок одной и той же переменной, то повторно заносить значение этой переменной в аккумулятор не нужно. Например: MOV A, 34;Если в переменной, хранящейся в ячейке внутренней памяти 34 JNB ACC_7, TstEQ5;число меньше нуля, CALL Podprogramma;то вызвать подпрограмму, обозначенную меткой ‘Podprogramma’ TstEQ5;------------------------------------------------------------------------------------------------------ CJNE A,#5,TstLT5;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число 5, CALL Podpr5;то вызвать подпрограмму, обозначенную меткой ‘Podpr5’ TstLT5;------------------------------------------------------------------------------------------------------ JNС TstGE5;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число, меньшее 5, CALL PodprLT5;то вызвать подпрограмму, обозначенную меткой ‘PodprLT5’ TstGE5;--------------------------------------------------------------------------------- JC TstNxtUsl;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число, большее или равное 5, CALL PodprGE5;то вызвать подпрограмму, обозначенную меткой ‘PodprGE5’ TstGT5;------------------------------------------------------------------------------------------------------ CJNE A,#6,$+3;Если в переменной, хранящейся в ячейке внутренней памяти 34 JC TstNxtUsl;занесено число, большее 5, CALL PodprGT5;то вызвать подпрограмму, обозначенную меткой ‘PodprGT5’ ;--------------------------------------------------------------------------------- JNC TstNxtUsl;Если в переменной, хранящейся в ячейке внутренней памяти 34 занесено число, меньшее или равное 5, CALL PodprLE5;то вызвать подпрограмму, обозначенную меткой ‘PodprLE5’ Как видно из приведённых примеров, команды переходов этого микроконтроллера позволяет реализовать намного более эффективные по количеству команд программы по сравнению с другими процессорами, такими как, например MCS-48. Косвенный переход JMP @A+DPTR в системе команд микроконтроллеров семейства MCS-51 обеспечивает ветвление программы по содержимому аккумулятора А. Это позволяет реализовывать операцию перехода по заданному коду, эквивалентную оператору case в языке программирования pascal, но намного быстрее (за два машинных цикла). Использование в этой команде указателя данных DPTR позволяет размещать таблицу переходов в любом месте памяти программ. Пример реализации команды выбора варианта: BeginOpCase:;Начало команды выбора вариантов------------------------------------------------------ MOV DPTR, #JMP_TBL;Задать начальный адрес таблицы переходов MOV A, 33;В этой ячейке хранится переменная, по которой необходимо осуществить переход на обслуживающую программу
CLR C;Осуществить арифметический сдвиг аккумулятора вправо RLC A;(умножить на 2) т.к. команды переходов занимают два байта
JMP @A+DPTR;Перейти к выполнению заданного в 33 ячейке кода
JMP_TBL:;начало таблицы переходов по содержимому переменной в ячейке памяти 33----------------- JMP Case0;Перейти к выполнению кода по числу 0 JMP Case1;Перейти к выполнению кода по числу 1 JMP EndCase;Это число в ячейке 33 в список разрешённых не входит JMP EndCase;Это число в ячейке 33 в список разрешённых не входит JMP Case4;Перейти к выполнению кода по числу 4 EndCase:;------------------------------------------------------------------------------------------
Дата добавления: 2014-01-07; Просмотров: 497; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |