Конструкция условного выполнения операторов может использоваться в неполном варианте, когда присутствует только один оператор. Для ее реализации не обязательно использовать команду безусловного перехода. Она легко реализуется одной командой условного перехода, входящей в состав системы команд любого микропроцессора (а значит и языка программирования ассемблер для него). Однако если система команд микропроцессора неполная (например, есть команда проверки на равенство, но нет проверки на неравенство), то для реализации противоположного оператора тоже может потребоваться команда безусловного перехода.
Блок-схема и примеры реализации конструкции управления условным выполнением одного оператора на языках программирования С-51 и ASM-51 приведены на рис. 7.7 и в листингах 7.11 и 7.12. Каждый из исходных текстов содержит очень подробные комментарии, поэтому дополнительные пояснения не понадобятся.
Рис. 7.7.
Третья конструкция управления — это циклическое выполнение оператора с проверкой условия после тела цикла. Оператор (или операторы), который должен повторяться в процессе выполнения этой конструкции, называется телом цикла. В процессе выполнения этих операторов обычно модифицируется некоторая переменная, значение которой влияет на завершение цикла. Эта переменная получила название «параметр цикла».
Отметим, что параметр цикла может изменяться и аппаратурой, подключенной к микроконтроллеру или входящей в его состав.
Блок-схема конструкции управления циклическим выполнением оператора с проверкой условия после тела цикла приведена на рис. 7.8. Напомню, что в качестве тела цикла можно использовать любую структурную конструкцию, в том числе и еще один оператор цикла.
Рис. 7.8.
На языках программирования высокого уровня такая конструкция входит в состав языка (оператор do… while в языке программирования С или оператор repeat… until в языке программирования PASCAL). Пример использования циклического выполнения оператора с проверкой условия после тела цикла на языке программирования С приведен в листинге 7.13. Обратите внимание, что в приведенном примере в качестве логического выражения использована константа — единица. Это приводит к бесконечному циклу, эквивалентному безусловной передаче управления на начало тела цикла при помощи ассемблерной команды jmp.
Не сложнее реализуется эта структурная конструкция управления и на языке программирования ассемблер при помощи команды условного или безусловного (для организации бесконечного цикла) перехода. Реализация конструкции цикла с проверкой условия после тела цикла очень похожа на реализацию конструкции условного выполнения оператора.
Отличие заключается в том, что передача управления в команде условного перехода осуществляется не вперед, как при условном выполнении оператора, а назад, на начало цикла. В системе команд микроконтроллеров семейства MCS-51 для реализации цикла с проверкой условия после тела цикла введена специальная команда — djnz. Она позволяет реализовать сразу два алгоритмических действия: вычитания единицы из параметра цикла и проверку содержимого параметра цикла на равенство нулю. Для обозначения начала тела цикла в программе на языке программирования ассемблер применяется метка.
Пример реализации оператора цикла с проверкой условия после тела цикла на языке программирования ASM-51 приведен в листинге 7.14. В этом примере предполагается опрос бита завершения приема байта последовательным портом RI, который объявлен где-то в тексте программы как переменная
Четвертая структурная конструкция управления — это цикл с проверкой условия до тела цикла. В отличие от предыдущего оператора тело цикла в этом операторе может ни разу не выполниться, если условие завершения цикла сразу же выполнено. Блок-схема цикла с проверкой условия до тела цикла приведена на рис. 7.9.
Рис. 7.9.
Конструкция цикла с проверкой условия до тела цикла может быть реализована при помощи средств, входящих в состав языка программирования С-51, как впрочем и других языков, предназначенных для разработки структурированных программ.